Struts2-057 兩個版本RCE漏洞實例分析
前言
2018年8月22日,Apache Strust2發布最新安全公告,Apache Struts2存在遠端程式碼執行的高風險漏洞(S2-057/CVE-2018-11776),該漏洞由Semmle Security Research team的安全研究員Man YueMo發現。
該漏洞是由於在Struts2開發框架中使用namespace功能定義XML配置時,namespace值未被設定且在上層動作配置(Action Configuration)中未設定或用通配符namespace,可能導致遠端程式碼執行。同理,url標籤未設定value和action值且上層動作未設定或用通配符namespace時也可能導致遠端程式碼執行,經過筆者自建環境成功復現漏洞且可以執行指令回顯,文末有你們想要的!
漏洞利用
筆者搭的環境分別是Strust2 2.3.20版本和Strust2 2.3.34版本,漏洞利用大致分為三種方式:數值計算、彈出計算器、命令回顯。
2.1 數值計算
數值計算相對最簡單,在URL上指定%{100 200} 就可以發生跳轉,得到計算的結果
#2.2 彈出計算器
2.3.20版本的POC如下:
2.3.3 4版本參考的POC如下:
2.3 指令回顯
兩個版本都是利用com.opensymphony.xwork2. dispatcher.HttpServletResponse物件去列印指令執行後的回顯資料
#2.3.20版本的POC如下:
2.3.34版本的POC如下:
攻擊後效果如下圖
漏洞分析
在分析漏洞之前,需要設定struts.xml文件,這個文件就是struts2的核心設定文件,大多數的時候增減配置都需要操控這裡;
總共兩處要注意,第一個一定要配置struts.mapper .alwaysSelectFullNamespace = true ,否則不能觸發漏洞,這個配置的目的是設定是否一直在最後一個斜線之前的任何位置選定NameSpace;第二處result標籤返回的類型選擇“ redirectAction 或chain“ , 只有這兩個配置選項的值是可以將action轉送或重定向;關於type具體可以參考下圖
#說完了配置,開始動態分析。漏洞位於
struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class
this.namespace這個成員的值來自於getNamespace()方法,再透過getUriFromActionMapping()傳回URI字串;
透過getUriFromActionMapping取得的值賦給了tmpLocation變量,接著表達式進入setLocation方法
再彈出計算器後獲得lastFinalLocation的值為當前執行後的句柄,這個值作為響應跳轉的action地址,也就是在瀏覽器中彈出計算器後在地址列中出現的URI
到這裡彈出計算器的分析到此為止,接下來看下基於指令執行回顯結果的分析,基本上流程和上述一樣,唯一不同之處lastFinalLocation傳回的值是NULL,這也引發出提交後沒有做302的跳轉,依舊是當前的action,並且回傳的值是200
知道原理後小同事用python實現了exp檢測腳本,此腳本用途僅供學習研究;
防禦措施
1. 將框架版本升級到官方最新版本;
2. 對於Web應用來說,盡量確保程式碼的安全性;
3. 對於IDS規則層面來說,數值計算與彈計算器回傳的狀態碼都是302,且Location跳躍欄位含有特徵句柄字串;如果是指令回顯傳回的200狀態碼,且有指令結果輸出;
以上是Struts2-057 兩個版本RCE漏洞實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

一、前言Struts2漏洞是一個經典的漏洞系列,根源在於Struts2引入了OGNL表達式使得框架具有靈活的動態性。隨著整體框架的修補程式完善,現在想挖掘新的Struts2漏洞會比以前困難很多,從實際了解的情況來看,大部分用戶早就修復了歷史的高風險漏洞。目前在做滲透測試時,Struts2漏洞主要也是碰運氣,或是打到內網之後用來攻擊沒修補的系統會比較有效。網路上的分析文章主要從攻擊利用的角度來分析這些Struts2漏洞。作為新華三攻防團隊,我們的部分工作是維護ips產品的規則庫,今天回顧這個系

Struts2框架的原理:1、攔截器解析請求路徑;2、找出Action的完整類別名稱;3、建立Action物件;4、執行Action方法;5、返回結果;6、視圖解析。它原理基於攔截器的機制,使得業務邏輯控制器與Servlet API完全脫離開,提高了程式碼的可重複使用性和可維護性。透過使用反射機制,Struts2框架可以靈活地建立和管理Action對象,實現請求與回應的處理。

引言ApacheSolr爆出RCE0day漏洞(漏洞編號未給定),這裡簡單的複現了對象,對整個RCE的流程做了一下分析,供各位看官參考。漏洞復現複現版本:8.1.1實作RCE,需要分兩步,先確認,應用程式開啟了某個core(可以在CoreAdmin中查看),實例中應用開啟了mycore,然後先向其config介面發送以下json數據,{"update-queryresponsewriter":{"startup":"lazy","

0x00簡介Struts2是Apache軟體組織推出的一個相當強大的JavaWeb開源框架,本質上相當於一個servlet。 Struts2基於MVC架構,框架結構清晰。通常作為控制器(Controller)來建立模型與視圖的資料交互,用於創建企業級Javaweb應用程序,它利用並延伸了JavaServletAPI,鼓勵開發者採用MVC架構。 Struts2以WebWork優秀的設計思想為核心,吸收了Struts框架的部分優點,提供了一個更整潔的MVC設計模式實現的Web應用程式框架。 0x01漏洞

Vulhub漏洞系列:struts2漏洞S2-0011.漏洞描述:struts2漏洞S2-001是當使用者提交表單資料且驗證失敗時,伺服器使用OGNL表達式解析使用者先前提交的參數值,%{value}並重新填入對應的表單資料。例如,在註冊或登入頁面中。如果提交失敗,則伺服器通常預設會傳回先前提交的資料。由於伺服器用於%{value}對提交的資料執行OGNL表達式解析,因此伺服器可以直接發送有效載荷來執行命令。 2.vulhub漏洞利用:用vulhub復現漏洞可以省去環境的搭建過程,相當方便。 vu

前言2018年8月22日,ApacheStrust2發布最新安全公告,ApacheStruts2存在遠端程式碼執行的高風險漏洞(S2-057/CVE-2018-11776),該漏洞由SemmleSecurityResearchteam的安全研究員ManYueMo發現。此漏洞是由於在Struts2開發框架中使用namespace功能定義XML配置時,namespace值未被設定且在上層動作配置(ActionConfiguration)中未設定或以通配符namespace,可能導致遠端程式碼執行。同理,u

0x00簡介Struts2框架是一個用於開發JavaEE網路應用程式的開放原始碼網頁應用程式架構。它利用並延伸了JavaServletAPI,鼓勵開發者採用MVC架構。 Struts2以WebWork優秀的設計思想為核心,吸收了Struts框架的部分優點,提供了一個更整潔的MVC設計模式實現的Web應用程式框架。 0x01漏洞概述ApacheStruts22.3.x系列啟用了struts2-struts1-plugin插件並且存在struts2-showcase目錄,其漏洞成因是當ActionMe

前言ApacheStruts框架是一個基於JavaServlets,JavaBeans,和JavaServerPages(JSP)的Web應用框架的開源項目,Struts基於Model-View-Controller(MVC)的設計模式,可以用來構件複雜的Web應用。它允許我們分解一個應用程式的商業邏輯、控制邏輯和表現邏輯的程式碼,使它的重用性和維護性更好。 Struts框架是Jakarta工程的一部分,由Apache軟體基金會管理。天融信阿爾法實驗室將為你帶來ApacheStruts2S2-057
