
Génère des charges utiles d'accès initial abusant d'AddInProcess.exe via la désérialisation .NET, prenant en charge les modèles HTA, VBA, JS et CHM pour l'exécution de code en mémoire.
.-.
[.-''-.,
| //`~\)
(<| 0\0|>_
";\ _"/ \\_ _,
__\|'._/_ \ '='-,
/\ \ || )_///_\>>
( '._ T |\ | _/),-'
'. '._.-' /'/ |
| '._ _.'`-.._/
,\ / '-' |/
[_/\-----j
_.--.__[_.--'_\__
/ `--' '---._
/ '---. -'. .' _.-- '.
\_ '--.___ _;.-o /
'.__ ___/______.__8----'
c-'----'
Lefty @lefterispan - Nettitude Red Team - 2022 / 2023
Aladdin est une technique de génération de payloads basée sur les travaux de James Forshaw (@tiraniddo), permettant la désérialisation d'un payload .NET et son exécution en mémoire. Le vecteur original a été documenté sur https://www.tiraniddo.dev/2017/07/dg-on-windows-10-s-executing-arbitrary.html.
En démarrant le processus AddInProcess.exe avec les arguments /guid:32a91b0f-30cd-4c75-be79-ccbd6345de99 et /pid:, le processus ouvrira un pipe nommé sous \\.\pipe\32a91b0f-30cd-4c75-be79-ccbd6345de99 et attendra un objet .NET Remoting. Si nous générons un payload qui possède les octets d'en-tête appropriés pour communiquer avec un écouteur .NET Remoting, nous pourrons déclencher la classe ActivitySurrogateSelector de System.Workflow.ComponentModel. et obtenir l'exécution de code.
Initialement, James Forshaw a publié une POC à l'adresse https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData. Cependant, cette POC échoue sur les versions récentes de Windows car Microsoft a corrigé le composant vulnérable System.Workflow.ComponentModel (https://github.com/microsoft/dotnet-framework-early-access/blob/master/release-notes/NET48/dotnet-48-changes.md).
Nick Landers (@monoxgas) a cependant identifié un moyen de contourner le correctif introduit par Microsoft et a rédigé un article détaillé sur https://www.netspi.com/blog/technical/adversary-simulation/re-animating-activitysurrogateselector/ . Le contournement est documenté sur https://github.com/pwntester/ysoserial.net/pull/41 .
Aladdin est un outil de génération de payloads qui, en utilisant le contournement spécifique ainsi que les octets d'en-tête nécessaires du protocole .NET Remoting, est capable de générer des payloads d'accès initial qui abusent du AddInProcess comme documenté à l'origine.
Les templates fournis sont :
* HTA
* VBA
* JS
* CHM
Pour que l'attaque réussisse, l'assembly .NET doit contenir une seule classe publique avec un constructeur vide pour servir de point d'entrée lors de la désérialisation. Un exemple d'assembly a été inclus dans le projet.
public class EntryPoint {
public EntryPoint() {
MessageBox.Show("Hello");
}
}
Usage:
-w, --scriptType=VALUE Définir sur js / hta / vba / chm.
-o, --output=VALUE Le fichier de sortie généré, ex : -o
C:\Users\Nettitude\Desktop\payload
-a, --assembly=VALUE DLL d'assembly fournie, ex : -a
C:\Users\Nettitude\Desktop\popcalc.dll
-h, --help Aide
Le binaire .NET fourni par l'utilisateur sera exécuté sous le processus AddInProcess.exe qui est démarré à partir du payload HTA / JS. Le lancement des processus se fait actuellement via l'objet COM 9BA05972-F6A8-11CF-A442-00A0C90A8F39 (https://dl.packetstormsecurity.net/papers/general/abusing-objects.pdf), ce qui lancera le processus en tant qu'enfant du processus Explorer.exe.
Le GUID fourni dans les paramètres de processus de AddInProcess.exe peut être contrôlé par l'utilisateur. Pour le moment, le GUID est codé en dur dans le template et le code.
CHM exécute le JScript via une transformation XSLT.
Addinprocess.exe sera toujours lancé avec /guid et /pid. Établissez une référence de votre environnement pour les utilisations légitimes et surveillez le reste.* 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/
Le code est basé sur les dépôts suivants :
* https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData
* https://github.com/pwntester/ysoserial.net
Remerciements à :