
CMS Made Simple CVE-2019-9053 Exploit (Python 3)
A Python 3 port of the time-based blind SQL injection exploit targeting CMS Made Simple <= 2.2.9.
Original exploit by Daniele Scanu @ Certimeter Group.
| Field | Detail |
|---|
| CVE | CVE-2019-9053 |
| Affected Software | CMS Made Simple <= 2.2.9 |
| Vulnerability Type | Unauthenticated Time-Based Blind SQL Injection |
| Attack Vector | Network (no authentication required) |
| Parameter | m1_idlist in the News module |
The News module fails to sanitize the m1_idlist GET parameter, allowing an unauthenticated attacker to extract sensitive data from the database character by character using time delays.
pip install requests termcolor
python3 CVE-2019-9053_py3.py -u http://target/cms
python3 CVE-2019-9053_py3.py -u http://target/cms --crack -w /path/to/wordlist.txt
python3 CVE-2019-9053_py3.py --help
| Flag | Description |
|---|---|
-u, --url | Base URL of the target CMS Made Simple installation |
-w, --wordlist | Path to a wordlist file for password cracking |
-c, --crack | Enable password cracking mode (requires -w) |
python3 CVE-2019-9053_py3.py -u http://10.49.164.146/simple/ --crack -w /usr/share/wordlists/rockyou.txt
Expected output:
[+] Salt for password found: 1234abcd
[+] Username found: admin
[+] Email found: [email protected]
[+] Password found: 0c01f4468bd75d7a84c7eb73846e8d96
[+] Password cracked: password123
cms_siteprefs table for the sitemask value (the password salt)user_id = 1 from cms_usersuser_id = 1 from cms_usersuser_id = 1 from cms_usersMD5(salt + wordlist_entry) for each line and compares against the dumped hashThe injection uses SELECT SLEEP(N) to infer each character — if the response is delayed, the guessed character is correct.
Tip: If the script is slow or unreliable, increase the
TIMEvariable inside the script to account for network latency.
| Change | Detail |
|---|---|
print statements | Converted to print() functions |
optparse | Replaced with argparse (optparse is deprecated in Python 3) |
hashlib.md5() | Input now encoded to bytes via .encode('utf-8') |
| File reading | Replaced .readlines() with a with block and .strip() |
This project is for educational use only. Refer to the original exploit's licensing terms on Exploit-DB.