打開日志看下,前面看不出什么,但是最后面就很明顯,url解碼后是sq盲注
這是按照一般流程去盲注找出數據庫、表、字段及它們的長度。
所以直接跳過
直到這附近,
隨便打開一個解碼
3' OR NOT ORD(MID((SELECT IFNULL(CAST(COUNT(*) AS CHAR),0x20) FROM flag.flag),1,1))>48#
這是對flag的每個字符判斷其ascii值,本來應該是通過響應狀態碼來判斷是否成功,但是所有的狀態碼200,但是
可以對幾個大概判斷出4000左右的都為正確,5000的為錯誤的
由於python不熟,我先在文本中直接提取出所有盲注flag的響應,再通過腳本實現
!/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('200 5') == -1:
list.append([data[0], '200'])
print data[0]
line = fa.readline()
for i in list:
decode = urllib.unquote(i[0])
f.writelines(decode+' '+i[1]+'\n')
f.close()
fa.close()
獲取到log.txt,這是把access.log里成功的響應包提取出來,再來個腳本推算,比如第一個字符,4條數據,找出最大的那個即101加1即可得出該字符,具體可以看我另一張博客,其實都差不多的2333.
https://blog.csdn.net/qq_40519543/article/details/107135902
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import re
f = open('log.txt','r+')
line = f.readline()
flag = ''
for i in range(1,40):
d = re.compile(str(i)+',1\)\)>(.+?)#')
tmp = 0
while line:
data = d.findall(line)
if data:
# print data
if int(data[0]) >= tmp:
tmp = int(data[0])+1
line = f.readline()
else:
break
flag = flag + chr(tmp)
print flag