bugku 日志审计 python

打开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

 

结果:

posted @ 2020-07-02 11:37  为之。  阅读(135)  评论(0编辑  收藏  举报