Bilibili CTF

2020年10月24日

题1.页面的背后是什么?

题目地址: http://45.113.201.36/index.html

打开F12,script标签里一目了然

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
$.ajax({
url: "api/admin",
type: "get",
success:function (data) {
//console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
var input = document.getElementById("flag1");
input.value = String(data.data);
} else {
// 如果没值
$('#flag1').html("接口异常,请稍后再试~");
}
}
})
</script>

按照script里所说,直接向 http://45.113.201.36/api/admin 发送get请求即可得到flag1

题2.真正的秘密只有特殊的设备才能看到

地址和题1是一样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
$.ajax({
url: "api/ctf/2",
type: "get",
success:function (data) {
//console.log(data);
if (data.code == 200){
// 如果有值:前端跳转
$('#flag2').html("flag2: " + data.data);
} else {
// 如果没值
$('#flag2').html("需要使用bilibili Security Browser浏览器访问~");
}
}
})
</script>

按照题目,想到修改浏览器UA为 bilibili Security Browser

带上UA之后向 http://45.113.201.36/api/ctf/2 发get请求就可以拿到flag2

题3.密码是啥?

题目地址: http://45.113.201.36/login.html

猜,就硬猜

username:admin

password:bilibili

输入进去之后就可以直接拿到flag3

题4.对不起,权限不足~

题目地址: http://45.113.201.36/superadmin.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
$.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("有些秘密只有超级管理员才能看见哦~")
}
}
})
</script>

打开F12,看一下请求,发现cookie里有一个参数是

role=ee11cbb19052e40b07aac0ca060c23ee

拿去md5解密发现是User的密文

再看题目上,“有些秘密只有超级管理员才能看见哦~”

于是将Administrator拿去md5加密得到

7b7bc2512ee1fedcd76bdc68926d4f7b

将原来的cookie里的role参数替换成这个发get请求就可以拿到flag4

题5.别人的秘密

题目地址: http://45.113.201.36/user.html

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
29
30
31
32
<script>
$(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("这里没有你想要的答案~")
}
}
})
});
</script>

看到请求参数里有一个uid,猜测请求根据uid判断是否为超级管理员

直接爆破,下面的是python3的代码

1
2
3
4
5
6
7
8
9
10
11
12
import requests

for uid in range(100336889,999999999):

cookies = "你的cookies"
params = (
('uid', uid),
)

res = requests.get('http://45.113.201.36/api/ctf/5', headers=headers, params=params, cookies=cookies, verify=False).json()
if res['code'] != '403':
print(uid,res)

后面的题目暂时没有解出来

在我解题的时候服务器崩了,所以直接放弃了,等到服务器恢复之后继续解题