Tartarsauce

Publicado: 17 de Mayo de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Medium
๐ Descripciรณn
TartarSauce es una mรกquina Linux de dificultad media que presenta mรบltiples vectores de ataque a travรฉs de aplicaciones web. El objetivo es explotar vulnerabilidades en varios servicios web para obtener acceso inicial y luego escalar privilegios mediante una tarea cron que ejecuta un script de backup inseguro. La mรกquina simula un entorno realista donde el atacante debe encadenar varias tรฉcnicas para lograr comprometer completamente el sistema, desde la enumeraciรณn de directorios hasta la explotaciรณn de un plugin vulnerable de WordPress y finalmente manipular un script de backup con privilegios elevados para obtener acceso como root.
La mรกquina contiene un servidor web Apache que aloja mรบltiples aplicaciones, incluyendo un WordPress y un CMS Monstra, cada uno con sus propias vulnerabilidades. La parte mรกs interesante estรก en la escalada de privilegios, que requiere una comprensiรณn profunda del funcionamiento de un script de backup personalizado y la capacidad de aprovechar una ventana de tiempo especรญfica para manipular archivos y obtener informaciรณn sensible.
Esta mรกquina es excelente para practicar:
Enumeraciรณn web exhaustiva
Explotaciรณn de plugins de WordPress (RFI)
Tรฉcnicas de escalada de privilegios con tareas cron
Race conditions y manipulaciรณn de archivos temporales
๐ญ Reconocimiento
Ping para verificaciรณn en base a TTL
๐ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.
Escaneo de puertos
Enumeraciรณn de servicios
๐ Enumeraciรณn Web
80 HTTP
http://10.10.10.88/

A travรฉs del fichero robots.txt logamos enumerar algunos recursos de forma manual:
http://10.10.10.88/robots.txt
๐ท๏ธFuzzing de directorios
Veamos quรฉ logramos enumerar realizando fuzzing de directorios de manera automatizada con herramientas feroxbuster y dirsearch:

Encontramos varias rutas interesantes:
http://10.10.10.88/webservices/monstra-3.0.4/admin/

Enumeramos un panel de login que parece tener detrรกs un CMS llamado Monstra en la versiรณn 3.0.4. Esta versiรณn parece vulnerable a RCE:

Probamos con las credenciales bรกsicas admin:admin y logramos acceder. Tenemos las credenciales, estamos en disposiciรณn de usar el exploit anterior para explotar un RCE de la siguiente forma:
Bรกsicamente consiste en crear un archivo con extensiรณn .php7 con el siguiente contenido y subirlo a travรฉs del mรณdulo de subida de archivos

Tras probar con diversas extensiones siempre obtenemos el mismo error:

Por lo que parece que es un punto muerto o rabbit hole y debemos seguir buscando otro vector de ataque:
http://10.10.10.88/webservices/wp/

Observamos que no estรก cargando correctamente el contenido (probablemente porque se estรฉ aplicando vhosting) asรญ que revisamos el cรณdigo fuente:

Aรฑadimos el vhost tartarsauce.htb a nuestro fichero /etc/hosts y recargamos la pรกgina

Enumerando manualmente observamos en el cรณdigo fuente que el wordpress estรก usando un tema llamado voce.

Y la versiรณn de wordpress es la 4.9.4

Tambiรฉn descubrimos accediendo a la ruta: http://tartarsauce.htb/webservices/wp/index.php/wp-json/wp/v2/users/ un usuario llamado wpadmin:

Automatizamos esto es un poco usando la herramienta wp-scan y confirmamos la informaciรณn anterior:
Parece que no estรก logrando enumerar plugins, usando la flag "para intentar realizar un escaneo mรกs agresivo:
Vemos ademรกs que este wordpress tiene habilitado xmlrpc, lo cual nos permite realizar ataques de fuerza bruta contra el panel de login.
Tambiรฉn hemos logrado enumerar un usuario wp-admin que confirmamos que existe al intentar usarlo el panel de login: http://tartarsauce.htb/webservices/wp/wp-login.php

Al estar habilitado xmlrpc, intentamos un ataque de fuerza bruta aunque no tenemos รฉxito:
Verificamos si alguno de los plugins enumerados anteriormente es vulnerable y encontramos que la versiรณn 1.5.3 de gwolle-gb sรญ lo es:

๐ป Explotaciรณn
CVE-2015-8351
Para llevar a cabo la explotaciรณn usaremos el siguiente exploit:
https://github.com/G4sp4rCS/exploit-CVE-2015-8351
Descargamos el exploit y le damos permisos de ejecuciรณn
Copiamos una php shell de pentestmonkey que usaremos para explotar el RFI:
Establecemos el puerto y la ip de nuestro host atacante en la php reverse shell.
Disponibilizamos la php reverse shell en nuestro host de ataque mediante un servidor web en python:
A continuaciรณn iniciamos un listener en el puerto especificado en nuestro host de ataque:
Lanzamos el exploit
Observamos que nos falla porque espera que el nombre del archivo .php se llame wp-load.php asรญ que renombramos nuestra reverse shell para que tenga ese mismo nombre y relanzamos el exploit

Foothold
Ganamos acceso a la mรกquina:
Mejora de la shell
Enumeramos un directorio usuario llamado onuma aunque no tenemos permisos para ver su contenido.
Verificamos si el usuario www-data puede ejecutar algรบn comando como sudo:
Vemos que aunque no puede ejecutar ningรบn comando como super usuario, sรญ que puede ejecutar uno como usuario onuma sin que tenga que especificar la contraseรฑa:
https://gtfobins.github.io/gtfobins/tar/#sudo
Escalamos a usuario onuma usando el siguiente comando:
Una vez que ya somos onuma podemos leer la primera flag:
๐ Escalada de privilegios
Enumeramos la mรกquina para ver si podemos encontrar algo que nos permita movernos lateralmente y/o escalar privilegios. Sabemos que hay una aplicaciรณn wordpress instalada, por lo que revisamos el directorio /var/www/html/webservices/wpy encontramos credenciales en el fichero wp-config.php
Parece otro callejรณn sin salida ya que esta contraseรฑa no nos sirve para conectarnos a la base de datos ni tampoco para usarla como usuario root.
Continuamos enumerando y encontramos algo interesante en el directorio /var/backups

Parece que hay una herramienta que el usuario onuma estรก usando llamado backuperer.
Buscamos referencias a este archivo

Revisamos el contenido de este script
A continuaciรณn repasaremos las partes mรกs importantes del script
Ejecutar
/bin/tarcomoonumay hacer una copia de seguridad$basediren un archivo tar comprimido con gzip llamado$tmpfile$basediry$tmpfilese definen en las variables en la parte superior del script$basedirse define como/var/www/html$tmpfilees un nombre aleatorio, por lo que/var/tmp/.{randomized_chars}Luego, pausamos arbitrariamente la ejecuciรณn del script durante 30 segundos.
Define una funciรณn llamada
integrity_chkque mira recursivamente$basedir:/var/www/htmly$check$basedir:/var/tmp/check/var/www/html
Crear el directorio
$check:/var/tmp/checkExtracto
$tmpfile:/var/tmp/.{randomized_chars}a$check:/var/tmp/checkEntonces,
if [[ $(integrity_chk) ]]si sediff -r $basedir $check$basedirdevuelve algรบn resultado, los archivos en$basediry en no$checkbasedirson los mismos . El resultado deldiffcomando se registrarรก en$errormsg:/var/backups/onuma_backup_error.txt
Podemos ver que el script se ejecuta en intervalos de cinco minutos inspeccionando /var/backups/onuma_backup_test.txty observando la marca de tiempo de la รบltima ejecuciรณn.
Estoy casi seguro de que este script se ejecuta a travรฉs del rootcrontab del usuario, ya que el trabajo cron no estรก en el crontab de onuma ni en ningรบn /etc/cronarchivo legible.
Mi plan para abusar del script es:
Monitorizar la creaciรณn de
$tmpfile:/var/tmp/.{randomized_chars}Una vez creado este archivo, tenemos 30 segundos para crear una condiciรณn que
integrity_chk()produzca algรบn resultado.Una vez
$tmpfilecreado, se vincula simbรณlicamente/root/root.txty/etc/shadowen/var/www/htmlcomowww-datausuario
Como dijo Jack el destripador, vayamos por partes:
Hasta que el
findcomando encuentre un nombre de archivo que comience con.en/var/tmpsuspensiรณn durante 3 segundos en un bucle continuoUna vez hecho esto, se ejecutarรก la siguiente serie de comandos.
Realiza una copia de seguridad del original
index.htmlyrobots.txtlos archivos en el/tmpdirectorioCrea un enlace simbรณlico de
/etc/shadowa/var/www/html/index.htmlCrea un enlace simbรณlico de
/root/root.txta/var/www/html/robots.txtLuego, una vez
integrity_chk()comparado/var/www/htmlcon/var/tmp/check/var/www/html, losindex.htmly losrobots.txten/var/tmp/checkserรกn diferentes de los de/var/www/htmly las lรญneas diferenciales se escribirรกn en el registro de errores.
Esta รบltima parte es solo una pequeรฑa limpieza. Hasta que el
/usr/sbin/backupererproceso finalice, suspenda el sistema repetidamente durante 3 segundos.Luego, se encarga de borrar los enlaces simbรณlicos y retaurar los archivos originales desde
/tmpFinalmente, muestra el contenido del archivo de error.

Last updated