周星佑 王會(huì)
【摘要】使用Python中的requests,socket等庫(kù),通過(guò)探測(cè)和分析HTTP(s)的返回包,實(shí)現(xiàn)對(duì)目標(biāo)Web應(yīng)用程序的IP,子域名還有敏感信息的探測(cè),分析目標(biāo)Web是否存在漏洞和安全隱患進(jìn)而設(shè)計(jì)出一款較為全面的漏洞掃描器。
【關(guān)鍵詞】Python 漏洞掃描
1背景介紹
在產(chǎn)品測(cè)試人員的平時(shí)工作中,經(jīng)驗(yàn)需要用到掃描器對(duì)Wbe應(yīng)用程序進(jìn)行深度掃描。根據(jù)網(wǎng)絡(luò)漏洞的常見(jiàn)特征,對(duì)Web應(yīng)用程序執(zhí)行全面的安全檢查,以便在網(wǎng)站上線前發(fā)現(xiàn)并修復(fù)漏洞。
而安全人員在滲透Web應(yīng)用程序中,第一步要做的便是信息收集。信息收集的目的是最大限度地收集與目標(biāo)相關(guān)的信息,并找到所有可能的攻擊人口。而掃描器恰恰能提高滲透測(cè)試人員的效率。掃描器的開(kāi)發(fā)往往是內(nèi)部專業(yè)人員使用,所以在性能方面無(wú)需太大的追求,而Python性能雖然不及c,Java,C++等語(yǔ)言,但其快速上手和強(qiáng)大的第三方庫(kù),大大受到了安全從業(yè)者的喜愛(ài)。
2掃描器的結(jié)構(gòu)與流程
掃描器的結(jié)構(gòu)如下:
掃描器能對(duì)單個(gè)URL進(jìn)行深度的檢測(cè);其中主要功能的為:(1)IP/端口檢測(cè),安全從業(yè)人員將目標(biāo)URL輸入掃描器中,掃描器將自動(dòng)檢測(cè)其IP和開(kāi)放端口;(2)端口爆破,當(dāng)檢測(cè)到有敏感的端口對(duì)外開(kāi)放時(shí)掃描器將對(duì)其進(jìn)行爆破。比如21端口的ftp,3389端口的telnet;(3)子域名枚舉,掃描器會(huì)對(duì)按照給定的字典,對(duì)目標(biāo)url進(jìn)行子域名爆破。根據(jù)響應(yīng)包判斷是否存在;(4)敏感信息/敏感目錄挖掘,掃描器會(huì)按照給定字典,在目標(biāo)URL加對(duì)應(yīng)目錄和敏感配置文件進(jìn)行訪問(wèn),根據(jù)其響應(yīng)包進(jìn)行判斷是否存在
3基于python第三模塊的技術(shù)實(shí)現(xiàn)
當(dāng)對(duì)URL進(jìn)行IP檢測(cè)時(shí),我們只需用到socket庫(kù)。
ipaddr=socket. getbyhostname( url)便可以得到對(duì)應(yīng)的IP地址。
當(dāng)python提取到對(duì)應(yīng)的IP地址后,接著便進(jìn)行端口掃描。
nmap是安全從業(yè)人員最喜歡的端口掃描工具。端口掃描在滲透測(cè)試過(guò)程中扮演著極其重要的角色,假設(shè)對(duì)方服務(wù)器開(kāi)啟了危險(xiǎn)端口而不自知的話,安全從業(yè)人員可以應(yīng)用相應(yīng)的端口漏洞直接提取服務(wù)器權(quán)限。
Python有和nmap對(duì)應(yīng)的第三方庫(kù),Libnmap和nmap。
以nmap為例,port_scan= nmap. PortScanner() result=port_scan.scan(hots,port)
當(dāng)傳人IP地址和端口范圍,再加上Nmap需要的參數(shù)便可對(duì)目標(biāo)IP進(jìn)行端口掃描
端口爆破,當(dāng)端口掃描到較為危險(xiǎn)的函數(shù)的開(kāi)放時(shí),接著便要通過(guò)python對(duì)這些端口進(jìn)行應(yīng)用。如21端口,3389端口處于open狀態(tài),測(cè)試人員可以嘗試對(duì)該服務(wù)進(jìn)行賬號(hào)密碼的爆破。使用到的Python第三方庫(kù)為:ftplib,teInetlib
以ftp爆破為例核心代碼為:
import ftplib
f= ftplib. FTP() {.connect( ServerIP, PORT,timeout=10)
f.login( username, password)
print“Login sucess....”
#一個(gè)簡(jiǎn)單的對(duì)ftp進(jìn)行爆破的方式
接著寫(xiě)一個(gè)函數(shù)向其傳人字典的username和password。
user_handler=open(userlist) pass_handler=open(passlist)#打開(kāi)字典文件
username=user_handler.readlines()
password= pass_handler.readlines()#讀取字典
如果爆破成功屏幕會(huì)顯示Login sucess
子域名枚舉,我們可以使用谷歌黑客的方法,以百度為例,百度搜索:site:baidu.com,接著我們便可以看到搜索引擎出現(xiàn)大量的百度的子域名?;蛘呶覀兛梢越柚鶳ython第三方庫(kù)requests對(duì)目標(biāo)url加子域名對(duì)回應(yīng)包進(jìn)行判斷。還可以通過(guò)向DNS服務(wù)器發(fā)送DNS Query,根據(jù)返回包的信息來(lái)判斷是否存在其他子域名,用到的第三方庫(kù)有dns.resolver和dns.rdatatype
敏感信息/目錄,挖掘敏感信息和目錄在滲透過(guò)程中扮演著重要的角色,由于開(kāi)發(fā)人員的疏忽,部分藏有網(wǎng)站配置信息,管理員后臺(tái),上傳文件地方,內(nèi)部使用網(wǎng)頁(yè)等沒(méi)有及時(shí)設(shè)置權(quán)限或者隱藏,導(dǎo)致網(wǎng)站處于非常危險(xiǎn)的地步。我們可以通過(guò)判斷requests的返回包的status_code來(lái)判斷是否存在。來(lái)百度為例,正常訪問(wèn)的status_code是200
安全從業(yè)者可以打開(kāi)一個(gè)字典文件(如list. txt)構(gòu)造http://baidu.com/pathl,然后進(jìn)行訪問(wèn),通過(guò)response的狀態(tài)碼進(jìn)行判斷該目錄是否存在。接著將存在的目錄輸出。
If response.status_code==200: print url+“200”
當(dāng)掃描器所有的流程都完成后,便是安全從業(yè)人員對(duì)掃描后的結(jié)果進(jìn)行篩選
提取有益的信息更加高效的對(duì)目標(biāo)進(jìn)行滲透
4結(jié)束語(yǔ)
隨著2017年信息安全法的頒布,web安全逐漸走進(jìn)人們的視野。各大網(wǎng)頁(yè)開(kāi)發(fā)人員,管理人員開(kāi)始重視用戶的隱私。而導(dǎo)致發(fā)生信息泄露的往往是開(kāi)發(fā)人員和管理員的疏忽。讓黑客有了可取之機(jī)。而一個(gè)全面搜集信息的掃描器可以大大規(guī)避這樣的風(fēng)險(xiǎn)。
參考文獻(xiàn):
[1]陳春玲,張凡,余瀚.Web應(yīng)用程序漏洞檢測(cè)系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2017.
[2]高瑞,周彩蘭,朱榮,網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘技術(shù)研究[J].現(xiàn)代電子技術(shù),2018.
[3]王大偉,基于Python的Web API自動(dòng)化測(cè)試方法研究[J].電子科學(xué)技術(shù),2015.