Gallery
December 21, 20225 minutes
https://tryhackme.com/room/gallery666
IP Atacante = 10.10.10.10
IP víctima = 10.10.250.47
Reconocimiento
Para empezar lo primero es comprobar si la máquina está activa y que OS tiene
❯ ping -c 1 10.10.250.47
PING 10.10.250.47 (10.10.250.47) 56(84) bytes of data.
64 bytes from 10.10.250.47: icmp_seq=1 ttl=63 time=52.3 ms
--- 10.10.250.47 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 52.300/52.300/52.300/0.000 ms
En este caso da un ttl (time to live) de 63, entendiendo que ttl=64: Linux / ttl=128: Windows. Esta máquina es Linux por aproximación
Escaneo de puertos (nmap)
Ahora empezamos con un escaneo de puertos
❯ sudo nmap -p- --open -sS --min-rate 5000 -Pn -vvv -n 10.10.110.190 -oG allPorts
Parámetro | Función |
---|---|
-p- | Para que el escaneo sea a todos los puertos (65536) |
–open | Para que solo reporte los puertos abiertos |
-sS –min-rate 5000 | Definir el tiempo del escaneo |
-n | Omitir resolución DNS |
-vvv | Para que vaya reportando lo que encuentre por consola |
-Pn | Skip host discovery |
-oG allPorts | Para que guarde el escaneo en format grepeable en un archivo llamado allPort |
Con una función definida en la zshrc llamada extractPorts, nos reporta los puertos abiertos de una forma más visual
Función extractPorts de @s4vitar
❯ extractPorts allPorts
───────┬─────────────────────────────────────────────────────────────────────────────────────────
│ File: extractPorts.tmp
───────┼─────────────────────────────────────────────────────────────────────────────────────────
1 │
2 │ [*] Extracting information...
3 │
4 │ [*] IP Address: 10.10.110.190
5 │ [*] Open ports: 80,8080
6 │
7 │ [*] Ports copied to clipboard
8 │
───────┴─────────────────────────────────────────────────────────────────────────────────────────
Ahora con nmap vamos a intentar buscar las versiones de los servicios de los puertos y ejecutar scripts básicos de reconocimientos
❯ nmap -p80,8080 -sC -sV 10.10.110.190 -oN target
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
8080/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
|_http-title: Simple Image Gallery System
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
Parámetro | Función |
---|---|
-p | Especificamos los puertos abiertos que hemos encontrado con el escaneo anterior |
-sC | Para que realice scripts básicos de reconocimiento |
-sV | Proporciona la versión e información de los servicios que corren por los puertos |
Web
Con el whatweb podemos ver más información de la web
❯ whatweb 10.10.110.190
http://10.10.110.190 [200 OK] Apache[2.4.29], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[10.10.110.190], Title[Apache2 Ubuntu Default Page: It works]
Buscando subdirectorios
Con wfuzz vamos a fuzzear mediante el dicionario /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
para encontrar subdirectorios
wfuzz -c -t 200 --hc=404 --hh=42126 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 10.10.151.26/FUZZ
Nos reporta el directorio /gallery
/gallery
Al entrar nos lleva a /gallery/login.php
y vemos un panel para iniciar sessión, primero comprobamos si admin:admin funciona, pero no. Podemos probar con usuario ' or 1 = 1-- -
y cualquier contraseña y ya nos entra
Admin
Ahora estamos dentro de la cuenta de administrador y podemos ver los álbums, Al entrar dentro de uno vemos que nos deja subir fotos nuevas.
Al probar de subir un .php no lo acepta, con burpsuite he probado con un diccionario de extensiones y solo acepta extensiones de fotos
Dentro de la configuración del perfil del admin, hay un apartado para cambiar la foto. El mensaje, dice, selecciona un archivo
. Podemos intentar mandarle un archivo .php para mandarnos una reverse shell
Intrusión
Vamos a intentar subir un archivo php de pentestmonkey
para la reverse shell: https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php.
Es importante cambiar las líneas de ip y port y poner la ip de nuestra máquina y el puerto por el que nos vamos a poner en escucha con netcat (443)
Ahora ya podemos subir el archivo y al darle a update, recibimos a reverse shell
Escalada de privilegios
Tratamiento de la tty
Antes para trabajar mejor vamos a hacer un tratamiento de la terminal con los siguientes comandos:
script /dev/null -c bash
ctrl + z
stty raw -echo; fg
reset
xterm
export SHELL=bash
export TERM=xterm
Mike
Si vamos a /home/mike podemos ver que hay un archivo llamado user.txt el cual debe contener la flag de usuario, Pero no tenemos permisos para leerlo ni para entrar en la carpeta Documents e Images.
Después de estar un rato buscando he encontrado que en /var/backups
hay una carpeta llamada mike_home_backup en la cual están los archivos de mike y tenemos permisos para leerlos.
Dentro de Documents hay un archivo con 3 contraseñas de otras webs con el usuario mike, he probado si alguna de estas sirve para esta máquina pero no.
En Images, hay 3 fotos las cuales he mirado si tenían algún archivo oculto pero no
Con un ls -a podemos ver que hay un historial .bash_history
con un cat podemos ver su contenido, dentro hay un comando en el que parece especificar una contraseña: sudo -lb3stpassw0rdbr0xx
con el comando su mike
y proporcionando la contraseña b3stpassw0rdbr0xx
ya somos mike
Ya podemos ver la flag
Root
Con sudo -l
Podemos ver que puede ejecutar lo siguiente como root sin contraseña /bin/bash /opt/rootkit.sh
Al ejecutar sudo /bin/bash /opt/rootkit.sh
y le damos a read nos abre un archivo con un texto muy largo. Como estamos ejecutando nano como root podemos probar con ctrl + r
, ctrl + x
y escribiendo reset; sh 1>&0 2>&0, ya somos root