bugku 流量分析之信息提取
题目给出提示,使用了sqlmap
sql注入,然后搜索下http
查出来,简单分析下,这是一个sql盲注
http中响应全部都是200,也就是说,我们不能通过响应状态来判断,
sqlmap先通过注入判断出表及字段,然后再通过盲注判断flag的每一个字符的ascii码。
前面那些判断表等都不管,只管后面盲注出的数据
先这样过滤出求数据第一个字符的 %2C1%2C1%29%29%3E 即,1,1))>
原来 是1 AND ORD(MID((SELECT IFNULL(CAST(`value` AS CHAR),0x20) FROM isg.flags ORDER BY `value` LIMIT 0,1),1,1))>64 ,为了简便,我就取了后面一点
通过上面7个包可以大概分析出,这个可以通过Length或者File Data的长度来判断回显是1还是0
Length在430左右的回显是0,而在467左右的回显为1,根据这样来判断,很快知道第一个字符的ascii码为73 即 ‘I’
可以简便一点,把回显为0的包去掉,然后在剩余的包中找出%3E后面数字最大的加1即可,
要去掉回显为0的包,我找了蛮久,但只有个http.content_length >= 130,这个130我是对比分析回显0和1两种包的File Data长度来取的,回显为0的File Data长度大概在120上下,回显为1的File Data长度大概在160上下,我就取个中间的值。
多了一个不一样的,把contains内容再改下
之后就是对比然后再更换数字去获取所有字符了,但是好麻烦!我弄到第10个字符就放弃了,想想如何用python搞定,偷懒下
先导出,这样过滤除了第一个不是外,其他都是回显为1的响应包,所以把第一个右击忽略
然后文件->导出分组解析结果->为纯文本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
#信息提取
#用正则把包含字符位置以及判断的ascii码找出来,写入txt
f = open('q.txt','r+')
fa = open('sqlmap.txt','w+')
regex = re.compile('C[\w]+%2C1%29%29%3E(.+?)]')
line = f.readline();
while line:
# print datapat.findall(line)
m = regex.search(line)
if m:
fa.writelines(m.group(0)+'\n')
print m.group(0)
line = f.readline()
f.close()
fa.close()
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
#找出每个字符所判断的最大ascii,并使其加1操作
flag = ''
f = open('sqlmap.txt','r+')
line = f.readline()
for i in range(1,34):
regex = re.compile(str(i)+'%2C1%29%29%3E(.+?)]')
tmp = 0
while line:
m = regex.findall(line)
if m:
print m
if int(m[0]) >= tmp:
tmp = int(m[0])+1
line = f.readline()
else:
break
flag = flag + chr(tmp)
print flag
这个我没写清楚,不晓得能不能容易理解。
例如第一个字符,他分别判断了ascii码以及回显如下:
ascii | 回显 |
64 | 1 |
96 | 0 |
80 | 0 |
72 | 1 |
76 | 0 |
74 | 0 |
73 | 0 |
第一个包判断字符ascii码大于64,第四个包说明大于72,但在最后一个包却小于等于73,说明为73,之后我就把无回显包去掉,再在有回显的包里取出ascii最大的一个进行加一操作就得出他的ascii码。