Всем привет!
Все сталкивались с ситуациями, когда в корпоративной среде используются в качестве ядра DFS (Distributed File System). Стандартный базовый инструмент для прогулки по корпоративным ресурсам (в обычном пентесте, про redteam ничего не говорю) - smbclient.py в impacket. Соответственно, при попытке перейти в DFS-директорию (когда папка физически располагается на другом файловом ресурсе), получали ошибку
Так вот, доработал его для полноценной поддержки 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 (важно):
Включение:
Мини-пример:
Реализация на уровне протокола: 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
Все сталкивались с ситуациями, когда в корпоративной среде используются в качестве ядра 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
1❤10🔥3👾1
🛡 AMSI Bypass via Page Guard
Patchless-техника обхода AMSI — без перезаписи байтов AmsiScanBuffer и без hardware breakpoints в базовом варианте.
Суть: через
Если исключение пришло именно на AmsiScanBuffer, хэндлер подменяет результат на
Так как guard-page — одноразовая ловушка, после первого срабатывания защита снимается. Поэтому в обработчике дополнительно используется Trap Flag: затем ловится
Итог: байты функции остаются нетронутыми, а 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
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
Написал реализацию на 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) и выдаёт файл, содержащий
#Заметки #oneliner #everyday
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/
He also introduces his new tool, IPAHound 💪
Go ’n see the details ➡️ https://swarm.ptsecurity.com/thinking-in-graphs-with-ipahound/
❤1👍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
Суть:
Скармливаете ей 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👎1
🧦 Запилил proxykit — маленькую Go-библиотеку для исходящих соединений через прокси.
Стандартный
Что умеет:
🔌 Транспорты: 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. Три строчки — и приложение само берёт прокси из системы:
А если прокси за корпоративной аутентификацией — отдаёшь цепочку, и proxykit сам подберёт схему под то, что прокси просит в ответ 407 (аутентификаторы — в подпакете proxykit/auth):
В комплекте CLI proxytest — покажет, откуда какой прокси прилетел.
Пока v0.x, API ещё устаканивается. MIT, чистый Go.
👉 github.com/durck/proxykit
Стандартный
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
(Не помню, что нужно писать, если упоминаешь ресурсы заблокированные в РФ, короче аккуратнее будьте)
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
Статья:
https://jfmaes.me/blog/crossfire-when-one-llm-isnt-enough/
Проект:
https://github.com/jfmaes/crossfire
👍1🔥1💊1
Forwarded from s0ld13r ch. (s0ld13r)
И таааааак сойдет😅
Давно ничего не постил. За это время успел увидеть как все резко стали экспертами по мультиагентным системам, MCP, A2A и еще двадцати новым аббревиатурам которые появляются быстрее чем новые модели у OpenAI⭕️
Но как бы то ни было, жизнь ироничная штука. В какой-то момент я тоже решил посмотреть, что вообще происходит в мире AI для Offensive Security. Перетестил разные инструменты, поковырял open-source проекты и понял, что почти везде мне чего-то не хватает: где-то архитектуры, где-то удобного workflow, где-то агент просто забывает, что было пять сообщений назад🥱
Так появился PentestCode - форк OpenCode, заточенный под пентест. Вместо того чтобы тратить недели на TUI, авторизацию и поддержку десятков LLM-провайдеров, я решил сосредоточиться на архитектуре и воркфлоу агента😎
Пока успел реализовать engagements со своим состоянием, общий контекст для всех субагентов, Task Graph для планирования, автоматический импорт результатов популярных инструментов, построение Attack Path и память между агентами. Сейчас проекту очень нужно много тестов, предложений и замечаний поэтому я буду очень признателен за обратную связь в лс или в issues на github👋
👩💻 Установка:
👀 Использование:
💻 PentestCode: https://github.com/s0ld13rr/pentestcode
Буду рад если поставите звезду на гитхабе и поделитесь с друзьями/коллегами😉
P.SПроект еще очень молодой поэтому могут быть недочеты за фиксом можно в лс
🧢 s0ld13r
Давно ничего не постил. За это время успел увидеть как все резко стали экспертами по мультиагентным системам, MCP, A2A и еще двадцати новым аббревиатурам которые появляются быстрее чем новые модели у OpenAI
Но как бы то ни было, жизнь ироничная штука. В какой-то момент я тоже решил посмотреть, что вообще происходит в мире AI для Offensive Security. Перетестил разные инструменты, поковырял open-source проекты и понял, что почти везде мне чего-то не хватает: где-то архитектуры, где-то удобного workflow, где-то агент просто забывает, что было пять сообщений назад
Так появился PentestCode - форк OpenCode, заточенный под пентест. Вместо того чтобы тратить недели на TUI, авторизацию и поддержку десятков LLM-провайдеров, я решил сосредоточиться на архитектуре и воркфлоу агента
Пока успел реализовать engagements со своим состоянием, общий контекст для всех субагентов, Task Graph для планирования, автоматический импорт результатов популярных инструментов, построение Attack Path и память между агентами. Сейчас проекту очень нужно много тестов, предложений и замечаний поэтому я буду очень признателен за обратную связь в лс или в issues на github
curl -fsSL https://raw.githubusercontent.com/s0ld13rr/pentestcode/main/install.sh | bash
pentestcode auth login
pentestcode # launch TUI
pentestcode -s <session-id>
Буду рад если поставите звезду на гитхабе и поделитесь с друзьями/коллегами
P.S
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝3🔥2
Forwarded from RedTeam brazzers (Миша)
Всем привет! Мой коллега Вячеслав Цепенников выступал на OFFZONE с докладом «Living off the Browser». Он наресерчил крутой функционал Direct Sockets внутри Chrome, который позволяет через Isolated Web Apps отправлять полноценные сетевые TCP/UDP-запросы. Путем нескольких бессонных ночей получилось внутрь Isolated Web App портировать большинство самых популярных тулз для пентеста! Теперь вы можете буквально ломать через браузер : )
Демо:
https://iwa-tools.pkilla.pw/
Сорцы:
https://github.com/CICADA8-Research/iwa-tools
Демо:
https://iwa-tools.pkilla.pw/
Сорцы:
https://github.com/CICADA8-Research/iwa-tools