题目提示这是一道sqlmap注入过程分析题, 所以我们直接过滤出http流量. 直接 文件->导出分组解析结果->为CSV
![http流量](https://i-blog.csdnimg.cn/blog_migrate/450c1e3272c4d45a23dafbbc40acd20d.png)
经过观察, 可以发现这是一次sqlmap注入过程.
导出分组解析结果为csv文件, 接下来的操作就是先将url编码转换过来, 找到注入flag的地方. 发现是从编号806的数据包开始:
"806","11.987578","10.0.0.101","10.0.0.201","HTTP","592","GET /message.php?id=1 AND ORD(MID((SELECT IFNULL(CAST(`value` AS CHAR),0x20) FROM isg.flags ORDER BY `value` LIMIT 0,1),1,1))>64 HTTP/1.1 "
"808","11.988800","10.0.0.201","10.0.0.101","HTTP","467","HTTP/1.1 200 OK (text/html)"
上面就是开始注入flag的地方, 经过分析发现注入方法是二分法.
![二分法](https://i-blog.csdnimg.cn/blog_migrate/6b5f8bd4c9c8603f085e85e26c2e5f57.png)
如果大于64成功, 那么加上64的1/2即在判断是否大于96, 依次判断下去, 最后的判断结果一定会收敛最后一个判断的数字的本身或者比它大1.
而且我们发现如果注入的结果是真, 那么返回的消息会有这一行, 消息长度应该大于460.
![为真时](https://i-blog.csdnimg.cn/blog_migrate/ce7312f8e1dc80d81b5d5b7ec3ce686b.png)
否则返回的响应长度小于440, 因为没有 The quick.... 这组数据.
![为假时](https://i-blog.csdnimg.cn/blog_migrate/450609eb955b2999745f96907658a60e.png)
拿编号866的数据包来分析, 如果判断的结果大于73, 那么如果下一行返回的响应信息的长度大于460(因为成功的响应会多一行), 那么这次注入的结果应该是73+1为74, 但是我们发现返回的响应长度是430, 小于440, 即为假, 那么最后的结果就应该是73, 字符 I.所以flag的第一个字符是 I.
那么接下来是写脚本得出这个flag的值. 附上我的脚本:
import re
import urllib.parse
# 更改为自己从wireshark提取出的csv文件地址
f = open(r"D:\temp\sqlmap.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)