Struts2-057/CVE-2018-11776兩個版本RCE漏洞分析(含EXP)

来源:https://www.cnblogs.com/Ivan1ee/archive/2018/12/31/10202016.html
-Advertisement-
Play Games

0x01 前言 2018年8月22日,Apache Strust2發佈最新安全公告,Apache Struts2存在遠程代碼執行的高危漏洞(S2-057/CVE-2018-11776),該漏洞由Semmle Security Research team的安全研究員Man YueMo發現。該漏洞是由於 ...


0x01 前言

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時也可能導致遠程代碼執行,經過筆者自建環境成功復現漏洞且可以執行命令回顯,文末有你們想要的 !

 

0x02 漏洞利用

筆者搭的環境分別是Strust2 2.3.20 版本和 Strust2 2.3.34版本,漏洞利用大致分為三種方式:數值計算、彈出計算器、 命令回顯。

 

2.1、數值計算

數值計算相對最簡單,在URL上指定 %{100+200} 就可以發生跳轉,得到計算的結果

 

2.2、彈出計算器

2.3.20 版本的POC如下:

2.3.34 版本參考的POC如下:

2.3、命令回顯

兩個版本都是利用com.opensymphony.xwork2.dispatcher.HttpServletResponse對象去列印命令執行後的回顯數據

2.3.20 版本的POC如下:

攻擊後效果如下圖

0X03 漏洞分析

在分析漏洞之前,需要配置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方法

再通過super.execute方法調用了ServletActionResult , 而在execute方法體內跟進了conditionalParse方法,在這個方法內調用了ONGL執行的關鍵方法translateVariables。

獲得的param值傳入到translateVariables()方法內,最終在OnglTextPaser里導致了OGNL表達式執行。

再彈出計算器後獲得lastFinalLocation的值為當前執行後的句柄,這個值作為響應跳轉的action地址 ,也就是在瀏覽器中彈出計算器後在地址欄中出現的URI

到這裡彈出計算器的分析到此為止,接下來看下基於命令執行回顯結果的分析,基本上流程和上述一樣,唯一不同之處lastFinalLocation返回的值是NULL,這也就引發出提交後沒有做302的跳轉,依舊是當前的action,並且返回的值是200

知道了原理後小同事用python實現了自動化利用工具,此工具用途僅供學習研究;

 

0x04 防禦措施

將框架版本升級到官方最新版本;對於Web應用來說,儘量保證代碼的安全性;對於IDS規則層面來說,數值計算和彈計算器返回的狀態碼都是302,並且Location跳轉欄位含有特征句柄字元串;如果是命令回顯返回的200狀態碼,且有命令結果輸出;

 

0x05 小結

文章中提及的python EXP下載地址: https://github.com/Ivan1ee

 

0x06 參考鏈接

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

https://lgtm.com/blog/apache_struts_CVE-2018-11776

https://blog.csdn.net/madison__/article/details/55671426

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 輸出大寫字母、小寫字母、大小寫字母、數字、大小寫字母和數字 1.1輸出小寫:找到小寫a(97)到z(122)的的ASCII碼,然後轉義為字母lower = ""for i in range(97,123): lower += chr(i)print('%s' % lower) 1.2輸出大寫:找 ...
  • jsp隱式對象都包括什麼?包括request、response、out、session、application、config、pageContext。 ...
  • org.hibernate.exception.SQLGrammarException:could not insert ...
  • VSCode配置JAVA開發環境 1:給機器安裝JDK、MAVEN 下載JDK 下載路徑:https://www.oracle.com/technetwork/java/javase/downloads/jdk11 downloads 5066655.html 配置JAVA的環境變數 我的JDK在硬 ...
  • 一.random模塊 隨機 random() 隨機小數 uninform(a,b) 隨機小數 randint(a,b) 隨機整數 choice() 隨機選擇一個 sample() 隨機選擇多個 shuffle() 打亂 二.Counter 計數 三.字典 1.預設值字典 2.有序字典 四.棧和隊列 ...
  • 難點:如何測試。我的解決方式是:a,三種解法,看結果是否一致。b,小數據(100個點),人工排查。第一種方法,暴力法適合小數據。第二種方法:我的改進型。第三種方法:經典方法(分治法)。實驗證明1000萬數據時,我的演算法有優勢。暴力演算法,O(n2)。我的改進型要點:先對所有數據按Y排序。只比較y距離小 ...
  • 此文章非常詳細介紹了Springboot2.0與Mybatis的整合,並且採用Rest風格作為輸入和輸出,項目還使用了兩個很優秀的工具,一個是:Mybatis-Generator代碼生成器,可以方便生成PO、Mapper介面、MapperXml映射文件,而且直接配置生成到項目指定目錄下,不用做任何修... ...
  • 題目內容: 對數字求特征值是常用的編碼演算法,奇偶特征是一種簡單的特征值。對於一個整數,從個位開始對每一位數字編號,個位是1號,十位是2號,以此類推。這個整數在第n位上的數字記作x,如果x和n的奇偶性相同,則記下一個1,否則記下一個0。按照整數的順序把對應位的表示奇偶性的0和1都記錄下來,就形成了一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...