
Gera payloads de acesso inicial abusando do AddInProcess.exe via desserialização .NET, com suporte para modelos HTA, VBA, JS e CHM para execução de código em memória.
.-.
[.-''-.,
| //`~\)
(<| 0\0|>_
";\ _"/ \\_ _,
__\|'._/_ \ '='-,
/\ \ || )_///_\>>
( '._ T |\ | _/),-'
'. '._.-' /'/ |
| '._ _.'`-.._/
,\ / '-' |/
[_/\-----j
_.--.__[_.--'_\__
/ `--' '---._
/ '---. -'. .' _.-- '.
\_ '--.___ _;.-o /
'.__ ___/______.__8----'
c-'----'
Lefty @lefterispan - Nettitude Red Team - 2022 / 2023
Aladdin é uma técnica de geração de payload baseada no trabalho de James Forshaw (@tiraniddo) que permite a desserialização de um payload .NET e execução em memória. O vetor original foi documentado em https://www.tiraniddo.dev/2017/07/dg-on-windows-10-s-executing-arbitrary.html.
Ao iniciar o processo AddInProcess.exe com os argumentos /guid:32a91b0f-30cd-4c75-be79-ccbd6345de99 e /pid:, o processo iniciará um pipe nomeado em \\.\pipe\32a91b0f-30cd-4c75-be79-ccbd6345de99 e aguardará um objeto .NET Remoting. Se gerarmos um payload com os bytes de pacote apropriados necessários para se comunicar com um listener .NET remoting, poderemos acionar a classe ActivitySurrogateSelector do System.Workflow.ComponentModel. e obter execução de código.
Originalmente, James Forshaw lançou um POC em https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData. No entanto, este POC falha em versões recentes do Windows, já que a Microsoft corrigiu o System.Workflow.ComponentModel vulnerável (https://github.com/microsoft/dotnet-framework-early-access/blob/master/release-notes/NET48/dotnet-48-changes.md).
Nick Landers (@monoxgas), no entanto, identificou uma maneira de desabilitar a verificação que a Microsoft introduziu e escreveu um artigo detalhado em https://www.netspi.com/blog/technical/adversary-simulation/re-animating-activitysurrogateselector/. O bypass está documentado em https://github.com/pwntester/ysoserial.net/pull/41 .
Aladdin é uma ferramenta de geração de payload que, usando o bypass específico, bem como os bytes de cabeçalho necessários do protocolo .NET remoting, é capaz de gerar payloads de acesso inicial que abusam do AddInProcess conforme documentado originalmente.
Os modelos fornecidos são:
* HTA
* VBA
* JS
* CHM
Para que o ataque seja bem-sucedido, o assembly .NET deve conter uma única classe pública com um construtor vazio para atuar como ponto de entrada durante a desserialização. Um assembly de exemplo foi incluído no projeto.
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
O binário .NET fornecido pelo usuário será executado sob o AddInProcess.exe que é gerado a partir do payload HTA / JS. A criação dos processos atualmente ocorre usando o objeto COM 9BA05972-F6A8-11CF-A442-00A0C90A8F39 (https://dl.packetstormsecurity.net/papers/general/abusing-objects.pdf) que iniciará o processo como filho do processo Explorer.exe.
O GUID fornecido nos parâmetros do processo de AddInProcess.exe pode ser controlado pelo usuário. No momento, o GUID está codificado no modelo e no código.
O CHM executa o JScript por meio da transformação XSLT
Addinprocess.exe sempre será iniciado com /guid e /pid. Estabeleça uma linha de base do seu ambiente para usos legítimos - monitore o 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/
O código é baseado nos seguintes repositórios:
* https://github.com/tyranid/DeviceGuardBypasses/tree/master/CreateAddInIpcData
* https://github.com/pwntester/ysoserial.net
Agradecimentos a: