这道题提示的是sqlmap。
打开这个包之后,
只有HTTP和TCP协议,HTTP协议才是有内容的,所以直接过滤HTTP。
点击一下其中的GET 行,发现都是类似SQL注入的语句,
解码之后看看,
还有其他的,比如
这样看有点太慢了,还是总体保存下来看比较好。
导出分组解析结果,为CSV格式。
保存之后用记事本另存为,然后URL解码,
在806的这一行时候看到了,二分法!!!!!布尔盲注【网上查的资料】
之后也是很明显的在猜解flag的值,从第一个字符串开始。
回到wireshark里面,看到806这一行,808是返回OK的一行,发现里面有一行神秘信息,
而在下面一个816的返回值中,就没有这个信息了。
以此类推,推理出有这个信息的,表示猜解成功,比如说第一个字符是大于64,而不是大于96的。并且这个信息的长度,可以观察到失败的是430或者431,成功的大于430。
还是字符太多了啊,不可能一个个去推理,必须编程!
import re
import urllib.parse
# 更改为自己从wireshark提取出的csv文件地址
f = open(r"C:\\Users\\apple\\Desktop\\1.csv")
lines = f.readlines()
datas = []
# 转码, 保存进datas
for line in lines:
datas.append(urllib.parse.unquote(line))
lines = [] # 懒得改, 就复用一下, 这个lines保存注入flag的url
for i in range(len(datas)): # 提取出注入flag的url
if datas[i].find("isg.flags ORDER BY `value` LIMIT 0,1),1,1))>64") > 0:
lines = datas[i:]
break
flag = {}
# 用正则匹配
macth1 = re.compile(r"LIMIT 0,1\),(\d*?),1\)\)>(\d*?) HTTP/1.1")
macth2 = re.compile(r'"HTTP","(\d*?)","HTTP/1.1 200 OK')
for i in range(0, len(lines), 2): # 因为有返回响应, 所以步长为2
get1 = macth1.search(lines[i])
if get1:
key = int(get1.group(1)) # key保存字符的位置
value = int(get1.group(2)) # value保存字符的ascii编码
get2 = macth2.search(lines[i + 1])
if get2:
if int(get2.group(1)) > 450:
value += 1
flag[key] = value # 用字典保存flag
f.close()
result = ''
for value in flag.values():
result += chr(value)
print(result)
用大神的代码试试,
这里筛选的长度设置为450,比较保险一点。
python脚本中使用了group函数,以正则表达式的分组来分割。
a = “123abc456” print re.search("([0-9])([a-z])([0-9])",a).group(0) #123abc456,返回整体 print re.search("([0-9])([a-z])([0-9])",a).group(1) #123 print re.search("([0-9])([a-z])([0-9])",a).group(2) #abc print re.search("([0-9])([a-z])([0-9])",a).group(3) #456
ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}
欢迎关注我的微信公众号,大家一起学习,一起进步吧!!~~~