◆方欣 劉占豐
基于SSRF和XXE漏洞的內(nèi)網(wǎng)攻擊技術(shù)研究
◆方欣1劉占豐2
(1.長春職業(yè)技術(shù)學(xué)院 吉林 130000;2.吉林信息安全測(cè)評(píng)中心 吉林 130000)
SSRF(服務(wù)器端請(qǐng)求偽造)漏洞和XXE(XML外部實(shí)體注入)漏洞是近幾年較新的WEB應(yīng)用漏洞,不同于傳統(tǒng)的SQL注入、XSS、文件上傳等漏洞側(cè)重于外網(wǎng)攻擊,SSRF漏洞和XXE漏洞主要針對(duì)內(nèi)網(wǎng)進(jìn)行攻擊。惡意攻擊者利用兩種漏洞對(duì)WEB端的某些功能未進(jìn)行嚴(yán)格過濾的缺陷,突破外網(wǎng)無法訪問內(nèi)部網(wǎng)絡(luò)的限制,對(duì)內(nèi)網(wǎng)服務(wù)器進(jìn)行端口探測(cè)、讀取文件、攻擊內(nèi)網(wǎng)應(yīng)用、執(zhí)行系統(tǒng)命令等操作,嚴(yán)重威脅內(nèi)網(wǎng)安全。本文詳細(xì)闡述了SSRF漏洞和XXE漏洞的原理和利用方法,分析了兩種漏洞對(duì)內(nèi)網(wǎng)產(chǎn)生的危害,并提出了兩種漏洞的防御方法。
SSRF漏洞;XXE漏洞;內(nèi)網(wǎng)攻擊;WEB安全
近年來,重大網(wǎng)絡(luò)安全事故頻發(fā),2013年的斯諾登事件和2017年的永恒之藍(lán)勒索病毒的暴發(fā),引發(fā)了全世界對(duì)互聯(lián)網(wǎng)高度發(fā)展時(shí)期信息泄露的擔(dān)憂和網(wǎng)絡(luò)安全事件的恐慌。在各種網(wǎng)絡(luò)安全事件中,WEB安全問題尤為突出,并受到各個(gè)網(wǎng)絡(luò)安全公司和網(wǎng)站管理人員的高度關(guān)注,根據(jù)《OWASP Top 10 2017》顯示,SSRF漏洞和XXE漏洞均為排名靠前的高危安全漏洞,一旦被惡意攻擊者利用,便會(huì)對(duì)整個(gè)內(nèi)網(wǎng)造成嚴(yán)重的安全威脅[1]。因此,本文對(duì)SSRF漏洞和XXE漏洞的攻擊方式進(jìn)行分析,研究其防御方法,以提高網(wǎng)站維護(hù)人員的安全防御能力。
SSRF即為服務(wù)器端請(qǐng)求偽造(Server-Side Request Forge),黑客可以利用SSRF漏洞對(duì)服務(wù)器發(fā)起偽造的請(qǐng)求,以達(dá)到訪問內(nèi)網(wǎng)數(shù)據(jù)的目的,并進(jìn)行內(nèi)網(wǎng)漏洞利用或內(nèi)網(wǎng)信息探測(cè)[2]。
WEB應(yīng)用如果對(duì)訪問的地址沒有進(jìn)行過濾或過濾的不嚴(yán),便會(huì)導(dǎo)致WEB應(yīng)用能夠訪問任意的URL地址,黑客通過構(gòu)造出惡意的URL鏈接,可利用服務(wù)器端請(qǐng)求偽造漏洞進(jìn)行多種類型的內(nèi)網(wǎng)攻擊。黑客可對(duì)內(nèi)網(wǎng)的應(yīng)用程序(Redis、Jboss等)進(jìn)行攻擊;可以使用file協(xié)議讀取內(nèi)網(wǎng)服務(wù)器的文件;可獲取內(nèi)網(wǎng)主機(jī)的各種指紋信息和端口信息,也可以對(duì)內(nèi)網(wǎng)程序造成溢出。
XXE即XML外部實(shí)體注入(XML External Entity),XXE漏洞產(chǎn)生的原因是由于WEB應(yīng)用在解析XML時(shí),沒有對(duì)外部實(shí)體的加載進(jìn)行嚴(yán)格地過濾,這樣便加載了帶有payload的外部文件,因而會(huì)造成內(nèi)網(wǎng)應(yīng)用攻擊、系統(tǒng)文件讀取、內(nèi)網(wǎng)掃描、命令執(zhí)行等情況。
可擴(kuò)展標(biāo)記語言(EXtensible Markup Language,XML)可以結(jié)構(gòu)化傳輸和存儲(chǔ)信息,XML文檔結(jié)構(gòu)包括XML聲明、DTD文檔類型定義、文檔元素這三個(gè)部分[3]。XML文檔結(jié)構(gòu)如圖1所示。
DTD(Document Type Definition)包括基礎(chǔ)語法、內(nèi)部定義、外部文檔引用三個(gè)部分。
(1)DTD基礎(chǔ)語法
XML中元素定義的基礎(chǔ)語法為:。
(2)內(nèi)部定義
將文檔類型定義直接放在XML文檔中稱之為內(nèi)部定義。
(3)外部文檔引用
文檔類型定義的內(nèi)容也可以保存為單獨(dú)的DTD文檔。
1)DTD文檔在本地
例如:
2)DTD文檔在公共網(wǎng)絡(luò)上
例如:
圖1 XML文檔結(jié)構(gòu)
SSRF漏洞示例代碼如圖2所示。
圖2 SSRF漏洞代碼
代碼中的curl_exec函數(shù)負(fù)責(zé)請(qǐng)求傳入的URL,然后將請(qǐng)求的結(jié)果返回。正常情況下,url參數(shù)傳入http://192.168.1.1/ssrftest/ssrf.txt,curl_exec函數(shù)訪問192.168.1.1/ssrftest/ssrf.txt,顯示”SSRF測(cè)試信息”,但是傳入的url參數(shù)沒有經(jīng)過嚴(yán)格過濾,這樣就可能會(huì)造成SSRF服務(wù)端請(qǐng)求偽造。
XXE漏洞主要是因?yàn)閃EB應(yīng)用對(duì)外部實(shí)體的加載沒有進(jìn)行嚴(yán)格地過濾,可能造成內(nèi)網(wǎng)掃描和內(nèi)網(wǎng)應(yīng)用攻擊,XXE漏洞示例代碼如圖3所示。
圖3 XXE漏洞代碼
以上代碼中,file_get_contents函數(shù)讀取了php://input傳入的數(shù)據(jù),但是傳入的數(shù)據(jù)沒有經(jīng)過任何過濾,直接在loadXML函數(shù)中進(jìn)行了調(diào)用并通過echo函數(shù)輸出了$username的結(jié)果,這樣就導(dǎo)致了XXE漏洞的產(chǎn)生。
url參數(shù)沒有經(jīng)過嚴(yán)格過濾就可以構(gòu)造任意的url進(jìn)行SSRF漏洞利用,比如可以通過http://192.168.1.100:3306來探測(cè)內(nèi)網(wǎng)服務(wù)器(IP地址為192.168.1.100)是否開啟3306端口。輸入http://192.168.1.1/ssrftest/1.php?url=http://192.168.1.100:3306發(fā)現(xiàn)返回了數(shù)據(jù)庫的版本信息,說明內(nèi)網(wǎng)服務(wù)器確實(shí)開啟了3306端口。若沒有數(shù)據(jù)返回或返回時(shí)間延遲較大,就說明3306端口沒有開放。
SSRF漏洞可以通過file協(xié)議嘗試讀取內(nèi)網(wǎng)服務(wù)器的常見敏感文件,比如/etc/passwd文件。輸入http://192.168.1.1/ssrftest/1.php?url=file:///etc/passwd,返回了目標(biāo)服務(wù)器的用戶信息。
SSRF漏洞可以對(duì)內(nèi)部網(wǎng)絡(luò)具有命令執(zhí)行漏洞的WEB應(yīng)用發(fā)起攻擊,例如可利用此漏洞攻擊存在Jboss未授權(quán)訪問漏洞的WEB應(yīng)用,攻擊過程如下。
(1)信息探測(cè)。利用SSRF漏洞對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行掃描,如存在具有此漏洞的服務(wù)器,便可探測(cè)到開啟了JBoss服務(wù)的被攻擊機(jī)。
(2)訪問jmx控制臺(tái)。嘗試訪問JBoss的jmx控制臺(tái),輸入以下測(cè)試語句:http://192.168.1.1/ssrftest/1.php?url=http://192.168.1.100:3306/jmx-console/,發(fā)現(xiàn)存在jmx控制臺(tái)未授權(quán)訪問漏洞,可以通過jboss.deployment接口部署Web木馬。
(3)部署木馬。通過jboss.deployment接口部署Web木馬,在本地搭建的測(cè)試環(huán)境抓包,構(gòu)造payload,然后通過SSRF發(fā)送payload,攻擊內(nèi)網(wǎng)應(yīng)用。
(4)獲得Webshell。利用SSRF漏洞發(fā)起payload攻擊,發(fā)現(xiàn)已成功獲得Webshell。
(5)執(zhí)行命令。利用上傳的木馬,可以執(zhí)行各種系統(tǒng)命令,如whoami。
利用XXE漏洞進(jìn)行內(nèi)網(wǎng)探測(cè),如果端口開啟,請(qǐng)求返回的時(shí)間會(huì)很快;如果端口關(guān)閉,請(qǐng)求返回的時(shí)間會(huì)很慢。探測(cè)22端口是否開啟的payload如下:
]>
若在執(zhí)行完成后,頁面很快返回,并有SSH的banner信息,說明22端口開啟;若在執(zhí)行完成后,頁面返回很慢,并且有以下報(bào)錯(cuò)信息“failedtoopenstream:Connection refused”,說明端口未開啟。
通過加載外部實(shí)體,利用file://、php://等偽協(xié)議讀取本地文件。file://偽協(xié)議payload如下。
]>
通過POST方法提交payload,讀取/etc/passwd文件的內(nèi)容。但是利用file://偽協(xié)議無法讀取PHP文件的內(nèi)容,因?yàn)樽x取的內(nèi)容會(huì)被解析執(zhí)行,看不到源碼。可以利用php://偽協(xié)議對(duì)文件內(nèi)容進(jìn)行Base64編碼,這樣就可以讀到Base64編碼后的源碼,然后再通過Base64解碼就能獲得源碼數(shù)據(jù)。
通過XXE漏洞可對(duì)內(nèi)網(wǎng)應(yīng)用程序進(jìn)行攻擊,例如利用如下攻擊代碼對(duì)內(nèi)網(wǎng)存在jmx控制臺(tái)未授權(quán)訪問漏洞的Jboss進(jìn)行攻擊。
&name=jboss.deployment:type=DeploymentScanner,flavor=URL&methodIndex=7&arg0=http://192.168.1.1/cmd.war">]>
針對(duì)SSRF漏洞的修復(fù)方法包括:對(duì)返回的錯(cuò)誤信息進(jìn)行設(shè)置,使返回的信息保持一致;對(duì)訪問服務(wù)器的端口和IP進(jìn)行限制,禁止外網(wǎng)服務(wù)器訪問內(nèi)網(wǎng)地址;在防火墻上設(shè)置細(xì)粒度的協(xié)議過濾,內(nèi)網(wǎng)服務(wù)器僅開放http等必要的協(xié)議對(duì)其可以訪問[4]。針對(duì)XXE漏洞的修復(fù)方法包括:對(duì)用戶所提交的數(shù)據(jù)進(jìn)行嚴(yán)格過濾,如PUBLIC、SYSTEM、ENTITY等敏感詞;將libxml_disable_entity_loader設(shè)置為true,禁用外部實(shí)體[5]。
本文研究了SSRF漏洞和XXE漏洞的基本原理,對(duì)兩種漏洞的攻擊方式進(jìn)行分析和驗(yàn)證,并提出了相應(yīng)的防御方法。相比于主要攻擊外網(wǎng)的SQL注入、文件上傳、跨站腳本等漏洞,SSRF漏洞和XXE漏洞不僅攻擊WEB應(yīng)用本身,更能對(duì)整個(gè)內(nèi)網(wǎng)造成嚴(yán)重的安全威脅。因此,WEB應(yīng)用開發(fā)者和網(wǎng)站安全維護(hù)人員應(yīng)時(shí)刻堅(jiān)持零信任安全理念,不僅需要對(duì)外網(wǎng)攻擊加強(qiáng)防護(hù),同時(shí)也應(yīng)嚴(yán)格限制內(nèi)網(wǎng)服務(wù)器的訪問權(quán)限、禁用外部實(shí)體、對(duì)用戶提交的數(shù)據(jù)嚴(yán)格過濾,以提高WEB應(yīng)用的安全防護(hù)水平。
[1]印鴻吉.采用圖遍歷算法的服務(wù)端請(qǐng)求偽造漏洞檢測(cè)[J].計(jì)算機(jī)工程與應(yīng)用,2020(19):114-119.
[2]何金棟.Weblogic_SSRF漏洞檢測(cè)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].通訊世界,2017(21):44-46.
[3]應(yīng)宗浩.XXE漏洞及其防御策略研究[J].科技風(fēng),2018(19):54.
[4]張軍.SSRF漏洞檢測(cè)、利用及防范[J].通信與信息技術(shù),2015(03):69-71.
[5]邱永哲.XXE漏洞攻擊與防御研究[J].無線互聯(lián)科技,2018(06):34-36.
全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)計(jì)算機(jī)基礎(chǔ)教育教學(xué)研究項(xiàng)目(2021-AFCEC-501);長春市教育科學(xué)2020年度規(guī)劃課題(JKBLX-2020218)