亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Struts2-057 兩個版本RCE漏洞實例分析

發布時間:2022-01-14 22:32:31 來源:億速云 閱讀:146 作者:柒染 欄目:安全技術

這篇文章跟大家分析一下“Struts2-057 兩個版本RCE漏洞實例分析”。內容詳細易懂,對“Struts2-057 兩個版本RCE漏洞實例分析”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠對大家有所幫助。下面跟著小編一起深入學習“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} 就可以發生跳轉,得到計算的結果


Struts2-057 兩個版本RCE漏洞實例分析

2.2 彈出計算器

2.3.20版本的POC如下:

Struts2-057 兩個版本RCE漏洞實例分析Struts2-057 兩個版本RCE漏洞實例分析

2.3.3 4版本參考的POC如下:


Struts2-057 兩個版本RCE漏洞實例分析Struts2-057 兩個版本RCE漏洞實例分析

2.3 命令回顯

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

2.3.20版本的POC如下:

Struts2-057 兩個版本RCE漏洞實例分析2.3.34版本的POC如下:

Struts2-057 兩個版本RCE漏洞實例分析攻擊后效果如下圖

Struts2-057 兩個版本RCE漏洞實例分析

漏洞分析

在分析漏洞之前,需要配置struts.xml文件,這個文件就是struts2的核心配置文件,大多數的時候增減配置都需要操控這里;

Struts2-057 兩個版本RCE漏洞實例分析

總共兩處需要注意,第一處一定要配置struts.mapper.alwaysSelectFullNamespace  = true ,否則不能觸發漏洞,這個配置的目的是設定是否一直在最后一個斜線之前的任何位置選定NameSpace;第二處result標簽返回的類型選擇 “ redirectAction 或 chain“ , 只有這兩個配置選項的值是可以將action轉發或者重定向;關于type具體可以參考下圖

Struts2-057 兩個版本RCE漏洞實例分析

說完了配置,開始動態分析。漏洞位于

struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class

Struts2-057 兩個版本RCE漏洞實例分析this.namespace這個成員的值來自于getNamespace()方法,再通過getUriFromActionMapping()返回URI字符串;

Struts2-057 兩個版本RCE漏洞實例分析通過getUriFromActionMapping獲取的值賦給了tmpLocation變量,接著表達式進入setLocation方法

Struts2-057 兩個版本RCE漏洞實例分析

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

Struts2-057 兩個版本RCE漏洞實例分析獲得的param值傳入到translateVariables()方法內,最終在OnglTextPaser里導致了OGNL表達式執行。

Struts2-057 兩個版本RCE漏洞實例分析

Struts2-057 兩個版本RCE漏洞實例分析再彈出計算器后獲得lastFinalLocation的值為當前執行后的句柄,這個值作為響應跳轉的action地址,也就是在瀏覽器中彈出計算器后在地址欄中出現的URI

Struts2-057 兩個版本RCE漏洞實例分析到這里彈出計算器的分析到此為止,接下來看下基于命令執行回顯結果的分析,基本上流程和上述一樣,唯一不同之處lastFinalLocation返回的值是NULL,這也就引發出提交后沒有做302的跳轉,依舊是當前的action,并且返回的值是200

Struts2-057 兩個版本RCE漏洞實例分析Struts2-057 兩個版本RCE漏洞實例分析知道了原理后小同事用python實現了exp檢測腳本,此腳本用途僅供學習研究; 

Struts2-057 兩個版本RCE漏洞實例分析

防御措施

1.   將框架版本升級到官方最新版本;

2.   對于Web應用來說,盡量保證代碼的安全性;

3.   對于IDS規則層面來說,數值計算和彈計算器返回的狀態碼都是302,并且Location跳轉字段含有特征句柄字符串;如果是命令回顯返回的200狀態碼,且有命令結果輸出;

關于Struts2-057 兩個版本RCE漏洞實例分析就分享到這里啦,希望上述內容能夠讓大家有所提升。如果想要學習更多知識,請大家多多留意小編的更新。謝謝大家關注一下億速云網站!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

章丘市| 信阳市| 灵寿县| 卓资县| 道孚县| 莲花县| 新晃| 崇阳县| 阿巴嘎旗| 英超| 兰考县| 清河县| 铁岭县| 金阳县| 翼城县| 郧西县| 岳池县| 北京市| 文水县| 宁安市| 孝感市| 遂宁市| 宽甸| 华阴市| 榆中县| 巩留县| 云龙县| 普定县| 安西县| 南部县| 四平市| 天津市| 夹江县| 新巴尔虎左旗| 黄浦区| 报价| 宁陵县| 二连浩特市| 皮山县| 郯城县| 资源县|