bilibili ctf 2020 程序员节网络安全挑战 解题报告

rui_er

2020-10-27 19:40:17

Technology

# bilibili ctf 2020 程序员节网络安全挑战 解题报告 比赛已经结束,最终得分:80pts。 [地址](https://www.bilibili.com/blackboard/activity-20201024.html) 里面的第二个“33的挑战状 —— 首届哔哩哔哩安全挑战赛” 注:可能有一些题(例如 T5)中每人的 flag 不同,请勿尝试直接输入博客中的 flag 进行解题。 # T1 题目地址进不去?没关系,万能的 view-source 大法好! 进入 `view-source:http://45.113.201.36/index.html` 发现这几行代码: ```js <script> $.ajax({ url: "api/admin", type: "get", success:function (data) { //console.log(data); if (data.code == 200){ // 如果有值:前端跳转 var input = document.getElementById("flag1"); input.value = String(data.data); } else { // 如果没值 $('#flag1').html("接口异常,请稍后再试~"); } } }) </script> ``` flag1 不就是过关要用的东西吗,手动输网址进入 `http://45.113.201.36/api/admin` 看到下面这个 xml: ```xml {"code":200,"data":"1b2a3078-01f7b16d-8e620caf-f21f54e0","msg":""} ``` 回到答题首页,题号为 1,flag 为 `1b2a3078-01f7b16d-8e620caf-f21f54e0` 即可获得 10pts。 # T2 老规矩,view-source 一下,发现下面那个 api 地址进不去了。 老老实实地回到原来网址,一行大字:`需要使用bilibili Security Browser浏览器访问~` 这是啥浏览器,百度搜不到? 果断想到改 userAgent! 例如我的 fireFox 就在网址栏输入 `about:config`,搜索 `general.useragent.override`,就可以改了。 **警告:更改前请务必备份好原来的 userAgent,可以到 [这里](http://www.all-tool.cn/Tools/ua/) 查看!否则可能导致一些功能无法正常使用!** (例如我原来的就是:`Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0`) 将 UA 改成 `bilibili Security Browser`,刷新界面,发现 `flag2: 6a4c1f7d-be44b65f-3583423d-9f5a63c9`,填入答案即可。 # T3 填个密码?按照惯例管理员账号为 `admin`,随手试一发密码 `bilibili` 竟然对了 /jk。 得到 flag:`9c91dce9-31eafdca-89be9852-7e1fb730`。 # T4 超级管理员,想到 `Administrator`,MD5 32 位加密得到 `7b7bc2512ee1fedcd76bdc68926d4f7b`,F12 存储里面看到 session,我们发送一个 session 和 role 的请求头到 `http://45.113.201.36/api/ctf/4`,其中 role 是上面那个 MD5,得到我的 flag:`3b889d30-514ddd74-c8264fbb-2b6d25b4`。 # T5 类似的办法,设置好请求头,获取到 user 后发送请求到 `http://45.113.201.36/api/ctf/5?uid={uid}` 即可,得到我的 flag:`9537ded8-b97fe4dc-008608c8-d69723ed`。 至于怎么获取到 user 嘛,根据源码界面得到:~~暴力破解大法好(~~ # T10 果然就是毒瘤,“结束亦是开始”竟然真的倒着来! 找到了 [这个](http://45.113.201.36/blog/test.php),jsfuck 解密后“程序员最多的地方”,就是 GitHub,然后发现 [这个](https://github.com/interesting-1024/end/blob/main/end.php),里面有 `end.php` 源码,进入 `http://45.113.201.36/blog/end.php`,发现显示的一致,尝试 `http://45.113.201.36/blog/end.php?id[0]=1`,发现“还差一点点啦~” 尝试 `http://45.113.201.36/blog/end.php?id[]=1&url=./flag.txt`,发现一个图片,以文本形式打开,搜索 flag,找到最终答案:`2ebd3b08-47ffc478-b49a5f9d-f6099d65`。 # T8 发现 6379 端口是开放的,用 redis 获取 flag8:`d436b982-2b81aa54-49a8d2db-87ab951a`。 此页面的其他 flag 应该是假的。 # T6 emm,直接用 python 瞎二分调 API 找 flag( 结果:`a2b0883c-ffbb8d17-9a3bbf1c-ed600c80`。 # T7 未完成 # T9 未完成