Повышение привилегий. Часть 1. Shell.

Повышение привилегий. Часть 1. Shell.

BagOs



Глава 1. SHELL.


  1. ЧТО ТАКОЕ SHELL.
  2. REVERSE SHELL.
  3. BIND SHELL.
  4. WEB SHELL.
  5. СТАБИЛИЗАЦИЯ ОБОЛОЧКИ NETCAT.
  6. ЗАШИФРОВАННЫЕ ОБОЛОЧКИ SOCAT.

____________________________________________________________________________


§ 1.1. ЧТО ТАКОЕ SHELL.

1.1.1) SHELL (ОБОЛОЧКА) — это программа, которая получает ввод от пользователя с помощью клавиатуры и передаёт эти команды операционной системе для выполнения определенных функций. Оболочками являются терминал Linux, командная строка Windows, Windows PowerShell. Оболочку можно получить через уязвимости сети, сетевых служб, веб-приложений или удалённо войдя на целевую систему с помощью украденных учётных данных.

При тестировании на проникновение, нам нужно сначала закрепиться в целевой системе. Как только мы получим удалённое выполнение кода на целевой системе, нам понадобиться надёжное подключение с этой системой, чтобы не приходилось использовать одну и ту же уязвимость для выполнения каждой команды. Соединение должно иметь прямой доступ к оболочке системы (Bash или PowerShell). Одним из способов подключения к удалённой системе является использование оболочки.

Большинство систем Linux используют в качестве оболочки для взаимодействия с ОС программу Bash это расширенная версия sh (исходная оболочка Unix-систем). Помимо Bash существуют и другие оболочки, такие как Zsh, Tcsh, Ksh, Fish shell и т.д.



1.1.2) ТИПЫ ОБОЛОЧЕК:

  1. Reverse Shell (обратная оболочка) — целевая система сама подключается к нашему компьютеру и даёт нам контроль через обратное соединение.
  2. Bind Shell (оболочка привязки) — мы сами подключаемся к целевой системе, и когда мы это сделаем, оболочка целевой системы даст нам контроль.
  3. Web Shell (веб-оболочка) — целевая система взаимодействует через веб-сервер и принимает наши команды через параметры HTTP, выполняет их и выводит результат.




§ 1.2. REVERSE SHELL.

1.2.1) REVERSE SHELL (ОБРАТНАЯ ОБОЛОЧКА) — это способ взаимодействия с удалённой системой, при котором мы запускаем на удалённой системе подключение к нашему компьютеру. Как только мы обнаружим уязвимость на удалённой системе, позволяющую выполнять удаленный код, мы запускаем прослушиватель Netcat на нашем компьютере, а затем подключаемся из удаленной системы к прослушивателю Netcat.

Почему Reverse Shell называется «обратным подключением»? Потому, что во время обычного удалённого соединения, пентестер подключается к целевой системе из своего компьютера, а при «обратном подключении» пентестер запускает подключение из целевой системы к своему компьютеру.



1.2.2) REVERSE SHELL И БРАНДМАУЭР — обратные оболочки хорошо обходят защиту брандмауэра, которая мешает подключаться к произвольным портам на целевой системе. Брандмауэр ограничивает входящий трафик, отправляемый пентестером на сервер, но не ограничивает исходящий трафик, который сервер отправляет пентестеру.

Атакуемые серверы обычно разрешают соединения только на определенных портах, где пентестеру не может установить прослушиватель оболочки.

Таким образом, пентестер может создать обратное соединение, настроив прослушиватель, а сервер будет действовать как пользователь, отправляя трафик пентестеру. Все, что нужно пентестеру инструмент для создания прослушивателя и привязки к нему доступа к оболочке.



1.2.3) REVERSE SHELL ЧЕРЕЗ LAN И WAN — установить обратное подключение по локальной сети (LAN) довольно просто. Нужно знать свой частный IP-адрес и частный IP-адрес жертвы. Допустим, наш компьютер и целевая система находимся в сети 192.168.1.0: наш IP-адрес 192.168.1.10, а IP-адрес целевой системы 192.168.1.20. Мы сможем получить соединение, внедрив полезную нагрузку с нашим IP-адресом и портом, к которому нужно подключить целевую систему.


В общедоступных сетях (WAN) немного сложнее. Нужно заменить наш частный IP-адрес на общедоступный IP-адрес, который можно найти в Google, вбив в поисковик «What is my IP address». Далее нужно найти уязвимость для внедрения полезной нагрузки Reverse Shell на целевой сервер. В полезной нагрузке нужно указать свой общедоступный IP-адрес. Затем целевой сервер попытается подключиться к нашему общедоступному IP-адресу. Запрос от целевого сервера придёт на наш роутер раньше, чем на наш прослушиватель.

Наш маршрутизатор должен знать, на какой из подключённых к ней устройств, следует перенаправить этот запрос. Это можно сделать, включив переадресацию портов на маршрутизаторе.

Следует учитывать, что если наш провайдер предоставляет нам роутер с динамическим IP-адресом, то наш общедоступный IP-адрес будет меняться каждый раз, когда мы перезагружаем подключение к Интернету (перезагрузка роутера, компьютера и т.д.).
В этом случае наш предыдущий IP-адрес, записанный в полезной нагрузке, бесполезен.



1.2.4) ПОДКЛЮЧЕНИЕ REVERSE SHELL ЧЕРЕЗ NETCAT (ЦЕЛЕВАЯ СИСТЕМА LINUX).


ЭТАП 1. Включаем на нашем компьютере прослушиватель Netcat с помощью команды:



ЭТАП 2. Выполняем подключение из удалённой системы к порту нашего компьютера, на котором работает прослушиватель Netcat:




1.2.5) ПОДКЛЮЧЕНИЕ REVERSE SHELL ЧЕРЕЗ SOCAT (ЦЕЛЕВАЯ СИСТЕМА LINUX).


ЭТАП 1. Сначала нужно скачать файл socat. А затем загрузить его на целевую систему. Для этого, на нашем компьютере в каталоге, где находится файл socat, нужно включить веб-сервер Python3 с помощью команды:



ЭТАП 2. На целевой системе нужно загрузить файл socat:

  • - O /tmp/socat — указывает место, куда загружается файл socat.



ЭТАП 3. На нашем компьютере нужно включить прослушиватель с помощью команды:



ЭТАП 4. На целевой системе нужно получить Reverse Shell, запустить команду:




1.2.6) ПОДКЛЮЧЕНИЕ REVERSE SHELL ЧЕРЕЗ SOCAT (ЦЕЛЕВАЯ СИСТЕМА WINDOWS).


ЭТАП 1. В Windows то же самое можно сделать с Powershell, используя либо Invoke-WebRequest, либо системный класс веб-запроса, в зависимости от установленной версии Powershell. Сначала нужно скачать файл socat и загрузить его на целевую систему:



ЭТАП 2. Затем для получения Reverse Shell, нужно открыть на целевой системе PowerShell от имени администратора и ввести команду:





§ 1.3. BIND SHELL.

1.3.1) BIND SHELL (ОБОЛОЧКА ПРИВЯЗКИ) — это способ взаимодействия с удалённой системой, при котором мы запускаем на удалённой системе прослушиватель, к которой затем мы можем подключиться с нашего компьютера.

Bind Shell в отличие от Reverse Shell, не требует каких-либо настроек в нашей сети, однако такое соединение может быть блокировано брандмауэром.




1.3.2) ПОДКЛЮЧЕНИЕ BIND SHELL ЧЕРЕЗ NETCAT (ЦЕЛЕВАЯ СИСТЕМА LINUX).

ЭТАП 1. На целевой системе нужно запустить прослушиватель на одном из его портов с помощью команды:



ЭТАП 2. На нашем компьютере нужно подключиться к прослушивателю целевой системы с помощью команды:

Мы подключились к целевой системе и установили сеанс Netcat TCP. Но это ещё не полноценная оболочка Bind Shell, поскольку мы не можем взаимодействовать с ОС и файловой системой удалённого компьютера.



1.3.3) ПОДКЛЮЧЕНИЕ BIND SHELL ЧЕРЕЗ ПРОТОКОЛ RDP (ЦЕЛЕВАЯ СИСТЕМА WINDOWS).


СПОСОБ 1. Подключиться к удалённой системе через FreeRDP, прописав в терминале команду:



После запуска команды, мы подключимся к удалённой системе с Windows:



СПОСОБ 2. Подключиться к удалённой системе через инструмент Remmina. Если данного инструмента нет на Linux, то правильную установку смотреть здесь.

Чтобы запустить Remmina, нужно в терминале прописать команду «remmina» или открыть её в панели инструментов. После запуска откроется такая панель, где нужно нажать на кнопку «Добавить новый профиль соединения»:


Откроется окно, где нужно ввести IP-адрес, имя пользователя и пароль целевой системы. А затем нажать на «Подключить»:


После этого мы подключимся к удалённой системе с Windows:




1.3.4) ПОДКЛЮЧЕНИЕ BIND SHELL ЧЕРЕЗ SOCAT (ЦЕЛЕВАЯ СИСТЕМА LINUX).

ЭТАП 1. На целевой системе с Linux нужно включить прослушиватель на одном из целевых портов, запустив команду:



ЭТАП 2. На нашем компьютере нужно подключиться к порту с только что открытым прослушивателем, запустив команду:




1.3.5) ПОДКЛЮЧЕНИЕ BIND SHELL ЧЕРЕЗ SOCAT (ЦЕЛЕВАЯ СИСТЕМА WINDOWS).


ЭТАП 1. На целевой системе с Windows нужно включить прослушиватель на одном из целевых портов, запустив команду:


Параметр «pipes» используется для взаимодействия между способами обработки ввода и вывода в Unix и Windows в среде CLI.



ЭТАП 2. На нашем компьютере нужно подключиться к порту с только что открытым прослушивателем, запустив команду:





§ 1.4. WEB SHELL.

1.4.1) WEB SHELL (ВЕБ-ОБОЛОЧКА) — это веб-скрипт, написанный на PHP или ASPX, который запускается внутри веб-сервера и принимает через HTTP-запросы команды пользователя, выполняет эти команды и выводит результат обратно на веб-страницу.

Команды пользователя вводятся на веб-странице: либо в поле ввода, либо в параметрах URL-адреса. Затем эти команды выполняются веб-скриптом, а результаты возвращаются на веб-страницу.

В Kali Linux веб-оболочки хранятся в каталоге /usr/share/webshells.



Большим преимуществом веб-оболочки является то, что она обходит любые ограничения брандмауэра, поскольку она не открывает новое соединение на порту, а работает на веб-порту на 80 или 443 или любой другой порт, который использует веб-приложение. Еще одно большое преимущество заключается в том, что если скомпрометированный хост будет перезагружен, веб-оболочка останется на месте, и мы сможем получить к ней доступ и выполнить команду без повторного использования удаленного хоста.

С другой стороны, веб-оболочка не такая интерактивная, как оболочки reverse и bind, поскольку нам приходится постоянно запрашивать разные URL-адреса для выполнения наших команд. Тем не менее, можно закодировать скрипт Python (как?), чтобы автоматизировать этот процесс и дать нам полуинтерактивную веб-оболочку прямо в нашем терминале.




§ 1.5. СТАБИЛИЗАЦИЯ ОБОЛОЧКИ NETCAT.

1.5.1) СТАБИЛИЗАЦИЯ ОБОЛОЧКИ NETCAT — поймав оболочку Netcat, её нужно стабилизировать, поскольку оболочки Netcat очень нестабильны по умолчанию. Они не интерактивны и часто содержат странные ошибки форматирования. Это связано с тем, что оболочки Netcat на самом деле являются процессами, запущенными внутри терминала, а не полноценными терминалами сами по себе.




1.5.2) СТАБИЛИЗАЦИЯ С ПОМОЩЬЮ PYTHON — данный метод, применим только к Linux, поскольку на них почти всегда по умолчанию установлен Python. Стабилизировать оболочку будем на примере с REVERSE SHELL.



ЭТАП 1. Сначала нужно получить улучшенную оболочку bash с помощью команды:

Эта команда использует Python для импорта модуля PTY, а затем использует функцию pty.spawn для выполнения двоичного файла оболочки bourne (/bin/sh).

Для некоторых целевых систем может потребоваться старая версия Python. Нужно просто заменить команду python3 на python2/python.



ЭТАП 2. Далее нужно получить доступ к командам term с помощью команды:



ЭТАП 3. Нужно создать фон оболочки, нажав на клавиши [Ctrl + Z]. Мы возвратимся обратно в наш терминал, где нужно запустить команду:

Эти команды отключают наше собственное эхо терминала (что даёт нам доступ к автозаполнению вкладок, клавишам со стрелками и Ctrl + C для уничтожения процессов). Затем выводят оболочку на передний план, тем самым завершая процесс.



Предыдущая команда заново запустит прослушиватель на нашем компьютере с подключённой целевой системой. Нам нужно будет заново получить улучшенную оболочку bash с помощью команды из этапа 1:

И всё, улучшенная оболочка готова!

Если оболочка умирает, то любой ввод в терминале не будет виден (в результате отключения эха терминала). Чтобы исправить это, нужно ввести команду reset и нажать клавишу Enter.




1.5.3) СТАБИЛИЗАЦИЯ С ПОМОЩЬЮ RLWRAP — данный метод использует программу rlwrap, которая даёт нам доступ к истории, автозаполнению вкладок и клавишам со стрелками сразу после получения оболочки. Rlwrap даёт более полнофункциональную оболочку. Этот способ особенно полезен при работе с оболочками с Windows, которые трудно стабилизировать другими способами.

Если программы rlwrap нет на Linux, его можно установить с помощью команды sudo apt install rlwrap.


ЭТАП 1. Чтобы использовать rlwrap вместе с Netcat, нужно прописать команду:



ЭТАП 2. Далее нужно стабилизировать оболочку с помощью команд из § 1.5.2 (3 этап):

  • Ctrl + Z
  • stty raw -echo; fg
  • python3 -c 'import pty;pty.spawn("/bin/bash")'




1.5.4) СТАБИЛИЗАЦИЯ С ПОМОЩЬЮ SOCAT — это самый лучший способ стабилизации оболочек, который использует первоначальную оболочку Netcat в качестве перехода к более функциональной оболочке Socat. Socat хорошо работает в оболочках с Linux, в оболочках с Windows он нестабилен.


ЭТАП 1. Сначала нужно скачать файл socat. А затем загрузить его на целевую систему. Для этого из каталога нашего компьютера, где находится файл socat, нужно включить веб-сервер Python3 с помощью команды:



ЭТАП 2. На целевой системе, от которой мы уже получили оболочку через Netcat, нужно загрузить файл socat с нашего компьютера:



ЭТАП 3. А далее получить оболочку с помощью Socat, как было описано выше (пункт 1.2.6).



В Windows то же самое можно сделать с Powershell, используя Invoke-WebRequest или системный класс веб-запроса, в зависимости от установленной версии Powershell:


А затем получить оболочку с помощью Socat (пункт 1.2.6).






§ 1.6. ЗАШИФРОВАННЫЕ ОБОЛОЧКИ SOCAT.

1.6.1) ЗАШИФРОВАННЫЕ ОБОЛОЧКИ SOCAT — данные оболочки нельзя прослушать с третьей стороны (если, конечно, нет ключа дешифрования), в результате чего часто удаётся обойти IDS.


При работе с зашифрованными оболочками, параметр TCP заменяется на OPENSSL. А в остальном, команды те же самые, что и были рассмотрены выше (пункт 1.2.6, 1.2.7, 1.3.4, 1.3.5)



1 ЭТАП. Чтобы подключиться через зашифрованную оболочку socat, нужно сначала сгенерировать для нас сертификат:

Когда мы запустим эту команду, нас попросят заполнить информацию о сертификате. Эти поля можно заполнить произвольно или оставить пустым, нажав на [ENTER].


Данная команда создаст 2 файла: 2048-битный ключ RSA и файл сертификата, самоподписанный и действительный чуть менее года:



2 ЭТАП. Затем нужно объединить эти 2 созданных файла в один файл в pem-формате:





3 ЭТАП. Нужно загрузить на целевую систему созданный сертификат. Для этого из каталога компьютера, где находится сертификат, нужно включить веб-сервер Python3:



4 ЭТАП. А затем на целевой системе нужно загрузить сертификат (shell.pem):




1.6.2) ПОДКЛЮЧЕНИЕ ЗАШИФРОВАННОЙ REVERSE SHELL:

ЭТАП 1. Создав сертификат, нужно запустить на нашем компьютере прослушиватель с помощью команды:

Эта команда установит прослушиватель OPENSSL с использованием созданного сертификата. Параметр verify=0 указывает соединению не проверять, что наш сертификат был должным образом подписан признанным органом.




ЭТАП 2. На целевой системе нужно подключиться к прослушивателю на нашем компьютере с помощью команды:


Далее нужно стабилизировать оболочку с помощью Python (пункт 1.5.2):




1.6.3) ПОДКЛЮЧЕНИЕ ЗАШИФРОВАННОЙ BIND SHELL:

ЭТАП 1. Создав сертификат, нужно на целевой системе перейти в директорию, куда был загружен сертификат и запустить прослушиватель с помощью команды:


Если на целевой системе установлен Windows, то запустить прослушиватель нужно с помощью команды:



ЭТАП 2. На нашем компьютере нужно подключиться к порту с только что открытым прослушивателем, запустив команду:


Далее нужно стабилизировать оболочку с помощью Python (§ 1.5.2):




1.6.4) ПОДКЛЮЧЕНИЕ СТАБИЛЬНОЙ REVERSE SHELL TTY — это одно из наиболее мощных функций Socat, которая работает только в том случае, если на целевой системе установлен Linux.


ЭТАП 1. Сначала нужно скачать файл socat и загрузить его на целевую систему (пункт 1.2.6). Затем на нашем компьютере нужно включить прослушиватель:

В данном случае мы соединяем две точки: порт прослушивания и файл. В качестве файла мы передаем текущий TTY и устанавливаем значение echo=нулю. Эта команда стабилизирует оболочку с Linux.



ЭТАП 2. Теперь нужно подключиться из целевой системы к прослушивателю на нашем компьютере:

  • EXEC:"bash -li" — создает интерактивный сеанс bash.
  • pty — создаёт псевдотерминал на целевой системе, поскольку это часть процесса для стабилизации оболочки.
  • stderr — гарантирует, что любые сообщения об ошибках будут отображаться в оболочке (поскольку это частая проблема в неинтерактивных оболочках).
  • sigint — передает любые команды Ctrl + C в подпроцесс, позволяя нам уничтожать команды внутри оболочки.
  • setsid — создает процесс в новой сессии.
  • sane — стабилизирует терминал.


Если оболочка socat начнёт работает некорректно, то нужно увеличить уровень детализации, добавив в команду параметры -d -d.




1.6.5) РАБОТА ЗАШИФРОВАННОЙ ОБОЛОЧКИ SOCAT СО СТАБИЛЬНОЙ REVERSE SHELL TTY — зашифрованная оболочка хорошо работает со стабильной reverse shell TTY только для Linux. !!! НЕ УДАЛОСЬ ПОЛУЧИТЬ !!!


ЭТАП 1. Запускаем на нашем компьютере прослушиватель с помощью команды:



ЭТАП 2. На целевой системе подключаемся к прослушивателю нашего компьютера с помощью команды:



Report Page