李晨陽 陳吟 樊云 王鏡瑯 雷敏
摘 要:敏感目錄是指目標(biāo)服務(wù)器上存在含有敏感名稱的目錄,這些目錄中可能包含了大量的敏感文件和信息。利用該漏洞,攻擊者可全面了解目標(biāo)服務(wù)器的網(wǎng)站架構(gòu),甚至獲取敏感文件中的敏感信息,從而得到目標(biāo)服務(wù)器的控制權(quán),實施進(jìn)一步攻擊。論文介紹了敏感目錄漏洞及其危害,對HTTP協(xié)議及URL進(jìn)行分析,設(shè)計并實現(xiàn)了以字典為檢測標(biāo)準(zhǔn)的自動化檢測腳本,判斷指定主機是否存在該漏洞,并在實際測試中被成功應(yīng)用。
關(guān)鍵詞:網(wǎng)站掃描;敏感目錄;自動化檢測
中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A
Design of automated detection tool for sensitive path of websites
Abstract: Sensitive paths are paths on the target server that contain sensitive names, which may contain a large number of sensitive files and information. Using this vulnerability, attackers can fully understand the target server's site architecture, and even access sensitive information in sensitive files to gain control of the target server for further attacks. This paper introduces the sensitive paths vulnerability and its effects, analyzes the HTTP protocol and URL, designs and implements the automated detection script based on the dictionary which is successfully applied in the actual test to judge whether the server exists the vulnerability.
Key words: web scan; sensitive path; automated detection
1 引言
Web應(yīng)用的易于開發(fā)性、開放性使得Web應(yīng)用快速發(fā)展,與此同時安全問題也日益突出,Web應(yīng)用已成為攻擊者攻擊的主要對象。2015年史考特證券遭遇攻擊,同年Web托管公司000Webhost也遭遇黑客攻擊,數(shù)百萬名用戶敏感信息被泄露。此外,緩沖區(qū)溢出、跨站點腳本、目錄遍歷等各種安全問題也不斷涌現(xiàn)。
敏感目錄漏洞是一種常見的Web漏洞,它是指目標(biāo)服務(wù)器上存在含有敏感名稱的目錄,例如/upload、/database、/bak等。攻擊者可通過目標(biāo)服務(wù)器的目錄信息全面了解網(wǎng)站架構(gòu),從而對網(wǎng)站進(jìn)行入侵攻擊,獲取服務(wù)器后端數(shù)據(jù)庫信息,使得用戶敏感信息泄露。目前,中國國家信息安全漏洞共享平臺(CNVD)對該漏洞的評級為“低危”。
鑒于敏感目錄漏洞的危害和影響,方便網(wǎng)站運維人員和管理人員及時發(fā)現(xiàn)并解決問題,本文提出了編寫Python腳本來實現(xiàn)對網(wǎng)站敏感目錄漏洞的自動掃描與檢測。本文通過對HTTP協(xié)議以及URL的分析,設(shè)計了基于字典的通過探測服務(wù)器響應(yīng)信息來檢測Web網(wǎng)站敏感目錄的腳本。最后,以內(nèi)網(wǎng)中一臺存在敏感目錄漏洞的主機(試驗機)為例,測試了腳本的運行結(jié)果。
2 漏洞簡介
漏洞指的是在系統(tǒng)設(shè)計、實現(xiàn)、管理或者操作時產(chǎn)生的可能引發(fā)系統(tǒng)安全問題的缺陷或弱點,使得系統(tǒng)或其應(yīng)用數(shù)據(jù)的保密性、完整性、可用性、訪問控制以及監(jiān)測機制等方面面臨威脅。Web漏洞可分為服務(wù)器端漏洞和客戶端漏洞兩大類。
敏感目錄是指目標(biāo)服務(wù)器中含有敏感名稱或敏感文件的目錄,如/admin、/robots.txt、/index.php、/upload等。利用該漏洞,攻擊者可全面了解目標(biāo)服務(wù)器的網(wǎng)站架構(gòu)。此外,敏感名稱的目錄中可能包含了大量的敏感文件和腳本,如服務(wù)器的配置信息、管理腳本、數(shù)據(jù)庫信息以及后臺管理界面等,攻擊者可通過暴力破解等方式直接訪問管理界面,獲取目標(biāo)服務(wù)器的控制權(quán),實施進(jìn)一步的攻擊,并對目標(biāo)服務(wù)器造成嚴(yán)重的危害。
敏感目錄雖是低危漏洞,但若被攻擊者利用,同樣會對目標(biāo)服務(wù)器造成巨大的危害。若網(wǎng)站運維人員或管理人員發(fā)現(xiàn)檢測出的敏感目錄中包含了敏感文件或腳本時,可以對該目錄進(jìn)行非常規(guī)的重命名;也可以設(shè)置權(quán)限,禁止用戶訪問;還可將敏感文件或腳本與網(wǎng)站目錄分離,放在不易猜測的路徑中;若目錄中內(nèi)容是非必要的,則可以考慮刪除該目錄。
3 檢測工具設(shè)計
3.1 HTTP協(xié)議分析
本文設(shè)計的檢測工具通過向目標(biāo)服務(wù)器發(fā)送請求,并根據(jù)獲取的服務(wù)器響應(yīng)來檢測Web網(wǎng)站的敏感目錄,這一功能基于HTTP協(xié)議。
超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)是WWW服務(wù)器與瀏覽器間傳輸超文本的網(wǎng)絡(luò)協(xié)議,它是基于請求與響應(yīng)模式的、無狀態(tài)的協(xié)議,絕大多數(shù)的Web開發(fā)都是構(gòu)建在HTTP協(xié)議上的Web應(yīng)用。HTTP協(xié)議示意圖如圖1所示。
HTTP報文包括請求報文和響應(yīng)報文。請求報文由請求行、請求頭、空行以及正文四部分構(gòu)成。請求行一般由請求方式、URI以及協(xié)議版本組成,在HTTP/1.1版本提供的八種請求方式中,POST方法和GET方法最為常見,其中GET方法常用于對特定資源的訪問請求,在本文設(shè)計的檢測工具中使用了GET方法。請求報文結(jié)構(gòu)如圖2所示。
HTTP響應(yīng)報文也由四部分構(gòu)成,包括狀態(tài)行、響應(yīng)頭、空行以及響應(yīng)正文。狀態(tài)行一般由協(xié)議版本、狀態(tài)碼以及消息組成,例如:
HTTP/1.1 200 OK
其中HTTP/1.1表示該報文使用的HTTP協(xié)議版本,200為響應(yīng)報文的狀態(tài)碼,表示找到了請求的特定資源,響應(yīng)正文OK表示一切正常,是指服務(wù)器返回的資源信息。根據(jù)請求信息的不同,服務(wù)器返回的響應(yīng)狀態(tài)碼也不同。常見的響應(yīng)報文狀態(tài)碼及其所對應(yīng)的含義如圖3所示。
本文設(shè)計的敏感目錄檢測工具則是根據(jù)探測服務(wù)器響應(yīng)信息,即獲取響應(yīng)報文的狀態(tài)碼來設(shè)計實現(xiàn)的。
3.2 URL分析
Web站點敏感目錄的爬取與URL密切相關(guān),統(tǒng)一資源定位符(Uniform Resource Locator,URL)是對互聯(lián)網(wǎng)上可獲取資源的位置及訪問方法的簡潔表示,互聯(lián)網(wǎng)上每個資源都有唯一的URL。
基本的URL包括協(xié)議/模式(Scheme)、服務(wù)器名稱(Host)、端口(Port)和路徑(Path)四部分,此外還有用戶名(Name)和密碼(Pwd)、參數(shù)(Parameters)、查詢(Query)以及片段(fragment)等。URL組成及含義如圖4所示。
URL的通用格式為:
scheme://name:pwd@host[:port]/path/[;params][?query][#fragment]
3.3 自動化腳本設(shè)計
基于HTTP協(xié)議及URL格式分析,本文按照圖5思路設(shè)計編寫自動化檢測腳本。
首先,通過用戶輸入獲取目標(biāo)服務(wù)器地址及字典參數(shù):
獲取成功后,需要使用Python中urlparse函數(shù)對目標(biāo)服務(wù)器
URL進(jìn)行解析,獲取目標(biāo)服務(wù)器名稱(host)信息,并將該信息作為數(shù)據(jù)庫名稱永久存儲。urlparse函數(shù)可將URL解析為6個組件,但其在解析時,URL開頭部分必須包含“//”,否則無法正確解析出服務(wù)器名稱,所以需要對獲取的服務(wù)器地址進(jìn)行驗證或修改:
本文設(shè)計的自動檢測腳本需要獲取響應(yīng)報文的狀態(tài)碼等信息,這里選用Python第三方庫requests來完成,requests.get()方法表示以GET方式發(fā)送請求,其返回結(jié)果為一個存儲了服務(wù)器響應(yīng)信息的response對象,響應(yīng)信息包括狀態(tài)碼,響應(yīng)實體等。該部分關(guān)鍵代碼為:
其中target為要請求的URL。將allow_redirects參數(shù)設(shè)置為False,表示不允許頁面跳轉(zhuǎn),若出現(xiàn)頁面跳轉(zhuǎn)則返回的狀態(tài)碼為302,而不是200。
請求的URL則是由字典及用戶輸入的服務(wù)器地址共同構(gòu)造的,所以需要將字典中敏感目錄以行為單位提取出來,保存在以list命名的數(shù)組中,接著再分別與服務(wù)器地址構(gòu)造成URL。關(guān)鍵代碼為:
此外還需要考慮到敏感目錄信息的永久存儲,Python 2.5 x以上版本已默認(rèn)自帶sqlite3模塊。首先需要創(chuàng)建用于存儲服務(wù)器掃描結(jié)果的數(shù)據(jù)庫,確定表名、列名以及列的數(shù)據(jù)類型。其中數(shù)據(jù)庫名由URL解析獲得的host信息確定,列名則包括返回狀態(tài)碼(status_code,TEXT)和服務(wù)器存在的敏感目錄(path,TEXT)。
在使用requests.get()方法獲取到服務(wù)器的響應(yīng)信息后,需要判斷請求的URL是否已存在于數(shù)據(jù)庫中,若不存在且響應(yīng)碼不為404,通過insert將該條信息插入對應(yīng)數(shù)據(jù)庫的表中即可。關(guān)鍵代碼如下:
在腳本運行結(jié)束后,若目標(biāo)服務(wù)器名稱對應(yīng)的數(shù)據(jù)庫不為空,則表示該服務(wù)器存在敏感目錄,返回并顯示掃描結(jié)果:
3.4 實際測試
實際測試環(huán)境為含有敏感目錄的docker鏡像,首先使用如如6所示命令加載鏡像:
$ docker load < sens_path.tar
接著使用如圖7所示命令啟動被加載成功的docker鏡像:
$ docker run -d -p 8004:80 joomla:v2
本次測試中,使用自定義字典payload.txt對目標(biāo)網(wǎng)站進(jìn)行掃描,輸入命令“python sens_path.py 10.109.35.113:8004(要檢測的地址)”,運行自動化檢測腳本,可檢測出目標(biāo)網(wǎng)站存在的敏感目錄,如圖8所示。
4 結(jié)束語
Web應(yīng)用不斷發(fā)展的同時,其安全問題也受到越來越多的重視關(guān)注。本文通過對HTTP協(xié)議以及URL結(jié)構(gòu)的分析,提出了編寫Python腳本以實現(xiàn)對Web網(wǎng)站敏感目錄的自動檢測。通過本文設(shè)計的自動化檢測腳本,可對目標(biāo)服務(wù)器進(jìn)行快速掃描,便于管理、運維人員及時發(fā)現(xiàn)安全問題。
基金項目:
國家科技支撐計劃(項目編號:2015BAH08F02)。
參考文獻(xiàn)
[1] 王琪.面向Web應(yīng)用的漏洞掃描技術(shù)研究[D].南京郵電大學(xué), 2016.
[2] 王濤.HTTP協(xié)議技術(shù)淺析[J].中國新技術(shù)新產(chǎn)品, 2013(22):14-14.
[3] 胡志偉.Web應(yīng)用安全漏洞掃描系統(tǒng)的設(shè)計與實現(xiàn)[D].北京郵電大學(xué),2013.
[4] 胡冬梅.基于B/S架構(gòu)Web應(yīng)用安全防范[J].信息安全與通信保密,2013(1):31-31.
[5] 楊新英.基于網(wǎng)絡(luò)爬蟲的Web應(yīng)用程序漏洞掃描器的研究與實現(xiàn)[D].電子科技大學(xué), 2010.
[6] 丁敏.基于python語言實現(xiàn)自動化測試的研究[J].數(shù)字技術(shù)與應(yīng)用,2010(3):88-88.
[7] 錢劼,雷敏,鄒仕洪.Java反序列化漏洞自動檢測腳本設(shè)計[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017,(08):66-68.