Ghost AcademyGhostOffensive · Ghost Academy
GhostOffensiveMódulo 09SOLO SOLUCIÓN

Writeup — Quasar Devices

← Volver al capítulo 09

Atención: contiene todas las flags. Inténtalo primero por tu cuenta.

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★

kali@lab (salida real)
$ 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.rb

La 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.

kali@lab (salida real)
$ 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★

kali@lab (salida real)
$ 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.rb

El módulo mod_copy permite copiar ficheros sin autenticación en esta versión exacta, lo que se puede forzar para ejecutar comandos.

kali@lab (salida real)
$ 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★★

kali@lab (salida real)
$ 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.rb

El 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).

kali@lab (salida real)
$ 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:

kali@lab (salida real)
$ 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:

kali@lab (salida real)
$ 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★

kali@lab (salida real)
$ searchsploit samba 3.0.20
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script' Command Execution | unix/remote/16320.rb

El 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.

kali@lab (salida real)
$ 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★★

kali@lab (salida real)
$ 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.txt

Hay 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:

kali@lab (salida real)
$ 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:

kali@lab (salida real)
$ searchsploit openssh 9.2
(sin resultados relevantes de ejecucion remota)
kali@lab (salida real)
$ 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★★

kali@lab (salida real)
$ searchsploit redis unauthenticated
Redis 4.x / 5.x - Unauthenticated Code Execution (Metasploit) | linux/remote/47195.rb

Esta 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.

kali@lab (salida real)
$ 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

#ServicioReferencia correcta
1vsftpd 2.3.4CVE-2011-2523 / EDB-49757
2ProFTPD 1.3.5CVE-2015-3306 / EDB-36803
3Apache Struts 2.3.5CVE-2017-5638 / EDB-41570
4ElasticSearch 1.4.2CVE-2015-1427 / EDB-36337
5Samba 3.0.20CVE-2007-2447 / EDB-16320
6Drupal 7.54CVE-2018-7600 / EDB-44448
7OpenSSH 9.2p1Ninguno (trampa)
8Redis sin autenticaciónEDB-47195 (sin CVE)