Forwarded from ESCalator
HTML-вложения как инструмент фишинга 🤑
Популярным инструментом у злоумышленников становится доставка HTML-подобных вложений электронных писем, содержащих различные техники открытия стороннего веб-контента, взаимодействия с ним и отправки сведений на сторонние серверы.
В этом посте разберем пару примеров HTML-подобных вложений, доставляемых с целью кражи учетных данных.
1️⃣ Первый фишинговый образец направлен на вызов методов, позволяющих при его открытии отобразить контент сторонней веб-страницы, с которой может провзаимодействовать получатель.
В начале JavaScript-кода (скриншот 1) определяются константы P и W, являющиеся ключом шифрования и зашифрованным текстом, а также функция дешифрования k. Полученные дешифрованные инструкции помещаются в константу Y и имеют вид, представленный на скриншоте 2.
Как можно понять по этим инструкциям, они создают элемент iframe, содержимое которого получено из фишингового URL-адреса (его значение закодировано в base64); также установлены CSS-стили, позволяющие полученному контенту занять всю доступную область экрана. Кроме того, в этих инструкциях видим вызов метода document.write для размещения полученного контента на вкладке браузера.
Пока что это просто набор текста. Отдельно остановимся на способе запуска инструкций из константы Y. Для этого из вложения вызывается следующая часть скрипта (скриншот 3).
При определении константы H создается ссылка на глобальный объект o, которым в JavaScript-коде является window. Вызов
Чтобы дополнительно усложнить детектирование исполнения вредоносного кода скрипта, злоумышленники создают пустую функцию y, переопределяют для нее метод
Подозрительные маркеры при анализе подобных образцов — переопределение стандартных методов (вроде toString); маппинг слов из числового массива через вызов функции
2️⃣ Еще один заинтересовавший нас образец содержит интересные методы «антидебага», но о них чуть попозже. Он представляет собой форму ввода учетных данных для открытия заблюренного pdf-документа.
HTML-образец содержит два скрипта. Первый после простой валидации наличия email-адреса в поле ввода содержит POST-метод, отправляющий учетные данные на сторонний сервер (скриншот 4).
Как можем видеть, в качестве query-параметра у URL-ссылки есть количество попыток. Естественно, никакой аутентификации по введенным в форму данным не производится, они просто утекают по указанному адресу. При этом параметрСпасибо авторам за комментарии к коду, позволившие понять, что вообще происходит.
Второй скрипт, о котором мы упомянули ранее, имеет следующий вид, представленный на скриншоте 5.
Этот скрипт отслеживает вызов контекстного меню, нажатие клавиш с вызовом встроенного в браузер инструмента разработчика, а также попытки выделить, вырезать, копировать текст с подгружаемой страницы, открыть исходник файла и сохранить его в отдельный файл. Вероятно, по мнению злоумышленников, ограничение возможностей взаимодействия с загруженным интерфейсом скорее вынудит жертву ввести пароль в единственный доступный элемент на странице.
Помимо вызова POST-методов на незнакомые веб-ресурсы, внимание аналитика, по нашему мнению, может привлечь определение вот таких ограничивающих методов, запрещающих вызов дебаг-инструментов, а также дополнительное взаимодействие с интерфейсом страницы.
#phishing #detect #tip
@ptescalator
Популярным инструментом у злоумышленников становится доставка HTML-подобных вложений электронных писем, содержащих различные техники открытия стороннего веб-контента, взаимодействия с ним и отправки сведений на сторонние серверы.
В этом посте разберем пару примеров HTML-подобных вложений, доставляемых с целью кражи учетных данных.
1️⃣ Первый фишинговый образец направлен на вызов методов, позволяющих при его открытии отобразить контент сторонней веб-страницы, с которой может провзаимодействовать получатель.
В начале JavaScript-кода (скриншот 1) определяются константы P и W, являющиеся ключом шифрования и зашифрованным текстом, а также функция дешифрования k. Полученные дешифрованные инструкции помещаются в константу Y и имеют вид, представленный на скриншоте 2.
Как можно понять по этим инструкциям, они создают элемент iframe, содержимое которого получено из фишингового URL-адреса (его значение закодировано в base64); также установлены CSS-стили, позволяющие полученному контенту занять всю доступную область экрана. Кроме того, в этих инструкциях видим вызов метода document.write для размещения полученного контента на вкладке браузера.
Пока что это просто набор текста. Отдельно остановимся на способе запуска инструкций из константы Y. Для этого из вложения вызывается следующая часть скрипта (скриншот 3).
При определении константы H создается ссылка на глобальный объект o, которым в JavaScript-коде является window. Вызов
o[X] (в X просто закодировано слово Function) эквивалентен вызову у глобального объекта свойства Function, при передаче параметров в которое они будут исполнены как новые функции. Как мы видим далее по коду, в объект передаются декодированные инструкции из константы Y.Чтобы дополнительно усложнить детектирование исполнения вредоносного кода скрипта, злоумышленники создают пустую функцию y, переопределяют для нее метод
toString, дополняя его вызовом вышеупомянутого глобального объекта window. Далее выполняется строчка U = ${y}: y преобразуется в строку, вызывая переопеределенный toString, внутри которого уже запускается загрузка контента.Подозрительные маркеры при анализе подобных образцов — переопределение стандартных методов (вроде toString); маппинг слов из числового массива через вызов функции
fromCharCode (в константе X), а также определение длинных числовых и текстовых констант с дальнейшим определением функций по их декодированию.2️⃣ Еще один заинтересовавший нас образец содержит интересные методы «антидебага», но о них чуть попозже. Он представляет собой форму ввода учетных данных для открытия заблюренного pdf-документа.
HTML-образец содержит два скрипта. Первый после простой валидации наличия email-адреса в поле ввода содержит POST-метод, отправляющий учетные данные на сторонний сервер (скриншот 4).
Как можем видеть, в качестве query-параметра у URL-ссылки есть количество попыток. Естественно, никакой аутентификации по введенным в форму данным не производится, они просто утекают по указанному адресу. При этом параметр
attempt инкрементируется, и при третьей попытке ввести в форму какие-то данные производится перенаправление на легитимный веб-ресурс. Второй скрипт, о котором мы упомянули ранее, имеет следующий вид, представленный на скриншоте 5.
Этот скрипт отслеживает вызов контекстного меню, нажатие клавиш с вызовом встроенного в браузер инструмента разработчика, а также попытки выделить, вырезать, копировать текст с подгружаемой страницы, открыть исходник файла и сохранить его в отдельный файл. Вероятно, по мнению злоумышленников, ограничение возможностей взаимодействия с загруженным интерфейсом скорее вынудит жертву ввести пароль в единственный доступный элемент на странице.
Помимо вызова POST-методов на незнакомые веб-ресурсы, внимание аналитика, по нашему мнению, может привлечь определение вот таких ограничивающих методов, запрещающих вызов дебаг-инструментов, а также дополнительное взаимодействие с интерфейсом страницы.
#phishing #detect #tip
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from RedTeam brazzers (Миша)
Всем привет!
Иногда нас любят пугать вопросом: «А что, если есть NTLM Relay в LDAP, но домен старого уровня и никакой Shadow Credentials и RBCD не работает?»
В таком случае можно попробовать дать следующие ответы:
- Собрать базу LDAP, поискать пароль в атрибутах УЗ (обязательно вспомнить и про
- Добавить компьютерный аккаунт и эксплуатировать с него, при наличии у компьютерных УЗ достаточных прав на другие объекты в домене;
- Вспомнить про возможность поднятия интерактивной сессии с LDAP и злоупотребления ACL. Например, через командлет
Однако мы можем получить RCE! И это CVE-2022-30170, которая была обнаружена специалистами Mandiant.
Вкратце существует механизм Credential Roaming, который используется для уменьшения количества выданных сертификатов в случае AutoEnrollment-операций пользователей. Система, на которой логинится пользователь, считывает специальный атрибут пользователя из LDAP (
Таким образом, если целевая система уязвима, то мы можем попробовать прописать в этот атрибут специальное значение из статьи и добиться исполнения команд при следующем логине пользователя на компьютер.
Иногда нас любят пугать вопросом: «А что, если есть NTLM Relay в LDAP, но домен старого уровня и никакой Shadow Credentials и RBCD не работает?»
В таком случае можно попробовать дать следующие ответы:
- Собрать базу LDAP, поискать пароль в атрибутах УЗ (обязательно вспомнить и про
unixUserPassword);- Добавить компьютерный аккаунт и эксплуатировать с него, при наличии у компьютерных УЗ достаточных прав на другие объекты в домене;
- Вспомнить про возможность поднятия интерактивной сессии с LDAP и злоупотребления ACL. Например, через командлет
gain_fullcontrol в случае наличия прав GenericAll/WriteDACL. Либо же эксплуатации GPO, смотри GPOddity.Однако мы можем получить RCE! И это CVE-2022-30170, которая была обнаружена специалистами Mandiant.
Вкратце существует механизм Credential Roaming, который используется для уменьшения количества выданных сертификатов в случае AutoEnrollment-операций пользователей. Система, на которой логинится пользователь, считывает специальный атрибут пользователя из LDAP (
msPKIAccountCredentials) , в котором хранится непосредственно выданный сертификат, после чего сохраняет этот сертификат на локальном устройстве. Однако этот атрибут уязвим к Path Traversal-атаке , и мы можем задать ему такое значение, что система автоматически сама себе пропишет, например, .bat-файл в автозагрузку, что и приведет к RCE : )Таким образом, если целевая система уязвима, то мы можем попробовать прописать в этот атрибут специальное значение из статьи и добиться исполнения команд при следующем логине пользователя на компьютер.
Forwarded from Blue (h/c)at Café
💸 Как за $2 вскрыть дыру в кешбэке
В Июне одного Ибшника осенило -- "Почему бы не проверить одну бизнес-логику кешбэков и получить небольшую прибыль?" Ниже разбор уязвимости, которая в проекте "X" была скрыта за
🧠 Суть уязвимости
1. При реальном начислении кешбэка из суммы продукции amount используется
2. Каждую ночь планировщик запускает
3. Пользователь может вручную проверить буфер через вызов
Если вызвать два
Псевдокот🥺 для понимания:
😈 How to hack?
1. Подготовка тестового окружения
Регистрации фейкового пользователя и эмуляция 40 покупок по $1 при 2.5% кешбэка:
🔵 В результате
2. Параллельный Redeem
Тут можно бурпом обойтись и его параллельной отправкой запросов
3. Сбор и анализ результатов
🔵 Оба запроса вернули успешный
🔵 Баланс вырос на $0.40 вместо $0.20
4. Проверка остаточных данных
После вызова:
🔵
🔵
🖌 Исправление
Два пункта, которые назовётлюбой вайбкодер middle разработчик:
🔵 Отказ от
🔵 Блокировка доступа к буферу при
Исправляем псевдокот🥺 , чтоб понималось ещё лучше 💥
🍺 Итоги
Да, не самый классный баг, но всё ради "смари что можно сделать". На всё про всё ушло два доллара (на самом деле 229 рублей, но ради кликбейтного заголовка цены стали в долларах 😏 ) -- цена большого red bull в пятёрочке у дома (или чебупиццу), от которого и родилась идея пошатать бизнес-логику.
В Июне одного Ибшника осенило -- "Почему бы не проверить одну бизнес-логику кешбэков и получить небольшую прибыль?" Ниже разбор уязвимости, которая в проекте "X" была скрыта за
float64, асинхронным батчем и отсутствием блокировок.1. При реальном начислении кешбэка из суммы продукции amount используется
math.Floor(pct*100)/100 (с учётом возможных артефактов двоичного представления), а остаток (< 0.01) накапливается в fractionBuffer;2. Каждую ночь планировщик запускает
FlushBuffer(), где применяется math.Round(buffer*100)/100 (округление до ближайшего цента) и деньги переводятся в основной баланс;3. Пользователь может вручную проверить буфер через вызов
RedeemBuffer(), где тоже используется math.Floor и вычитание из буфера без блокировки.Если вызвать два
RedeemBuffer() параллельно на одном и том же пользователе, оба прочтут один и тот же buffer, начислят floor(buffer) и вычтут только один раз, в результате integer-часть оказывается зачисленной дважды.Опустил транзакции бд
Псевдокот
type UserAccount struct {
ID string
Balance float64 // основной баланс в долларах
fractionBuffer float64 // накопленная дробная часть
}
// начисление кешбэк при покупке
func (ua *UserAccount) ProcessPurchase(amount float64, rate float64) {
pct := amount * rate
credited := math.Floor(pct*100) / 100
ua.Balance += credited
ua.fractionBuffer += pct - credited
}
func (ua *UserAccount) RedeemBuffer() {
toCredit := math.Floor(ua.fractionBuffer*100) / 100
ua.Balance += toCredit
ua.fractionBuffer -= toCredit
}
func FlushBuffer(all []*UserAccount) {
for _, ua := range all {
toCredit := math.Round(ua.fractionBuffer*100) / 100
ua.Balance += toCredit
ua.fractionBuffer = 0
}
}
1. Подготовка тестового окружения
Регистрации фейкового пользователя и эмуляция 40 покупок по $1 при 2.5% кешбэка:
Balance = $0.80, fractionBuffer = $0.202. Параллельный Redeem
Тут можно бурпом обойтись и его параллельной отправкой запросов
3. Сбор и анализ результатов
200 OK с credited: 0.204. Проверка остаточных данных
После вызова:
Balance = 0.80 + 2×0.20 = $1.20fractionBuffer = 0.00Два пункта, которые назовёт
float64 и хранение всего в int64 центах;Без учета микросервисов и передачи данных в битах по rpc
RedeemBuffer и FlushBuffer или иные бестпрактис решенияИсправляем псевдокот
type UserAccount struct {
ID string
mu sync.Mutex
BalanceCents int64 // целые центы
fractionCents int64 // накопленные центы < 100
}
func (ua *UserAccount) ProcessPurchase(amountCents int64, ratePermille int64) {
ua.mu.Lock()
defer ua.mu.Unlock()
pct := amountCents * ratePermille / 1000
creditedDollars := pct / 100
ua.BalanceCents += creditedDollars * 100 // конвертация долларов в центы
ua.fractionCents += pct % 100 // остаток в центах
}
func (ua *UserAccount) RedeemBuffer() {
ua.mu.Lock()
defer ua.mu.Unlock()
toCredit := ua.fractionCents // начисляем все накопленные центы
ua.BalanceCents += toCredit
ua.fractionCents = 0 // обнуляем буфер
}
func FlushBuffer(all []*UserAccount) {
for _, ua := range all {
ua.mu.Lock()
ua.BalanceCents += ua.fractionCents // начисляем все накопленные центы
ua.fractionCents = 0 // обнуляем буфер
ua.mu.Unlock()
}
}
Да, не самый классный баг, но всё ради "смари что можно сделать". На всё про всё ушло два доллара
Please open Telegram to view this post
VIEW IN TELEGRAM
www.opennet.ru
Уязвимости в Git, допускающие выполнение кода при обращении к внешнему репозиторию
Опубликованы корректирующие выпуски распределённой системы управления исходными текстами Git 2.43.7, 2.44.4, 2.45.4, 2.46.4, 2.47.3, 2.48.2, 2.49.1 и 2.50.1, в которых устранены уязвимости, позволяющие выполнить свой код на системе пользователя при выполнение…
🔗Ссылка:
https://opennet.ru/63552/
https://opennet.ru/63552/
www.opennet.ru
Доступна система обнаружения атак Suricata 8.0
После двух лет разработки организация OISF (Open Information Security Foundation) опубликовала релиз системы обнаружения и предотвращения сетевых вторжений Suricata 8.0, которая предоставляет средства инспектирования различных видов трафика. В конфигурациях…
🔗Ссылка:
https://opennet.ru/63561/
https://opennet.ru/63561/
Forwarded from Adaptix Framework
Продолжаем тему AxScript, в этом посте затрону тему "Post Hook". Скрипты в расширениях теперь позволяют создавать обработчики результатов выполнения команд, которые вы регистрировали.
На первом скриншоте результаты работы обычного BOF'а hashdump, и того же самого BOF'a hashdump, для которого установлен пост хук (скрин 2).
В скрипте мы очищаем вывод от служебных сообщений, получаем параметры агента (имя машины и адрес), регуляркой парсим пользователей и хеши, после чего сохраняем их в менеджер учетных данных (скрин 3).
На первом скриншоте результаты работы обычного BOF'а hashdump, и того же самого BOF'a hashdump, для которого установлен пост хук (скрин 2).
В скрипте мы очищаем вывод от служебных сообщений, получаем параметры агента (имя машины и адрес), регуляркой парсим пользователей и хеши, после чего сохраняем их в менеджер учетных данных (скрин 3).
Forwarded from Похек
CVE-2025-3248: новую уязмостью в Langflow активно эксплуатируют
#разбор_CVE #CVE #RCE #AI #ML #LLM #python
Langflow — популярный Python-фреймворк для создания AI-приложений, который используют разработчики по всему миру. Но есть нюанс — критическая уязвимость с CVSS 9.8, которую уже активно эксплуатируют для развертывания ботнета Flodrix.
➡️ Технические детали
➡️ Тип уязвимости: Неаутентифицированное удаленное выполнение кода (RCE)
➡️ Затронутые версии: Langflow до версии 1.3.0
➡️ Вектор атаки: POST-запросы к эндпоинту
➡️ Механизм: Недостаточная валидация входных данных при компиляции Python-кода
➡️ Процесс эксплуатации
1. Сбор IP-адресов публично доступных серверов Langflow через Shodan/FOFA
2. Использование публичного PoC для получения удаленного доступа
3. Выполнение разведывательных команд (
4. Загрузка и установка ботнета Flodrix
5. Установка связи с C&C сервером для координации DDoS-атак
➡️ Последствия
➡️ Полная компрометация системы
➡️ Участие в DDoS-атаках
➡️ Потенциальная утечка чувствительных данных и конфигураций
➡️ Что делать
Если используете Langflow — немедленно обновляйтесь до версии 1.3.0 или выше. Проверьте логи на предмет подозрительных POST-запросов к
Ботнет Flodrix уже показал себя как серьезная угроза, так что не тяните с патчингом. Особенно если ваши AI-приложения доступны из интернета.
🛸 🛸 exploit.py
🔗 Подробности
🌚 @poxek | 🌚 Блог | 📺 YT | 📺 RT | 📺 VK
#разбор_CVE #CVE #RCE #AI #ML #LLM #python
Langflow — популярный Python-фреймворк для создания AI-приложений, который используют разработчики по всему миру. Но есть нюанс — критическая уязвимость с CVSS 9.8, которую уже активно эксплуатируют для развертывания ботнета Flodrix.
/api/v1/validate/code1. Сбор IP-адресов публично доступных серверов Langflow через Shodan/FOFA
2. Использование публичного PoC для получения удаленного доступа
3. Выполнение разведывательных команд (
whoami, printenv, cat /root/.bash_history)4. Загрузка и установка ботнета Flodrix
5. Установка связи с C&C сервером для координации DDoS-атак
Если используете Langflow — немедленно обновляйтесь до версии 1.3.0 или выше. Проверьте логи на предмет подозрительных POST-запросов к
/api/v1/validate/code. И да, если ваш сервер был скомпрометирован — полная переустановка системы, никаких полумер.Ботнет Flodrix уже показал себя как серьезная угроза, так что не тяните с патчингом. Особенно если ваши AI-приложения доступны из интернета.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Whitehat Lab
Еще одна AD лаба от авторов NetExec с доступными райтапами, подойдет новичкам для изучения основных техник, неплохая история для тех, кто хочет вкатиться в изучение AD
Главная цель - стать доменным администратором
После окончания установки перезагрузить все машины, дабы выкинуть из памяти (lsass) лишние пароли
Originally featured in the LeHack2024 Workshop, this lab is now available for free to everyone! In this lab, you’ll explore how to use the powerful tool NetExec to efficiently compromise an Active Directory domain during an internal pentest
#windows #lab #ad
Please open Telegram to view this post
VIEW IN TELEGRAM