
Генерирует полезные нагрузки для начального доступа, используя AddInProcess.exe через десериализацию .NET, с поддержкой шаблонов HTA, VBA, JS и CHM для выполнения кода в памяти.
.-.
[.-''-.,
| //`~\)
(<| 0\0|>_
";\ _"/ \\_ _,
__\|'._/_ \ '='-,
/\ \ || )_///_\>>
( '._ T |\ | _/),-'
'. '._.-' /'/ |
| '._ _.'`-.._/
,\ / '-' |/
[_/\-----j
_.--.__[_.--'_\__
/ `--' '---._
/ '---. -'. .' _.-- '.
\_ '--.___ _;.-o /
'.__ ___/______.__8----'
c-'----'
Lefty @lefterispan - Nettitude Red Team - 2022 / 2023
Aladdin — это техника генерации полезной нагрузки, основанная на работе Джеймса Форшоу (@tiraniddo), которая позволяет десериализовать .NET-нагрузку и выполнить её в памяти. Изначальный вектор был описан на https://www.tiraniddo.dev/2017/07/dg-on-windows-10-s-executing-arbitrary.html.
Запуск процесса AddInProcess.exe с аргументами /guid:32a91b0f-30cd-4c75-be79-ccbd6345de99 и /pid: заставляет процесс открыть именованный канал по адресу \\.\pipe\32a91b0f-30cd-4c75-be79-ccbd6345de99 и ожидать объект .NET Remoting. Если сгенерировать нагрузку с соответствующими байтами заголовка, необходимыми для взаимодействия с .NET-сервером удаленного взаимодействия, можно вызвать класс ActivitySurrogateSelector из System.Workflow.ComponentModel и получить выполнение кода.
Изначально Джеймс Форшоу опубликовал PoC по адресу https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData. Однако этот PoC не сработает на современных версиях Windows, так как Microsoft исправила уязвимый компонент System.Workflow.ComponentModel (https://github.com/microsoft/dotnet-framework-early-access/blob/master/release-notes/NET48/dotnet-48-changes.md).
Тем не менее, Ник Ландерс (@monoxgas) нашел способ обойти проверку, введенную Microsoft, и написал подробную статью на https://www.netspi.com/blog/technical/adversary-simulation/re-animating-activitysurrogateselector/. Описание обхода находится по адресу https://github.com/pwntester/ysoserial.net/pull/41.
Aladdin — это инструмент генерации нагрузок, который, используя конкретный обходной путь, а также необходимые заголовочные байты протокола .NET Remoting, способен создавать нагрузки для первоначального доступа, злоупотребляющие процессом AddInProcess, как описано в оригинальной документации.
Предоставленные шаблоны:
* HTA
* VBA
* JS
* CHM
Для успешной атаки сборка .NET должна содержать один открытый класс с пустым конструктором, который будет служить точкой входа при десериализации. Пример сборки включен в проект.
public class EntryPoint {
public EntryPoint() {
MessageBox.Show("Hello");
}
}
Usage:
-w, --scriptType=VALUE Set to js / hta / vba / chm.
-o, --output=VALUE The generated output, e.g: -o
C:\Users\Nettitude\Desktop\payload
-a, --assembly=VALUE Provided Assembly DLL, e.g: -a
C:\Users\Nettitude\Desktop\popcalc.dll
-h, --help Help
Бинарный файл .NET, предоставленный пользователем, будет выполняться в процессе AddInProcess.exe, который запускается из нагрузки HTA/JS. В настоящее время запуск процессов осуществляется с использованием COM-объекта {9BA05972-F6A8-11CF-A442-00A0C90A8F39} (https://dl.packetstormsecurity.net/papers/general/abusing-objects.pdf), что приводит к запуску процесса как дочернего процесса Explorer.exe.
GUID, передаваемый в параметрах процесса AddInProcess.exe, может задаваться пользователем. В текущей реализации GUID жестко прописан в шаблоне и коде.
CHM выполняет JScript через XSLT-преобразование.
Addinprocess.exe всегда запускается с параметрами /guid и /pid. Проанализируйте свою среду на предмет легитимного использования этого процесса и отслеживайте любые аномалии.* https://www.tiraniddo.dev/2017/07/dg-on-windows-10-s-executing-arbitrary.html
* https://www.netspi.com/blog/technical/adversary-simulation/re-animating-activitysurrogateselector/
Код основан на следующих репозиториях:
* https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData
* https://github.com/pwntester/ysoserial.net
Отдельное спасибо: