Fsecurity | HH
2.08K subscribers
1.73K photos
105 videos
62 files
6.16K links
Канал про ИБ
Наш Discord: https://discord.gg/Eg8aDS7Hn7
Пожертвовать:
> https://www.donationalerts.com/r/xackapb
Download Telegram
Forwarded from 1N73LL1G3NC3
Revisiting Cross Session Activation Attacks

Cross-Session Activation has mainly been used for privilege escalation purposes so far. However, with administrative privileges, it is also possible to execute code on a remote system in the context of an actively logged-in user. From an attacker's perspective, this also has the advantage that we can leave out IoCs for injection, impersonation or credential dumping, as we can directly execute code in the context of our target user.

Tool: https://github.com/rtecCyberSec/SpeechRuntimeMove
https://vulnbank.org

Намеренно уязвимое веб-приложение для отработки тестирования безопасности веб-приложений, API и LLM, безопасного обзора кода и внедрения безопасности в конвейеры CI/CD.

Vulnbank представляет собой банковское приложение с заложенными уязвимостями. Он призван помочь инженерам по безопасности, разработчикам, стажерам, аналитикам QA и специалистам DevSecOps узнать о:

- Распространенных уязвимостях веб-приложений и API;
- Уязвимостях AI/LLM;
- Безопасных методах разработки;
- Автоматизации тестирования безопасности;
- Реализация DevSecOps.

⚠️ ВНИМАНИЕ: Это приложение намеренно уязвимо и должно использоваться только в образовательных целях в изолированных средах.

https://github.com/Commando-X/vuln-bank
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. Вызов 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, поискать пароль в атрибутах УЗ (обязательно вспомнить и про 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" была скрыта за 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
}
}


😈 How to hack?

1. Подготовка тестового окружения
Регистрации фейкового пользователя и эмуляция 40 покупок по $1 при 2.5% кешбэка:
🔵 В результате Balance = $0.80, fractionBuffer = $0.20

2. Параллельный Redeem
Тут можно бурпом обойтись и его параллельной отправкой запросов

3. Сбор и анализ результатов
🔵 Оба запроса вернули успешный 200 OK с credited: 0.20
🔵 Баланс вырос на $0.40 вместо $0.20

4. Проверка остаточных данных
После вызова:
🔵 Balance = 0.80 + 2×0.20 = $1.20
🔵 fractionBuffer = 0.00

🖌 Исправление

Два пункта, которые назовёт любой вайбкодер middle разработчик:
🔵 Отказ от 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()
}
}


🍺 Итоги

Да, не самый классный баг, но всё ради "смари что можно сделать". На всё про всё ушло два доллара (на самом деле 229 рублей, но ради кликбейтного заголовка цены стали в долларах 😏) -- цена большого red bull в пятёрочке у дома (или чебупиццу), от которого и родилась идея пошатать бизнес-логику.
Please open Telegram to view this post
VIEW IN TELEGRAM
Discord сервер
👆🏻Тут можно пообщаться и найти много полезной информации 🦈
Forwarded from Adaptix Framework
Продолжаем тему AxScript, в этом посте затрону тему "Post Hook". Скрипты в расширениях теперь позволяют создавать обработчики результатов выполнения команд, которые вы регистрировали.

На первом скриншоте результаты работы обычного BOF'а hashdump, и того же самого BOF'a hashdump, для которого установлен пост хук (скрин 2).

В скрипте мы очищаем вывод от служебных сообщений, получаем параметры агента (имя машины и адрес), регуляркой парсим пользователей и хеши, после чего сохраняем их в менеджер учетных данных (скрин 3).
This media is not supported in your browser
VIEW IN TELEGRAM