打开log,长长的一片,
直接搜索flag,找到后面一部分
简单分析一下,在这flag之前的信息都没用,所以我就直接删除了,
对id参数的值进行url解码发现这是在注入,但是这样分析太麻烦了,所以我想尝试使用python来获取数据
先是获取到所有id参数的值并且将其url解码,同时把该请求的响应状态码200或404一同放入log.txt中
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import urllib
#将access.log中的id参数值url解码,以及状态放入log.txt中
f=open("log.txt","w+")
fa=open("access.log","r+")
datapat = re.compile('id=(.+?)&Submit')
line = fa.readline()
print line
list = [];
while line:
# print datapat.findall(line)
data = datapat.findall(line)
if line.find('404') == -1:
list.append([data[0],'200'])
else:
list.append([data[0],'404'])
line = fa.readline()
for i in list:
decode = urllib.unquote(i[0])
f.writelines(decode+' '+i[1]+'\n')
f.close()
fa.close()
得到log.txt
这是在盲注,由分析可以知道,前6行是判断该表中有多少数据,前3行判断出一个ascii码为49即数字1,后3行判断出没有,也就是说,拼接完成后得到数据量为1
后面就全部是对该数据进行注入获取了,mid(..,1,1)是获取数据的第一个字符,mid(..,2,1)是获取第二个字符,
由判断可以知道第一个字符的ascii码为102即'f',后面那应该就是flag了
对此写一个python代码来跑
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
import urllib
#获取到所有响应为200的行,并匹配获取数据的行,就是去掉前6行
f=open("log1.txt","w+")
fa=open("access.log","r+")
datapat = re.compile('id=2%27%20AND%20ORD%28MID%28%28SELECT%20IFNULL%28CAST%28flag%20AS%20CHAR%29%2C0x20%29%20FROM(.+?)&Submit')
line = fa.readline()
# print line
list = [];
while line:
data = datapat.findall(line)
if data:
print data
if line.find('404') == -1://只要不是404的就放入文本中
list.append(data)
line = fa.readline()
for i in list:
print i[0]
for i in list:
decode = urllib.unquote(i[0])//对其进行url解码
f.writelines(decode+'\n')
f.close()
fa.close()
#对log1.txt中的每行数据的ascii获取到,获取数据每个字符对应的几行里数字最大的一个进行+1再转字符
f = open('log1.txt','r+')
line = f.readline()
flag = ''
for i in range(1,25):
d = re.compile(str(i)+',1\)\)>(.+?) AND')
tmp = 0
while line:
data = d.findall(line)
if data:
if int(data[0]) >= tmp:
tmp = int(data[0])+1
line = f.readline()
else:
break
flag = flag + chr(tmp)
print flag
log1.txt
结果: