Содержание статьи
Когда ты представляешь себе хакера, в голову приходит картина: он сидит в темной комнате, натянув капюшон, клацает по клавишам и кричит, что он в системе. Никто не думает о том, что он пешком будет ходить к атакуемому компьютеру и самостоятельно что‑то там нажимать, верно?
Чтобы, как в кино, выкрикнуть «Я в системе!», нужно получить к ней удаленный доступ. В ход идет все: фишинг, вредоносы, эксплуатация уязвимостей, подкупы, мольбы самостоятельно ввести команды на компьютере. Этот этап мы здесь рассматривать не будем, а поговорим о том, как, собственно, работает этот самый удаленный доступ.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Шелл
Давай сначала поймем, что это вообще за шелл такой. Любой атакующий заинтересован в том, чтобы получить побольше всего с атакуемого компьютера. Украсть файлик в этом плане далеко не так интересно, как запустить команду. Если есть возможность выполнять команды от имени администратора, то компьютер полностью в наших руках: можем читать любые данные, незаметно запускать программы, делать снимки камерой или даже управлять каким‑то подключенным оборудованием, если такое имеется.
Поэтому удаленное выполнение команд (remote command execution, RCE) обычно считается критической уязвимостью, и получение интерактивного терминала с возможностью выполнять команды в системе, как наиболее опасный случай RCE, — это самый лакомый кусочек для хакера.
Шеллом называют программную оболочку, которая предоставляет интерфейс для взаимодействия пользователя с операционной системой. Через шелл можно выполнять команды, запускать программы, управлять файлами и процессами.
В Windows есть две такие командные оболочки — cmd. и powershell., а в Linux их может быть сколько угодно. Самая распространенная и присутствующая в любом Linux — /, но может быть / (в стиле Unix), / (более современная) и так далее.
С технической точки зрения шелл — это обычный пользовательский процесс, который читает команды из входа (stdin), обрабатывает их и выводит результат на выход (stdout) или сообщение об ошибке — в Unix/Linux для этого предназначен специально выделенный поток stderr.
В Linux есть понятие перенаправления потоков, и оно отлично упрощает работу для атакующего. Если он может перенаправить к себе стандартные потоки, то сможет пользоваться системой, будто он физически сидит за нужным компьютером.
Для Linux файл и сетевой сокет выглядят одинаково: это просто источники ввода и вывода. Поэтому шеллу, по сути, все равно, общается он с клавиатурой или с сетью.
Дальше в примерах я буду использовать /, но все остальные оболочки устроены схожим образом и различаются либо реализацией, либо тонкостями синтаксиса команд.
Но чтобы иметь возможность запускать команды удаленно, требуется еще сетевое соединение, через которое и будет происходить общение. Далее мы его рассмотрим.
Bind shell
Самый простой способ установить удаленное соединение с компьютером — это запустить там программу, которая будет слушать порт и передавать полученные команды процессу с оболочкой.

На схеме видно следующие три шага:
- На хосте жертвы запускается сервер, который ожидает входящее соединение.
- Атакующий инициирует сетевое соединение с хостом жертвы.
- Жертва принимает входящее соединение.
Такой способ называется bind shell. Проще всего будет использовать утилиту Netcat.
Netcat (nc) — это сетевая утилита для чтения и записи данных через TCP- и UDP-соединения. Она позволяет открывать сокеты, принимать входящие подключения, устанавливать исходящие соединения и передавать данные между процессами и сетью. Благодаря своей простоте и гибкости Netcat широко используется для отладки сетевых сервисов, тестирования соединений, передачи файлов, а также в задачах информационной безопасности — в том числе для организации bind shell и reverse shell.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
