
Genera payloads de acceso inicial abusando de AddInProcess.exe mediante deserialización de .NET, compatible con plantillas HTA, VBA, JS y CHM para ejecución de código en memoria.
.-.
[.-''-.,
| //`~\)
(<| 0\0|>_
";\ _"/ \\_ _,
__\|'._/_ \ '='-,
/\ \ || )_///_\>>
( '._ T |\ | _/),-'
'. '._.-' /'/ |
| '._ _.'`-.._/
,\ / '-' |/
[_/\-----j
_.--.__[_.--'_\__
/ `--' '---._
/ '---. -'. .' _.-- '.
\_ '--.___ _;.-o /
'.__ ___/______.__8----'
c-'----'
Lefty @lefterispan - Nettitude Red Team - 2022 / 2023
Aladdin es una técnica de generación de payloads basada en el trabajo de James Forshaw (@tiraniddo) que permite la deserialización de un payload .NET y su ejecución en memoria. El vector original fue documentado en https://www.tiraniddo.dev/2017/07/dg-on-windows-10-s-executing-arbitrary.html.
Al lanzar el proceso AddInProcess.exe con los argumentos /guid:32a91b0f-30cd-4c75-be79-ccbd6345de99 y /pid:, el proceso iniciará un pipe con nombre bajo \\.\pipe\32a91b0f-30cd-4c75-be79-ccbd6345de99 y esperará un objeto de .NET Remoting. Si generamos un payload que tenga los bytes de paquete apropiados para comunicarse con un listener de .NET remoting, podremos activar la clase ActivitySurrogateSelector de System.Workflow.ComponentModel y obtener ejecución de código.
Originalmente, James Forshaw publicó un POC en https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData. Sin embargo, este POC fallará en versiones recientes de Windows ya que Microsoft parcheó el vulnerable System.Workflow.ComponentModel (https://github.com/microsoft/dotnet-framework-early-access/blob/master/release-notes/NET48/dotnet-48-changes.md).
No obstante, Nick Landers (@monoxgas) identificó una forma de deshabilitar la comprobación que introdujo Microsoft y escribió un artículo detallado en https://www.netspi.com/blog/technical/adversary-simulation/re-animating-activitysurrogateselector/. El bypass está documentado en https://github.com/pwntester/ysoserial.net/pull/41.
Aladdin es una herramienta de generación de payloads que, utilizando el bypass específico así como los bytes de cabecera necesarios del protocolo .NET remoting, es capaz de generar payloads de acceso inicial que abusan de AddInProcess tal como se documentó originalmente.
Las plantillas proporcionadas son:
* HTA
* VBA
* JS
* CHM
Para que el ataque tenga éxito, el ensamblado .NET debe contener una única clase pública con un constructor vacío que actúe como punto de entrada durante la deserialización. Se ha incluido un ensamblado de ejemplo en el proyecto.
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
El binario .NET proporcionado por el usuario se ejecutará bajo el proceso AddInProcess.exe que se lanza desde el payload HTA/JS. El lanzamiento de los procesos actualmente se realiza utilizando el objeto COM 9BA05972-F6A8-11CF-A442-00A0C90A8F39 (https://dl.packetstormsecurity.net/papers/general/abusing-objects.pdf) que iniciará el proceso como hijo del proceso Explorer.exe.
El GUID suministrado en los parámetros del proceso de AddInProcess.exe puede ser controlado por el usuario. Por ahora, el guid está codificado en la plantilla y en el código.
CHM ejecuta el JScript a través de la transformación XSLT.
Addinprocess.exe siempre se lanzará con /guid y /pid. Establezca una línea base en su entorno para usos legítimos y monitorice el resto.* 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/
El código está basado en los siguientes repositorios:
* https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData
* https://github.com/pwntester/ysoserial.net
Agradecimientos a: