摘" 要:Web系統(tǒng)所面臨的安全問題日益嚴(yán)峻,為減輕安全從業(yè)人員的壓力,設(shè)計一個能夠?qū)W(wǎng)站以及服務(wù)器進(jìn)行目標(biāo)指紋和關(guān)鍵信息搜集的Web漏洞掃描系統(tǒng)。系統(tǒng)包括端口掃描、備份掃描、子域名掃描、Web指紋識別、查詢備案信息、C段掃描、漏洞掃描等模塊,其能夠快速準(zhǔn)確地發(fā)現(xiàn)各種Web漏洞,并給出詳細(xì)的漏洞掃描報告。安全從業(yè)人員可以通過系統(tǒng)實(shí)現(xiàn)對Web網(wǎng)站框架的自動化掃描,快速定位漏洞,并及時修復(fù),從而提高Web系統(tǒng)的安全性。
關(guān)鍵詞:網(wǎng)絡(luò)安全;安全漏洞;Web安全
中圖分類號:TP309" 文獻(xiàn)標(biāo)識碼:A" 文章編號:2096-4706(2024)12-0032-04
Design and Implementation of Web Vulnerability Scanning System
LONG Huaqiu1, ZHOU Haojian1, YAN Zijun2
(1.School of Intelligent Manufacturing, Wuyi University, Jiangmen" 529020, China;
2.School of Open Education, Jiangmen Open University, Jiangmen" 529000, China)
Abstract: The security issues faced by Web systems are becoming increasingly severe, in order to alleviate the pressure on security practitioners, a Web vulnerability scanning system is designed that can collect target fingerprints and key information from websites and servers, including port scanning, backup scanning, subdomain scanning, Web fingerprint recognition, query of record information, C-segment scanning, vulnerability scanning, etc. It can quickly and accurately discover various Web vulnerabilities and provide detailed vulnerability scanning reports. This system enables security practitioners to automatically scan the Web website framework, quickly locate vulnerability, and repair them in a timely manner, thereby improving the security of Web systems.
Keywords: network security; security vulnerability; Web security
0" 引" 言
Web掃描器是一種自動化的Web應(yīng)用程序安全測試工具。通過檢驗和利用Web應(yīng)用程序的漏洞和脆弱點(diǎn),Web漏洞掃描器可以模擬黑客攻擊,以此評估Web應(yīng)用程序的安全性。它可以自動化掃描、分析、識別并報告Web應(yīng)用程序中的安全漏洞,例如SQL注入、信息泄露、目錄穿越和跨站請求偽造攻擊等[1]。
在安全測試領(lǐng)域,Web掃描器通常被用于評估Web應(yīng)用程序的安全性,評估網(wǎng)絡(luò)滲透測試的實(shí)際效果。通過爬取網(wǎng)頁內(nèi)容、Cookie、網(wǎng)頁路徑、Robots.txt文件、開源網(wǎng)頁文本特征、圖標(biāo)、TCP響應(yīng)包、端口默認(rèn)列表等網(wǎng)站信息特征,對網(wǎng)站的可能類型和架構(gòu)進(jìn)行判斷,從而確認(rèn)網(wǎng)站可能遭受的風(fēng)險,并進(jìn)行掃描驗證[2]。它可以在短時間內(nèi)發(fā)現(xiàn)許多安全漏洞,大大提高了測試的效率和準(zhǔn)確性。Web掃描器一般分為兩種類型:被動式和主動式[3]。被動式掃描器通常是基于代理的,它會監(jiān)控Web應(yīng)用程序的流量,識別HTTP請求和響應(yīng)中的漏洞,并生成報告;主動式掃描器則是通過對Web應(yīng)用程序進(jìn)行主動測試,例如通過發(fā)送惡意數(shù)據(jù)包、嘗試?yán)@過身份驗證和檢測錯誤信息等方式來發(fā)現(xiàn)安全漏洞。Web掃描器是一種重要的安全測試工具,可以幫助企業(yè)評估Web應(yīng)用程序的安全性。
1" 系統(tǒng)設(shè)計
1.1" 系統(tǒng)總體架構(gòu)設(shè)計
系統(tǒng)采用B/S架構(gòu),后端采用Python+Flask,前端采用JavaScript+CSS+HTML+Jinja,其主要優(yōu)點(diǎn)有:跨平臺、可擴(kuò)展性、性能高、易維護(hù)、開發(fā)效率高[4]。
1.2" 系統(tǒng)模塊設(shè)計
1.2.1" 漏洞掃描選擇模塊
漏洞掃描選擇模塊為系統(tǒng)引導(dǎo)用戶可選掃描模塊,主要分為如圖1所示的8個模塊,用戶點(diǎn)擊相應(yīng)模塊進(jìn)入掃描即可。
1.2.2" 用戶傳參模塊
系統(tǒng)在進(jìn)入主頁后提示用戶選擇相應(yīng)的功能,選擇完成后,提示用戶輸入相應(yīng)的URL或者IP。輸入的數(shù)據(jù)會被傳入后端進(jìn)行白名單檢查,如果不是URL或者IP則不能成功運(yùn)行程序,此舉為安全檢查,防止用戶攻擊錯誤網(wǎng)址或者輸入不安全參數(shù)導(dǎo)致其他異常問題。傳參使用了JS代碼傳入后端再使用Python運(yùn)行,運(yùn)行完成之后返回數(shù)據(jù)傳給前端,使用Jinja模板配合CSS展示并且美化數(shù)據(jù)。主要代碼如下:
try:
if" notcheck_url(url):
print(\"url格式錯誤\")
exit()
ifurl.startswith(\"http://\"):
url = url[7:]
ifurl.startswith(\"https://\"):
url = url[8:]
ifurl.startswith(\"www.\"):
url = url[4:]
ifurl.endswith(\"/\"):
url = url[:-1]
ifurl.count(\":\") gt; 0:
url = url.split(\":\")[0]
url = url.strip()
returnurl
2" 系統(tǒng)實(shí)現(xiàn)
2.1" 實(shí)現(xiàn)思路
前端JavaScript+HTML傳參到后端,F(xiàn)lask模板接受前端傳遞的參數(shù),再傳給Python寫的方法函數(shù)執(zhí)行一系列掃描操作,再把執(zhí)行的結(jié)果通過Jinja模板引擎返回給前端,展現(xiàn)給用戶。這樣的流程,可以構(gòu)建高效、可靠和易于維護(hù)的Web漏洞掃描器。
2.2" 功能模塊實(shí)現(xiàn)
2.2.1" 端口掃描模塊
很多網(wǎng)絡(luò)威脅都是通過對主機(jī)特定的端口進(jìn)行掃描,以判斷這些端口是否存在漏洞,并利用發(fā)現(xiàn)的漏洞侵入主機(jī)中[5]。在實(shí)際進(jìn)行安全漏洞掃描的過程中,網(wǎng)絡(luò)與目標(biāo)主機(jī)相通的端口絕對是重中之重。本模塊函數(shù)實(shí)現(xiàn)了一個基于Nmap的端口掃描模塊,流程如圖2所示。輸入一個URL和一個端口列表,輸出是一個字典,包括掃描結(jié)果和消息;如輸入IP地址,掃描結(jié)果顯示有多個開放的端口和顯示端口的服務(wù)類型[6]。通過端口掃描可以幫助用戶了解目標(biāo)主機(jī)上的服務(wù)類型和運(yùn)行狀態(tài)[7],以便進(jìn)行后續(xù)的安全評估和漏洞掃描等操作,例如可以爆破22端口的SSH服務(wù),直接獲取服務(wù)器控制權(quán)限等。
2.2.2" 備份掃描模塊
函數(shù)實(shí)現(xiàn)了一個備份文件掃描模塊,備份文件是指網(wǎng)站的管理員在備份網(wǎng)站源碼的時候,不小心將其.tar或者.zip文件放在網(wǎng)站目錄下,導(dǎo)致攻擊者可以通過字典爆破的方式下載到網(wǎng)站源代碼,源碼泄露之后可以通過代碼審計的方式發(fā)現(xiàn)其網(wǎng)站脆弱點(diǎn),進(jìn)而成功攻擊網(wǎng)站。此代碼具體實(shí)現(xiàn)是用函數(shù)輸入一個URL地址,輸出是一個列表,包含了備份文件的URL及其狀態(tài)(成功或失?。?。
2.2.3" 子域名掃描模塊
函數(shù)實(shí)現(xiàn)了一個子域名掃描模塊,子域名掃描是指通過對目標(biāo)網(wǎng)站進(jìn)行DNS解析,尋找目標(biāo)網(wǎng)站下的子域名。通過這些子域名進(jìn)入目標(biāo)系統(tǒng)。函數(shù)的輸入是一個頂級域名,輸出是一個列表,包含了所有能夠找到的子域名。這些子域名可以成為黑客攻擊的目標(biāo),可能包括后臺等其他敏感系統(tǒng)、儲存數(shù)據(jù)、郵件服務(wù)等。
2.2.4" Web指紋識別模塊
Web指紋識別是一種識別Web應(yīng)用程序所使用的技術(shù)棧的技術(shù)[8]。該技術(shù)可通過分析HTTP響應(yīng)報文的特征,識別應(yīng)用程序所使用的Web框架、Web服務(wù)器、操作系統(tǒng)、語言和其他技術(shù)。這種技術(shù)通常用于識別目標(biāo)系統(tǒng)的弱點(diǎn)和漏洞。
首先,代碼會檢查傳入的URL是否合法,如果不合法則返回錯誤信息。接著,使用EHole開源組件對URL進(jìn)行指紋識別。使用該組件掃描,將結(jié)果輸出到文件finger_scan_req.txt中。等待3秒以確保組件已經(jīng)完成了指紋識別,并將結(jié)果寫入finger_scan_req.txt。接著讀取finger_scan_req.txt文件中的第一行,將其中包含的URL、CMS、服務(wù)器、狀態(tài)碼、長度和標(biāo)題等信息提取出來,存儲到一個字典中。最后,將結(jié)果字典以JSON格式寫入文件all.txt中,并返回結(jié)果字典,使用subprocess模塊來執(zhí)行命令行,可以避免直接調(diào)用系統(tǒng)Shell帶來的安全問題。
2.2.5" 查詢備案信息模塊
該備案查詢模塊使用Python的Whois庫來查詢給定URL的備案信息。在函數(shù)中,首先通過調(diào)用Whois函數(shù)并傳入URL參數(shù)來獲取相應(yīng)URL的Whois信息。然后,將獲取到的信息存儲到一個字典中,包括域名、注冊者名稱、注冊者郵箱、創(chuàng)建日期和過期日期等信息。最后,將結(jié)果返回。如果出現(xiàn)異常,則將異常信息打印出來并返回None。通過備案信息可以查詢到網(wǎng)站管理員或者備案人的郵箱等信息,從而進(jìn)行釣魚攻擊或者發(fā)現(xiàn)其他相同備案的網(wǎng)站進(jìn)行攻擊。
2.2.6" C段掃描模塊
C段掃描指的是對和目標(biāo)服務(wù)器IP處在同一個C段的其他服務(wù)器進(jìn)行掃描,以探測該段IP地址范圍內(nèi)存活的主機(jī)[9]。它通過使用concurrent.futures模塊中的ThreadPoolExecutor類實(shí)現(xiàn)多線程的并發(fā)掃描,從而提高掃描的效率。首先,該程序通過構(gòu)造一個scan_ip函數(shù)來實(shí)現(xiàn)IP地址的掃描功能。這個函數(shù)使用了Python標(biāo)準(zhǔn)庫中的subprocess模塊,調(diào)用系統(tǒng)的ping命令來掃描指定的IP地址。如果掃描結(jié)果中包含TTL信息,那么就說明該IP地址是存活的,這時就返回該IP地址;否則,返回None。其次,程序使用concurrent.futures模塊中的ThreadPoolExecutor類創(chuàng)建一個線程池,再使用executor.submit方法提交255個掃描任務(wù),每個任務(wù)對應(yīng)C段IP地址范圍內(nèi)的一個IP地址。程序調(diào)用concurrent.futures.as_completed方法來獲取已完成的任務(wù)結(jié)果。如果某個任務(wù)返回了一個非None的結(jié)果,那么就將該結(jié)果加入一個列表。最后,程序使用自定義的排序函數(shù)sort_key對結(jié)果列表進(jìn)行排序,排序按照C段IP地址中第4段的大小進(jìn)行。該模塊通過利用Python標(biāo)準(zhǔn)庫和第三方庫提供的功能,實(shí)現(xiàn)對C段IP地址范圍的高效掃描。
2.2.7" 漏洞掃描模塊
此模塊為Web漏洞掃描器中最重要的一個模塊,其原理是向目標(biāo)不斷發(fā)送PoC,然后接受目標(biāo)返回包,并判斷返回包中是否存在對應(yīng)漏洞數(shù)據(jù),以證明其存在漏洞[10]。該程序首先調(diào)用一個Check_URL函數(shù)來檢測輸入的URL是否合法。如果不合法,程序就會輸出錯誤信息并返回。如果URL合法,程序就會刪除之前保存的vuln_scan.txt文件,然后調(diào)用Afrog開源組件來進(jìn)行漏洞掃描。Afrog是一款采用Go語言編寫的性能出色、高速穩(wěn)定的漏洞掃描開源組件。其PoC涉及SQL注入、CNVD(國家信息安全漏洞共享平臺)、默認(rèn)密碼、文件上傳、任意文件刪除、未授權(quán)訪問、任意文件讀取、命令執(zhí)行等多種漏洞類型,集成的PoC較為廣泛。掃描命令中的-t選項,指定要掃描的目標(biāo)URL、-nf和-nt選項,指定不輸出header和footer信息、-json選項,指定輸出JSON 格式的掃描結(jié)果到vuln_scan _req.txt文件中。掃描完成后,程序打開vuln_scan_req.txt文件,讀取其中的JSON格式數(shù)據(jù)并進(jìn)行解析。它從每個掃描結(jié)果中提取漏洞名稱、漏洞URL和漏洞等級信息,然后將它們存儲在一個字典中。最后,程序輸出漏洞掃描結(jié)果,并返回該字典對象。
2.2.8" 報告查閱模塊
查閱報告是在生成報告之后進(jìn)行查閱,這里使用的是Jinja網(wǎng)頁模板,用于展示已經(jīng)生成的漏洞掃描報告列表。具體解釋如下:首先,定義一個網(wǎng)頁布局,包括一個標(biāo)題和一個用于展示漏洞掃描報告列表的容器。其次,使用Jinja2模板引擎,通過Python腳本將已經(jīng)生成的漏洞掃描報告列表傳遞到模板中。這里使用Zip函數(shù)將報告名稱和報告創(chuàng)建時間配對。使用for循環(huán)語句,遍歷漏洞掃描報告列表,為每個報告生成一個卡片。
3" 系統(tǒng)功能測試
3.1" 系統(tǒng)功能
Web漏洞掃描系統(tǒng)的功能如表1所示。
3.2" 系統(tǒng)運(yùn)行及測試
一個系統(tǒng)在正式上線前需要進(jìn)行功能性、安全性、可靠性測試,以保證系統(tǒng)各方面的指標(biāo)達(dá)到預(yù)期要求。在Web漏洞掃描系統(tǒng)中,系統(tǒng)測試主要涵蓋功能測試、性能測試和安全測試等幾個方面。功能測試在于驗證系統(tǒng)是否能夠?qū)崿F(xiàn)穩(wěn)定運(yùn)行,滿足設(shè)計要求;性能測試則評估系統(tǒng)的響應(yīng)時間、并發(fā)處理能力和負(fù)載均衡等指標(biāo);安全測試則專注于評估系統(tǒng)的安全性能,包括漏洞檢測能力、漏洞報告準(zhǔn)確性等;兼容性測試的主要目的是驗證Web漏洞掃描系統(tǒng)在各種操作系統(tǒng)、瀏覽器等環(huán)境下的適配性。進(jìn)行系統(tǒng)測試時,必須進(jìn)行全面的測試用例設(shè)計,以確保問題能夠被及時發(fā)現(xiàn)并進(jìn)行修復(fù)和優(yōu)化。
本系統(tǒng)功能較多,主頁如圖3所示,選取端口掃描模塊進(jìn)行測試,該模塊掃描是針對指定IP地址或者URL地址進(jìn)行的端口掃描,掃描的目的是獲取該IP地址上開放的端口情況以及端口所對應(yīng)的服務(wù)。如圖4所示,輸入IP地址為43.136.96.103,掃描結(jié)果顯示有多個開放的端口,包括21、22、80、111、3306、8888端口和顯示的端口的服務(wù)類型,例如21端口對應(yīng)的服務(wù)類型為ftp,22端口對應(yīng)的服務(wù)類型為SSH,80端口對應(yīng)的服務(wù)類型為HTTP等。通過端口掃描可以幫助用戶了解目標(biāo)主機(jī)上的服務(wù)類型和運(yùn)行狀態(tài),以便進(jìn)行后續(xù)的安全評估和漏洞掃描等操作,例如可以爆破22端口的SSH服務(wù),直接獲取服務(wù)器控制權(quán)限。
4" 結(jié)" 論
所設(shè)計的Web漏洞掃描系統(tǒng)立足于提供安全可靠的掃描,運(yùn)用Python語言,采用Flask技術(shù)、多種庫以及第三方模塊,實(shí)現(xiàn)了快速、精準(zhǔn)、有效的漏洞掃描。從安全從業(yè)者角度看,我們的Web漏洞掃描系統(tǒng)提供了便捷、強(qiáng)大、豐富的功能,集成了滲透測試過程中所需的大部分工具及技術(shù),用戶可以通過系統(tǒng)進(jìn)行端口掃描、備份掃描、子域名掃描、Web指紋識別、查詢備案信息、C段掃描和漏洞掃描等操作,同時系統(tǒng)還提供了漏洞掃描報告,讓用戶可以更好地了解漏洞掃描情況。Web漏洞掃描系統(tǒng)可以幫助他們?nèi)媪私饽繕?biāo)網(wǎng)絡(luò)的安全狀況,并發(fā)現(xiàn)可能存在的安全隱患,從而提高滲透測試的效率和準(zhǔn)確性。
參考文獻(xiàn):
[1] 廖微.智能微電網(wǎng)中具有可擴(kuò)展性的Web漏洞掃描工具研究與實(shí)現(xiàn) [J].信息安全研究,2022,8(12):1198-1208.
[2] 龍華秋,溫強(qiáng),余卓林,等.對于資產(chǎn)威脅評估系統(tǒng)的分析與研究 [J].網(wǎng)絡(luò)空間安全,2021,12(Z4):25-32.
[3] 段鵬飛.基于Web應(yīng)用安全掃描器的設(shè)計與實(shí)現(xiàn) [D].蘭州:西北師范大學(xué),2021.
[4] 呂汝勛,龍華秋,容振邦.基于Python的滲透測試輔助系統(tǒng)開發(fā) [J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2018(2):58-60.
[5] 陳俊華.網(wǎng)絡(luò)漏洞掃描系統(tǒng)研究與設(shè)計 [J].信息網(wǎng)絡(luò)安全,2013(5):64-66.
[6] 靳建宇.基于Web技術(shù)的漏洞掃描系統(tǒng)在企業(yè)安全中的應(yīng)用 [J].現(xiàn)代信息科技,2021,5(13):136-138.
[7] 梁松林,林偉,王玨,等.面向后滲透攻擊行為的網(wǎng)絡(luò)惡意流量檢測研究 [J].計算機(jī)工程,2024,50(5):128-138.
[8] 姚茗亮,魯寧,白撰彥,等.面向網(wǎng)絡(luò)資產(chǎn)漏洞評估的設(shè)備指紋搜索引擎構(gòu)建方法 [J].電子學(xué)報,2019,47(11):2354-2358.
[9] 白波,馮云,劉寶旭,等.基于網(wǎng)絡(luò)行為的攻擊同源分析方法研究 [J].信息安全學(xué)報,2023,8(2):66-80.
[10] 常會鑫. Web安全漏洞檢測系統(tǒng)設(shè)計及優(yōu)化 [D].唐山:華北理工大學(xué),2023.
作者簡介:龍華秋(1988—),男,漢族,廣東吳川人,中級工程師,碩士研究生,研究方向:信息安全、計算機(jī)系統(tǒng)管理;周皓?。?002—),男,漢族,廣東潮州人,本科在讀,研究方向:信息安全;燕紫君(1993—),男,漢族,湖北仙桃人,中級工程師,碩士研究生,研究方向:計算機(jī)系統(tǒng)管理。