Bugku--信息提取--分析

题目提示这是一道sqlmap注入过程分析题, 所以我们直接过滤出http流量. 直接 文件->导出分组解析结果->为CSV

http流量
过滤出http流量

 

经过观察, 可以发现这是一次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的地方, 经过分析发现注入方法是二分法.

二分法
sqlmap二分法

 

如果大于64成功, 那么加上64的1/2即在判断是否大于96, 依次判断下去, 最后的判断结果一定会收敛最后一个判断的数字的本身或者比它大1.

而且我们发现如果注入的结果是真, 那么返回的消息会有这一行, 消息长度应该大于460.

为真时
为真时

否则返回的响应长度小于440, 因为没有 The quick.... 这组数据.

为假时
为假时

 

拿编号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)

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值