打开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' AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM(.+?)&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
结果: