Когда добрался до RCE и хочется сделать его более-менее комфортным для работы, в ход идут "шеллы". Два классических способа: reverse shell и bind shell. Разница простая, но важная.
Reverse shell — жертва сама инициирует подключение.
Мы на своей машине поднимаем listener, а эксплойт на целевой машине запускает исходящее соединение, в котором нам вручают удалённую консоль.
Удобно, если жертва сидит за NAT'ом или фаерволом.
Часто — единственный рабочий вариант.
Bind shell — жертва открывает порт и ждёт, когда мы к ней подключимся.
Мы как бы стучимся в открытую дверь, которую сами же для себя и открыли.
Работает, если у цели белый IP и доступ извне ничем не закрыт.
На практике — редкость, особенно в проде.
🛠️ Инструменты:
nc, ncat, socat
Metasploit
One-liners на bash, Python, Perl, PowerShell
Фича:
Если хочется, чтобы в полученном шелле нормально работали стрелочки и хоткеи, нужно подсадить его на стероиды:
<ловим реверс-шелл>
python3 -c "import pty; pty.spawn('/bin/bash')"
ctrl+z
stty raw -echo
fg
export TERM=xterm
После таких манипуляций реверс-шелл практически ничем не будет отличаться от обыкновенного терминала. Enjoy ;)
