ホームページ > 運用・保守 > 安全性 > Struts2-057 2 つのバージョンの RCE 脆弱性分析例

Struts2-057 2 つのバージョンの RCE 脆弱性分析例

WBOY
リリース: 2023-05-15 18:46:06
転載
1606 人が閲覧しました

はじめに

2018 年 8 月 22 日、Apache Struts2 には、高リスクのリモート コード実行の脆弱性 (S2-057/CVE-2018-11776) が存在する最新のセキュリティ情報がリリースされました。この脆弱性は、Semmle Security Research チームのセキュリティ研究者 Man YueMo によって発見されました。

この脆弱性は、Struts2 開発フレームワークで名前空間関数を使用して XML 構成を定義するときに、名前空間の値が設定されておらず、上位層のアクション構成にも設定されていないことが原因です (アクション設定)、またはワイルドカード名前空間を使用するため、リモートでコードが実行される可能性があります。同様に、URL タグに value と action の値が設定されておらず、上位のアクションが設定されていない場合や、ワイルドカード名前空間が使用されている場合も、リモートでコードが実行される可能性があります。構築された環境では、脆弱性は正常に再現され、コマンド echo を実行できます。この記事の最後には、必要なものが揃っています。!

脆弱性の悪用

作成者が使用した環境それぞれStrust2 2.3.20版とStrust2 2.3.34版であり、この脆弱性を悪用する方法としては、数値計算、ポップアップ計算機、コマンドエコーの大きく3つが考えられます。

2.1 数値計算

数値計算は比較的簡単です。URLに%{100 200}を指定するとジャンプして計算結果が得られます


Struts2-057 两个版本RCE漏洞实例分析

2.2 ポップアップ計算機

バージョン 2.3.20 の POC は次のとおりです。

Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析

##2.3.3 4 バージョン リファレンスPOC は次のとおりです:



Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析

2.3 コマンド エコー

どちらのバージョンも com.opensymphony.xwork2.dispatcher を使用します。コマンド実行後にエコー データを出力する HttpServletResponse オブジェクト

バージョン 2.3.20 の POC は次のとおりです:

バージョン 2.3.34 の POC は次のとおりです: Struts2-057 两个版本RCE漏洞实例分析

攻撃後の影響は次のとおりですStruts2-057 两个版本RCE漏洞实例分析

Struts2-057 两个版本RCE漏洞实例分析

脆弱性分析

脆弱性を分析する前に、 struts.xml ファイルを構成する必要があります。このファイルは struts2 のコア構成ファイルです。ほとんどの場合、構成の増減を制御する必要があります。

Struts2-057 两个版本RCE漏洞实例分析 #注意すべき点が 2 つあります。1 つ目は struts.mapper .alwaysSelectFullNamespace = true に設定する必要があります。そうでない場合、脆弱性はトリガーされません。この設定の目的は、最後の前の任意の位置で NameSpace が常に選択されるかどうかを設定することです。スラッシュ; 2 番目の結果タグによって返されるタイプは、「redirectAction またはchain」を選択します。この 2 つだけです。各構成オプションの値は、アクションを転送またはリダイレクトできます。タイプの詳細については、以下の図を参照してください。


Struts2-057 两个版本RCE漏洞实例分析設定が完了したら、動的分析を開始します。この脆弱性は

struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class

this.namespace メンバーの値は getNamespace( ) メソッドを呼び出し、getUriFromActionMapping() を通じて URI 文字列を返します。

Struts2-057 两个版本RCE漏洞实例分析#getUriFromActionMapping を通じて取得した値が tmpLocation 変数に割り当てられ、式が setLocation メソッドに入ります

Struts2-057 两个版本RCE漏洞实例分析

ServletActionResult は super.execute メソッドを介して呼び出され、execute メソッド本体で ConditionalParse メソッドが続きます。このメソッドでは、ONGL 実行の主要なメソッド、translateVariables、と呼ばれます。

Struts2-057 两个版本RCE漏洞实例分析

取得した param 値は、translateVariables() メソッドに渡され、最終的に OnglTextPaser での OGNL 式の実行につながります。

Struts2-057 两个版本RCE漏洞实例分析

Struts2-057 两个版本RCE漏洞实例分析電卓をポップアップした後、取得された lastFinalLocation の値は、現在の実行後のハンドルです。この値は、応答ジャンプのアクション アドレスとして使用されます。これは、ポップ後にアドレス バーに表示される URI です。ブラウザで計算機を起動します

Struts2-057 两个版本RCE漏洞实例分析ポップアップ計算機の解析はここで終了です。次に、コマンド実行のエコー結果に基づいた解析を見てみましょう。基本的には、上記と同じです。唯一の違いは、lastFinalLocation によって返される値です。これは NULL です。これは、送信後に 302 ジャンプがないことを意味します。これはまだ現在のアクションであり、戻り値は 200

## です。

Struts2-057 两个版本RCE漏洞实例分析# 原理を知った後、同僚 経験値検出スクリプトは Python で実装されています。このスクリプトは学習と研究専用です。Struts2-057 两个版本RCE漏洞实例分析

Struts2-057 两个版本RCE漏洞实例分析

防御策

1. フレームワークのバージョンを変更する最新の正式バージョンにアップグレードします;

2. Web アプリケーションの場合、コードのセキュリティを確保するように努めます;

3. IDS ルール レベルの場合、数値計算と箇条書き電卓はステータス コードをすべて 302 に返し、ロケーション ジャンプ フィールドには特性ハンドル文字列が含まれます。コマンド echo によって返されるステータス コードが 200 の場合、コマンド結果の出力;

以上がStruts2-057 2 つのバージョンの RCE 脆弱性分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート