Writeup — Quasar Devices
Todas las búsquedas se hicieron con searchsploit contra la copia local de Exploit-DB de Kali. Las salidas son reales.
Reto 1 — vsftpd 2.3.4
FTP★
$ searchsploit vsftpd 2.3.4
vsftpd 2.3.4 - Backdoor Command Execution | unix/remote/49757.py
vsftpd 2.3.4 - Backdoor Command Execution (Metasploit) | unix/remote/17491.rbLa versión coincide exactamente. El backdoor de vsftpd 2.3.4 es uno de los casos más conocidos de código fuente comprometido distribuido oficialmente durante unas horas en 2011.
$ curl -s -X POST --data-urlencode 'clave=CVE-2011-2523' localhost:8686/reto/1 | grep -o 'GO{{[^}}]*}}' GO{el_backdoor_esta_documentado}
Flag: GO{el_backdoor_esta_documentado}
Reto 2 — ProFTPD 1.3.5
FTP★
$ searchsploit proftpd 1.3.5
ProFTPd 1.3.5 - 'mod_copy' Remote Command Execution | linux/remote/36803.py
ProFTPd 1.3.5 - 'mod_copy' Command Execution (Metasploit) | linux/remote/37262.rbEl módulo mod_copy permite copiar ficheros sin autenticación en esta versión exacta, lo que se puede forzar para ejecutar comandos.
$ curl -s -X POST --data-urlencode 'clave=EDB-36803' localhost:8686/reto/2 | grep -o 'GO{{[^}}]*}}' GO{mod_copy_no_deberia_copiar_eso}
Flag: GO{mod_copy_no_deberia_copiar_eso}
Nota: hay tres entradas para el mismo fallo (36803, 37262, 49908); cualquiera de sus CVE (todos CVE-2015-3306) es válida.
Reto 3 — Apache Struts 2.3.5
Aplicación Java★★
$ searchsploit struts 2.3.5
Apache Struts 2.3.5 < 2.3.31 / 2.5 < 2.5.10 - Remote Code Execution | linux/webapps/41570.py
Apache Struts 2.3.5 < 2.3.31 / 2.5 < 2.5.10 - 'Jakarta' Multipart... | multiple/remote/41614.rbEl rango de versiones (2.3.5 a 2.3.31) incluye la del servicio. Ojo con no confundirlo con otras entradas de Struts para rangos distintos (por ejemplo 2.3.34 o 2.5.16, que aparecen en la misma búsqueda por tener "struts" en el título).
$ curl -s -X POST --data-urlencode 'clave=#41570' localhost:8686/reto/3 | grep -o 'GO{{[^}}]*}}' GO{el_content_type_no_es_solo_metadato}
Flag: GO{el_content_type_no_es_solo_metadato}
Lección: este fallo (conocido como S2-045) se dispara desde la cabecera Content-Type de la petición, no desde un parámetro normal.
Reto 4 — ElasticSearch 1.4.2
Búsqueda★★
Buscar solo elasticsearch 1.4.2 no da con el resultado correcto directamente; hace falta ampliar la búsqueda:
$ searchsploit elasticsearch
ElasticSearch - Remote Code Execution | linux/remote/36337.py
ElasticSearch < 1.4.5 / < 1.5.2 - Directory Traversal | php/webapps/37054.py
...Dos resultados podrían parecer válidos para la versión 1.4.2: el de Directory Traversal y el de Remote Code Execution. Comprobando los detalles del segundo, corresponde a la ejecución de scripts Groovy dinámicos, habilitados por defecto en esa versión:
$ curl -s -X POST --data-urlencode 'clave=CVE-2015-1427' localhost:8686/reto/4 | grep -o 'GO{{[^}}]*}}' GO{groovy_no_deberia_ejecutar_codigo}
Flag: GO{groovy_no_deberia_ejecutar_codigo}
Lección: cuando hay varios candidatos, comprobar el resumen de cada uno (con searchsploit -x o en la web) es la única forma de no equivocarse de vulnerabilidad.
Reto 5 — Samba 3.0.20
Archivos★
$ searchsploit samba 3.0.20
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script' Command Execution | unix/remote/16320.rbEl rango de versiones cubre exactamente la 3.0.20. Es uno de los fallos de configuración por defecto más citados en material de formación de pentesting.
$ curl -s -X POST --data-urlencode 'clave=cve-2007-2447' localhost:8686/reto/5 | grep -o 'GO{{[^}}]*}}' GO{un_script_de_mapeo_de_2007}
Flag: GO{un_script_de_mapeo_de_2007}
Reto 6 — Drupal 7.54
CMS★★
$ searchsploit drupal 7.54
Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgeddon2' RCE (PoC) | php/webapps/44448.py
Drupal < 7.58 - 'Drupalgeddon3' (Authenticated) RCE (PoC) | php/webapps/44542.txtHay dos apodos parecidos y es fácil confundirlos: Drupalgeddon2 (CVE-2018-7600) no necesita autenticación; Drupalgeddon3 (CVE-2018-7602) sí. El servicio del informe no menciona ninguna cuenta, así que corresponde al primero:
$ curl -s -X POST --data-urlencode 'clave=cve-2018-7600' localhost:8686/reto/6 | grep -o 'GO{{[^}}]*}}' GO{drupalgeddon_no_es_una_leyenda}
Flag: GO{drupalgeddon_no_es_una_leyenda}
Lección: dos exploits con nombres casi idénticos para el mismo producto pueden tener requisitos completamente distintos. Leer la descripción, no solo el título, es imprescindible.
Reto 7 — OpenSSH 9.2p1 (trampa)
SSH★★
OpenSSH 9.2p1 es una versión reciente y ampliamente parcheada. Buscando en Exploit-DB y en la NVD no aparece ningún exploit público fiable de ejecución remota para ella (solo avisos menores o de baja gravedad que no dan acceso). La respuesta correcta es reconocer que no existe:
$ searchsploit openssh 9.2
(sin resultados relevantes de ejecucion remota)$ curl -s -X POST --data-urlencode 'clave=NINGUNO' localhost:8686/reto/7 | grep -o 'GO{{[^}}]*}}' GO{no_todo_tiene_un_exploit_publico}
Flag: GO{no_todo_tiene_un_exploit_publico}
Lección: este es el reto trampa del laboratorio. Un servicio moderno y bien mantenido no siempre tiene un exploit público, y perseguir uno inexistente es tiempo perdido en una auditoría real.
Reto 8 — Redis sin autenticación
Base de datos★★
$ searchsploit redis unauthenticated
Redis 4.x / 5.x - Unauthenticated Code Execution (Metasploit) | linux/remote/47195.rbEsta entrada no tiene ningún CVE asociado (se comprueba con searchsploit -j): es una técnica de explotación de una funcionalidad legítima de Redis (cargar módulos, o escribir en el sistema de ficheros a través de SAVE) cuando el servicio no exige autenticación, no un fallo de código con un identificador propio.
$ curl -s -X POST --data-urlencode 'clave=47195' localhost:8686/reto/8 | grep -o 'GO{{[^}}]*}}' GO{sin_cve_tambien_es_un_exploit_real}
Flag: GO{sin_cve_tambien_es_un_exploit_real}
Lección: no todo exploit útil tiene CVE. Una mala configuración (aquí, la ausencia de requirepass) puede ser tan explotable como un fallo de código, y muchas veces más frecuente en el mundo real.
Resumen
| # | Servicio | Referencia correcta |
|---|---|---|
| 1 | vsftpd 2.3.4 | CVE-2011-2523 / EDB-49757 |
| 2 | ProFTPD 1.3.5 | CVE-2015-3306 / EDB-36803 |
| 3 | Apache Struts 2.3.5 | CVE-2017-5638 / EDB-41570 |
| 4 | ElasticSearch 1.4.2 | CVE-2015-1427 / EDB-36337 |
| 5 | Samba 3.0.20 | CVE-2007-2447 / EDB-16320 |
| 6 | Drupal 7.54 | CVE-2018-7600 / EDB-44448 |
| 7 | OpenSSH 9.2p1 | Ninguno (trampa) |
| 8 | Redis sin autenticación | EDB-47195 (sin CVE) |