メモリダンプ脆弱性(CVE-2018-17240)を利用してNetwave IPカメラからログイン認証情報を取得するためのツールです。このプロジェクトはexpcameraに触発され、性能と効率の改善を提供します。このツールはexpcameraのようにシェルコマンドを通じてLinux CLIツールを使用しないため、すべてのプラットフォームで動作します。
Linuxシステムでは、/proc/kcoreはシステムメモリをELFコアイメージとして公開する仮想ファイルです。これらのカメラはMMUのないARM7コア上でuClinuxを実行しているため、単一のフラットなアドレス空間が存在します。つまり、ダンプにはカーネルのメモリとともにカメラアプリケーションのメモリが含まれ、グローバルに保持されている設定ブロブも含まれます。
これに到達できるのは、Webサーバーに認証不要の任意ファイル読み取りがあるためです。リクエストハンドラは先頭のスラッシュをちょうど1つ削除し、トラバーサルフィルタリングなしでfopen()を呼び出し、結果をrootとして提供します。したがって//proc/kcoreは/proc/kcoreに解決され、これがリクエストパスに先頭の二重スラッシュが含まれる理由です。
設定ブロブは固定レイアウトであるため、認証情報を直接読み出すことができます:
| オフセット | フィールド |
|---|---|
0x00 | uint32 マジック、常に 0x440C9ABD |
0x04 | uint32 チェックサム |
0x08 | uint32 長さ |
0x0C | char device_id[13] 12文字の大文字16進数文字とNUL |
0x36 | struct { char name[13]; char pwd[13]; uint8 pri; } users[8] |
このツールは/proc/kcoreをストリーミングし、各チャンクでマジックを検索します。見つかると、ユーザーテーブルから最高権限のアカウントを返します。
このツールは、脆弱性をチェックするホストを指定する2つの異なる方法をサポートしています。ホストはip:port形式である必要があります。
| 引数 | 説明 |
|---|---|
--host | チェックするホスト、複数回指定可能 |
--file | チェックするホストのリストを含むファイル |
このツールは、脆弱性をチェックするためにCensys、Shodan、およびZoomEyeからホストを取得することをサポートしています。
| IoT検索エンジン | 引数 | 必要な環境変数 |
|---|---|---|
| Censys | --censys | CENSYS_PERSONAL_ACCESS_TOKEN |
| Shodan | --shodan | SHODAN_API_KEY |
| ZoomEye | --zoomeye | ZOOMEYE_API_KEY |
CensysはPlatform APIを使用します。platform.censys.ioでパーソナルアクセストークンを作成してください。CENSYS_ORGANIZATION_IDも設定すると、無料ウォレットではなく組織に対して検索を請求できます。Platformの検索エンドポイントは有料プランが必要であることに注意してください。無料アカウントはルックアップエンドポイントに限定されています。
$ pip install -r requirements.txt
Usage: main.py [-h] (--host HOST | -f FILE | --censys | --shodan | --zoomeye) [-n NUMBER] [-c CONCURRENT] [-t TIMEOUT] [-o OUTPUT]
A tool for retrieving login credentials from Netwave IP cameras using a memory dump vulnerability (CVE-2018-17240)
Options:
-h, --help show this help message and exit
--host HOST A host to check, can be specified multiple times
-f, --file FILE A file containing the hosts to check
--censys Retrieve hosts from the Censys Platform API using the personal access token specified with the CENSYS_PERSONAL_ACCESS_TOKEN environment variable
--shodan Retrieve hosts from the Shodan API using the API key specified with the SHODAN_API_KEY environment variable
--zoomeye Retrieve hosts from the ZoomEye API using the API key specified with the ZOOMEYE_API_KEY environment variable
-n, --number NUMBER The number of hosts to retrieve from the IoT search engine, by default 100
-c, --concurrent CONCURRENT
The number of hosts to check concurrently, by default 25
-t, --timeout TIMEOUT
The timeout in seconds for retrieving the credentials from the memory dump of each host, by default 300
-o, --output OUTPUT The file to write the credentials to, by default credentials.txt
このツールは教育目的のみです。このプロジェクトの貢献者は、このツールの使用から生じる可能性のあるいかなる損害や法的問題についても責任を負いません。自己責任で使用してください。