速度爆破-shiyanbar的一個編程題
shiyanbar中的一個ctf練習題,題目大概意思是:網頁上給定一個sha1的hash值,這個hash值是1-100000中隨機的一個整數先通過‘md5‘hash一次,然後再通過’sha1‘hash一次。如果能在兩秒之內得到這個值,再輸入並提交則過關。題目鏈接:http://ctf5.shiyanbar.com/ppc/sd.php . 截圖下:
(二).分析:
既然是編程題,當然得編程來完成,思路也很簡單。筆者用的python。
1.要求要在兩秒鐘之內完成,相對來說,效率肯定要高:
python的效率在大多數情況相對低級語言來說要低很多,瓶頸所以要竟可能快的得到這個整數,如果先得到網頁給定的hash值然後在逐個整數循環計算比較,那就是在浪費這兩秒,為了避免時間的不足,這兩秒只完成三個任務:
1.獲取網頁上的hash值。
得到網頁上的sha1值,方法很多,beautifulsoup或者re或者xpath等等,re的底層是C實現的,所以效率相對較高,筆者用的是xpath,re是默認自帶的庫,其他兩個是三方庫裏的,需要提前安裝。
2.找出這個整數。
3.提交這個整數。
2.要存儲這些整數所對應的hash值:
筆者是使用列表來存儲的,查詢過程最多消耗100001次,現在絕大部分處理器都是足以勝任的。
3.最好偽裝成瀏覽器:
有些驗證可能會對瀏覽器代理有要求,養成這個習慣還是挺好的,有時可能會寫爬蟲。
4.post我們得到的值:
要post數據給服務器,首先要得到表單的參數,可以通過瀏覽器自帶的代碼檢查,或這firebug之類的插件,便可分析出來,筆者用的是wireshark,也可以用其他抓包軟件,如下圖:
(三).效果如下:
執行腳本後返回的結果裏面有通關所需的東西,終端編碼有點問題所以顯示的亂碼:
(四).貼上代碼:
#!/usr/bin/env python #-*- coding:utf-8 -*- import hashlib import requests from lxml import etree #The list of saving hash value of these integer l = [] #The User-Agent of Browser header = {"User-Agent":"Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0"} #Target url url = "http://ctf5.shiyanbar.com/ppc/sd.php" #Caculate hash value and save it to list for i in range(1,100001): md5 = hashlib.md5() sha1 = hashlib.sha1() md5.update(str(i)) sha1.update(md5.hexdigest()) l.append(sha1.hexdigest()) #Get target page and obtain the sha1 value on this page ss = requests.Session() ctt = ss.get(url, headers = header).content xml = etree.HTML(ctt) sha = xml.xpath('//div[@name="sha1"]/text()')[0] #Search the hash value and get index value on the list for index ,value in enumerate(l): if sha == value: #post the integer that corresponding the sha1 value data1 = {"inputNumber":index+1} result = ss.post(url,data = data1, params = header).content break #Output return page's content print(result)
(五).說明
這種方式用處還是挺大的,比如登錄驗證,或者暴力破解登陸驗證,或這自動化登陸等等。不過現在很多登陸頁面都加入了驗證碼機制或更高級的機制,稍微會麻煩寫,不過現在機器識別還是很強大的,可以用其作為輔助,從而完成更加艱難的任務。
(六).如有錯誤,還請斧正.
速度爆破-shiyanbar的一個編程題