Pentester`s Notes
417 subscribers
52 photos
2 videos
31 files
143 links
Download Telegram
Кто до сих пор думает, что айтишники много получают... вот типичный представитель redteam-команды.
Forwarded from MilyaS Vlog 🕊
Реалии айтишника
2🔥9😱3🤣2
Всем привет!
Когда-то мы с ребятами из RTB обсуждали возможность релея на HTTPS и наличие EPA. Мы остановились на том, что пока нет утилит для получения информации о наличии данного механизма и его статусе.
Так вот, ребята из specterops поресерчили и выкатили статью и утилиту для исследования HTTPS и MSSQL.

https://specterops.io/blog/2025/11/25/less-praying-more-relaying-enumerating-epa-enforcement-for-mssql-and-https/

Тулза
https://github.com/zyn3rgy/RelayInformer
1👍4🔥4
👋 Всем привет!

Сталкивались с ситуацией, когда в организации грамотно настроен выход в интернет?

Сценарий такой:
🔒 По умолчанию доступ в интернет с хостов запрещен.
🌐 Есть корпоративный прокси-сервер с обязательной аутентификацией.
🤔 Да ещё и только по протоколу Kerberos (Negotiate), и не каждому пользователю разрешён выход.

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

💡 Поиск решения
Я перебрал много известных инструментов, но не нашёл ничего подходящего. Большинство решений поддерживают только NTLM или Basic аутентификацию, либо вообще не умеют работать с прокси.

Пришла идея написать небольшой прокси-сервер-прослойку, который бы принимал соединения без аутентификации и сам проходил её на корпоративном прокси. Но встал вопрос: откуда брать учетные данные?

🛠 Первые шаги
Нашёлся старый, но рабочий репозиторий — win-auth-proxy (ссылка). Автор реализовал извлечение дескриптора учётных данных из текущей сессии пользователя с помощью winapi функции AcquireCredentialsHandle, а затем использовал InitializeSecurityContext для аутентификации на проксе.

Скомпилировал его, почти ничего не меняя, и — о чудо, всё завелось! Но тащить два бинаря на хост показалось не очень элегантным решением.

🚀 Идеальный инструмент
Тут я вспомнил про замечательный инструмент reverse_ssh (ссылка). Он тихий и поддерживает всё, что нужно:
- Интерактивную сессию
- Проксирование
- Проброс портов
- Передачу файлов

В общем, всё, что может обычный SSH. Я форкнул репозиторий и добавил необходимые доработки для аутентификации на прокси с использованием текущих учётных данных пользователя Windows.

Отдельно стоит упомянуть гибкость транспортов. Инструмент умеет работать не только по чистому TCP, но и заворачивать трафик в HTTP, HTTPS, TLS, WS (WebSocket) и WSS. Это критически важно для обхода DPI и маскировки под легитимный веб-трафик в жестко контролируемых сетях.

Позже один молодой эксперт (nollium) доработал инструмент, добавив аутентификацию через NTLM с указанием кредов. Что удобно для запуска, например с linux систем.

💪 Финальный штрих
Я столкнулся с проблемой, когда прокси-сервер находится в одном домене AD, а пользователь — в другом. Происходила ошибка из-за неверного выбора realm. Эту проблему я тоже исправил.

Чтобы использовать фичу, достаточно добавить флаг --use-kerberos при генерации агента:
link --https --name main_agent --use-kerberos --proxy http://proxy.example.com:8080 --goos windows


Теперь у нас есть мощный инструмент, который поможет пробить стену!

PS. Все изменения уже доступны в оригинальном репозитории. Пользуйтесь на здоровье!

#pentest #redteam #proxy #kerberos #ssh #infosec #bypass #auth #negotiate
🔥83👨‍💻2👍1
Всех сердечно поздравляю с Рождеством Христовым!

Ещё 7 числа поздравлю.
112
Please open Telegram to view this post
VIEW IN TELEGRAM
13🔥8
Выкатил PR в NetExec: модуль rdpcache — вытаскиваем и разбираем RDP Bitmap Cache с удалённых Windows по SMB.

Если коротко: RDP-кэш — это 64×64 тайлы (фрагменты экрана), которые клиент складывает «для оптимизации». Иногда эта оптимизация оптимизирует ещё и расследование: в тайлах остаются куски UI, имена файлов/окон, элементы интерфейса и фрагменты вывода команд.

Что делает модуль:
- Enum RDP-настроек из реестра: client/server конфиг, NLA, порт.
- Достаёт историю RDP-коннектов (MRU) из всех пользовательских профилей.
- Скачивает Cache*.bin и bcache*.bmc, парсит, режет в 64×64 и собирает коллажи для быстрого просмотра (опционально).

Как использовать:
# enum (default)
nxc smb <target> -u <user> -p <pass> -M rdpcache

# dump + извлечение и коллаж
nxc smb <target> -u <user> -p <pass> -M rdpcache -o ACTION=dump


Опции (если хочется аккуратно автоматизировать под себя):
- OUTPUT=...
- USERS=all|user1,user2
- COLLAGE=False (если не хочется «обоев»)
- COLLAGE_WIDTH=24
- SMART=True (сортировка тайлов по яркости — визуально быстрее выцеплять полезное)

pillow нужен только если генерировать картинки/коллажи.

PR: https://github.com/Pennyw0rth/NetExec/pull/1075

#redteam #pentest #netexec #rdp #dfir
15🔥4👍3
Всем привет!
На одном redteam‑проекте я в бою раздобыл low‑priv учётку в Zabbix.
Вспомнил давние изыскания Zer0Way про заббикс.

Выяснилось, что на винде агент Zabbix крутится от SYSTEM (в данном конкретно случае), и "посмотреть метрики" внезапно превращается в "а давай-ка аккуратно посмотрим файлики". 📁

Первые попытки делать это через веб‑морду были в духе "суп вилкой": вроде возможно, но удовольствие сомнительное. Поэтому я на коленке, с помощью ИИ, слепил себе нормальный терминальный интерфейс, чтобы не кликать по тысяче экранов ради одного конфига.

И, конечно, кульминация максимально жизненная: на терминальном сервере админов нашёлся пароль в обычном текстовом файле. 🔐
Ну а дальше — по накатанной...

Итак, Zabbix-FM — терминальный файловый менеджер для просмотра и скачивания файлов с удалённых хостов через Zabbix-сервер, используя механизм item.test (тот же, что кнопка Test в web‑UI).

Ограничения ⚙️
- Лимит размера: 64 KB по умолчанию (MaxItemSize), можно увеличить до 16 MB в zabbix_agentd.conf.
- Read‑only: запись файлов не поддерживается.
- Нужны API Token + логин/пароль от фронта (для item.test требуется роль Super Admin).
- Недодебажил моменты с кодировкой, а также кажется не грузит бинарные файлы. Хотя вроде пробовал в base64 указывать кодировку.

Может быть когда-нибудь допилю до чего-то более масштабного ;-)

https://github.com/durck/zabbix_fm
https://github.com/durck/zabbix_fm
https://github.com/durck/zabbix_fm

#zabbix #redteam #pentest #recon #python #windows #sysadmin
5🔥5🤗2👍1👨‍💻1😘1
Всем привет!
Все сталкивались с ситуациями, когда в корпоративной среде используются в качестве ядра DFS (Distributed File System). Стандартный базовый инструмент для прогулки по корпоративным ресурсам (в обычном пентесте, про redteam ничего не говорю) - smbclient.py в impacket. Соответственно, при попытке перейти в DFS-директорию (когда папка физически располагается на другом файловом ресурсе), получали ошибку STATUS_PATH_NOT_COVERED.

Так вот, доработал его для полноценной поддержки DFS

Что умеет:
- ls помечает DFS-ссылки как [DFS]
- dfs_info <dir> показывает referral: targets + TTL
- cd <DFS-папка> (в режиме follow) сам делает переподключение к target и продолжает навигацию
- Nested DFS любой глубины (стек контекстов)
- Multi-target failover: упал target → пробуем следующий
- Health-check + auto-reconnect для кэшированных коннектов
- Корректная навигация через границы DFS-root: cd .., cd ../.., cd ../../other
- Работает и с Kerberos, и с NTLM (учётки переиспользуются)
- Кэширование подключений

OPSEC (важно):
Автоматическое подключение к другому файловому хранилицу по-умолчанию выключено — чтобы не шуметь лишний раз.

Включение:
# CLI: 
-dfs-follow # (разрешить автоматический переход по DFS при cd)

# В шелле:
dfs_mode on # (включить follow-режим в интерактивной сессии)


Мини-пример:
# ls
Projects [DFS]

# dfs_info Projects
Target: \\fileserver-01\Projects$ (TTL: 300)

# dfs_mode on
# cd Projects
[*] DFS target: \\fileserver-01\Projects$


Реализация на уровне протокола: FSCTL_DFS_GET_REFERRALS (MS-DFSC).

https://github.com/durck/impacket
https://github.com/durck/impacket
https://github.com/durck/impacket

#impacket #smb #dfs #pentest #redteam
110🔥3👾1
🛡 AMSI Bypass via Page Guard

Patchless-техника обхода AMSI — без перезаписи байтов AmsiScanBuffer и без hardware breakpoints в базовом варианте.

Суть: через NtProtectVirtualMemory на страницу памяти, содержащую AmsiScanBuffer, ставится PAGE_GUARD. При доступе к этой странице возникает STATUS_GUARD_PAGE_VIOLATION, который перехватывается через VEH.

Если исключение пришло именно на AmsiScanBuffer, хэндлер подменяет результат на AMSI_RESULT_CLEAN и делает early return, эмулируя завершение функции без патча её байтов.

Так как guard-page — одноразовая ловушка, после первого срабатывания защита снимается. Поэтому в обработчике дополнительно используется Trap Flag: затем ловится STATUS_SINGLE_STEP, и PAGE_GUARD навешивается повторно.

Итог: байты функции остаются нетронутыми, а Dr0–Dr3 в этом варианте не используются, поэтому исчезают артефакты, характерные для inline patching и классических HWBP-обходов. Но это не означает «недетектируемость» вообще — современные поведенческие детекты всё ещё возможны.

В улучшенном варианте (VEH²) hardware breakpoint выставляется прямо через CONTEXT.Dr* внутри самого VEH, без вызова SetThreadContext / NtSetContextThread. Это убирает один из заметных telemetry-path, на который отдельно обращают внимание исследователи.

📖 Research
🔗 shigshag.com/blog/amsi_page_guard
🔗 crowdstrike.com/blog/crowdstrike-investigates-threat-of-patchless-amsi-bypass-attacks/

💻 PoC
🔗 github.com/vxCrypt0r/AMSI_VEH
🔗 fluxsec.red/veh-squared-rust

#amsi #evasion #redteam #windows #maldev
1🔥8👏2
🛡 AMSI + ETW bypass via PAGE_GUARD + VEH

Написал реализацию на C++ техники из shigshag.com/blog/amsi_page_guard (спасибо ИИ😁)

Вместо патча байт функции — ставим PAGE_GUARD на страницу
AmsiScanBuffer. CPU кидает STATUS_GUARD_PAGE_VIOLATION до исполнения
первой инструкции. VEH перехватывает, пишет AMSI_RESULT_CLEAN в
output-параметр, эмулирует return. Trap Flag переприменяет PAGE_GUARD
через STATUS_SINGLE_STEP.

Расширил до generic движка — одним вызовом накрываем несколько таргетов:
• AmsiScanBuffer (amsi.dll) — результат всегда CLEAN
• EtwEventWrite (ntdll.dll) — телеметрия тихо дропается

Vs hardware breakpoints (DR0-DR7):
→ не трогаем debug-регистры (ниже detection surface)
→ не нужно ставить BP на каждый новый поток
→ байты функции не модифицируются (integrity checks проходят)

github.com/durck/amsi-pageguard-veh

#maldev #redteam #windows #amsi
❤‍🔥4🔥1
В общем, есть такой скрипт - ultimate_nmap_parser (как-то так). Он парсит результаты nmap (в формате gnmap) и выдаёт файл, содержащий ip:port. Работает достаточно долго. Я написал однострочник, который работает во много-много раз быстрее.

for i in `cat networks.gnmap | grep '/open/' | awk '{print $2}'`; do for j in `cat networks.gnmap | grep $i' ' | grep -oP '\d+(?=/open/)'`; do echo $i:$j >> ip_port.txt; done; done


#Заметки #oneliner #everyday
1👍9🔥2
Forwarded from PT SWARM
🧑‍🚒 Our researcher Mikhail Sukhov shares his knowledge and experience in analyzing FreeIPA environments.

He also introduces his new tool, IPAHound 💪

Go ’n see the details ➡️ https://swarm.ptsecurity.com/thinking-in-graphs-with-ipahound/
1👍1🔥1
Выкатил небольшую тулзу для анализа AppLocker-политик — AppLocker Viewer 🛠.

Суть:
Скармливаете ей XML от Get-AppLockerPolicy, и она сразу показывает, где защита реально держит периметр, а где админы оставили удобные форточки для обхода 🔓.

Что внутри:
- CLI для парсинга, фильтрации и выгрузки результатов в таблицу, JSON или CSV 📊.
- Поиск рисков (сразу подсветит writable paths, слишком широкие маски, LOLBins и правила в AuditOnly) ⚠️.
- Diff двух политик — удобно смотреть, что поменялось «до/после» 🔄.
- Автономный HTML-вьювер — работает прямо в браузере, без серверов и зависимостей 🌐. Поддерживает drag-n-drop, пресеты и AND/OR-фильтры.

Всё работает полностью офлайн, данные никуда не стучат 🔇.
Отлично зайдет для red team, аудитов, ревью харденинга или просто чтобы быстро разобраться, что происходит с политиками на проекте 🛡.

🔗 Забирать тут: github.com/durck/applocker-viewer
🔥7
🧦 Запилил proxykit — маленькую Go-библиотеку для исходящих соединений через прокси.

Стандартный net/http умеет в прокси ровно одно — прочитать HTTP_PROXY из окружения. А за корпоративным прокси начинается боль: настройки спрятаны в реестре Windows, в GNOME/KDE, в scutil на маке; авторизация по NTLM или Kerberos; маршрут выбирает PAC-скрипт. proxykit закрывает именно этот разрыв.

Что умеет:
🔌 Транспорты: HTTP/HTTPS CONNECT, SOCKS5, Direct
🔍 Автодетект системного прокси на всех трёх ОС: env-переменные, Windows WinINET + WinHTTP (реестр + IE), Linux /etc/environment + GNOME + KDE, macOS scutil
🔐 Авторизация: Basic и NTLM с явными кредами — или доменный SSO без пароля (Negotiate/Kerberos: на Windows через SSPI, на Linux/macOS через gokrb5)
📜 PAC/WPAD: выбор прокси под каждый адрес назначения (opt-in)
🪶 Без cgo, статичный бинарь, минимум зависимостей

API drop-in: Dialer в стиле net.Dial + адаптер под http.RoundTripper. Три строчки — и приложение само берёт прокси из системы:

d := proxykit.NewDialer(proxykit.Config{AutoDetect: true})
conn, err := d.DialContext(ctx, "tcp", "example.com:443")


А если прокси за корпоративной аутентификацией — отдаёшь цепочку, и proxykit сам подберёт схему под то, что прокси просит в ответ 407 (аутентификаторы — в подпакете proxykit/auth):

d := proxykit.NewDialer(proxykit.Config{
Manual: "http://proxy.corp:8080",
Auth: []auth.Authenticator{
auth.Negotiate("HTTP/proxy.corp.local"), // доменный SSO, без пароля
auth.NTLM("CORP", "alice", "secret"), // иначе — NTLM
auth.Basic("alice", "secret"), // иначе — Basic (только под https)
},
})


В комплекте CLI proxytest — покажет, откуда какой прокси прилетел.

Пока v0.x, API ещё устаканивается. MIT, чистый Go.
👉 github.com/durck/proxykit
🔥7
Pentester`s Notes
#rbcd #relay #ntlmrelayx #upn #nospn #lpe При наличии возможности вызвать relay на ldap от имени машинной УЗ (например, при включенном WebDav), машинную УЗ можно скомпрометировать. Основная причина заключается в том что, машинная уз может сама себе устаналивать…
Ооо, доработали Netexec для простой реализации этой техники😁

SPN-less RBCD with NetExec🔥

While classic RBCD requires a computer account, you can use U2U authentication to perform RBCD with a normal user account, if a computer account is not available.

Thanks to @azoxlpf, you can now perform this attack with NetExec as well🚀

https://x.com/i/status/2063651501982031926

(Не помню, что нужно писать, если упоминаешь ресурсы заблокированные в РФ, короче аккуратнее будьте)
😁3🔥2🤝1
Интересный проект, позволяет двум ИИ мусолить какую-то тему и спорить между собой, приходя к каким-то более объективным результам. Но токены ест много (можно запускать, если лимиты остались, а потратить надо)

Статья:
https://jfmaes.me/blog/crossfire-when-one-llm-isnt-enough/

Проект:
https://github.com/jfmaes/crossfire
👍1🔥1