Basic Pentesting es una máquina que permite practicar técnicas de hacking web y de escalada de privilegios en sistemas basados en GNU/Linux.
Para conseguir vulnerar completamente la máquina, se deben usar técnicas de enumeración de los servicios como SMB, realizar técnicas de fuerza bruta, hash cracking, etc.
Escaneo de puertos.
Mediante la herramienta nmap, se lanza un escaneo a los puertos más utilizados, además, se añaden los parámetros necesarios para que se muestren las versiones de los servicios expuestos y para que se ejecuten los scripts nse más comunes de los protocolos descubiertos.
Nmap scan report for 10.10.70.123
Host is up (0.042s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 db:45:cb:be:4a:8b:71:f8:e9:31:42:ae:ff:f8:45:e4 (RSA)
| 256 09:b9:b9:1c:e0:bf:0e:1c:6f:7f:fe:8e:5f:20:1b:ce (ECDSA)
|_ 256 a5:68:2b:22:5f:98:4a:62:21:3d:a2:e2:c5:a9:f7:c2 (ED25519)
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
8009/tcp open ajp13?
| ajp-methods:
|_ Supported methods: GET HEAD POST OPTIONS
8080/tcp open http-proxy
|_http-favicon: Apache Tomcat
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Apache Tomcat/9.0.7
Service Info: Host: BASIC2; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 1h20m03s, deviation: 2h18m34s, median: 3s
|_nbstat: NetBIOS name: BASIC2, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
| Computer name: basic2
| NetBIOS computer name: BASIC2\x00
| Domain name: \x00
| FQDN: basic2
|_ System time: 2021-03-15T03:15:35-04:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2021-03-15 08:15:35
|_ start_date: N/A
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 167.58 seconds
Enumeración Web
Se comienza por verificar el puerto 80 entrando mediante el navegador, donde se puede observar que el servidor se encuentra en mantenimiento.
Se revisa el código de la web en busca de comentarios que pueda haber que, a priori no son visibles en la web, encontrando uno que insta a visitar el recurso dev de la web.
Entonces, se decide usar la herramienta dirsearch para obtener directorios (fuzzear) que haya alojados en el servidor, obteniendo el directorio development.
Se accede al directorio en el navegador y se descubre que tiene la página dispone del listado de directorios habilitado y que existen 2 ficheros.
- dev.txt
- j.txt
Contenido del fichero dev.txt
2018-04-23: I've been messing with that struts stuff, and it's pretty cool! I think it might be neat
to host that on this server too. Haven't made any real web apps yet, but I have tried that example
you get to show off how it works (and it's the REST version of the example!). Oh, and right now I'm
using version 2.5.12, because other versions were giving me trouble. -K
2018-04-22: SMB has been configured. -K
2018-04-21: I got Apache set up. Will put in our content later. -J
Como se puede ver en el contenido, se trata de una conversación entre dos usuarios, de los cuales, el nombre de uno empieza por J y el otro por K.
Contenido del fichero j.txt
For J:
I've been auditing the contents of /etc/shadow to make sure we don't have any weak credentials,
and I was able to crack your hash really easily. You know our password policy, so please follow
it? Change that password ASAP.
-K
En el fichero j.txt se puede ver que la contraseña del usuario cuyo nombre comienza por J es débil y debe cambiarla. Una pista de que se deberá usar probablemente fuerza bruta contra ella.
Acceso inicial.
Como el usuario J tiene configurada una contraseña débil, se decide enumerar los usuarios usando el script Enum4Linux.pl, obteniendo los siguientes:
Ya se dispone del usuario jan que cómo decía la nota anteriormente, tiene una contraseña de fácil adivinación. Por tanto, se utiliza la herramienta Hydra para intentar romper la contraseña del servicio SSH, teniendo éxito con la contraseña armando.
Escalada de privilegios.
Dentro de la máquina, se puede observar que se puede acceder otra ruta, que corresponde al directorio home de usuario kay, donde se obtiene la clave privada de SSH, la cual dispone de contraseña para su descifrado.
Además, haciendo una enumeración de los usuarios que pueden ejecutar el comando sudo, se obtiene el usuario kay, antes mencionado.
Queda claro entonces, que el vector de escalada de privilegios pasa por entrar con el usuario kay mediante SSH y desde ahí ejecutar comandos como administrador con sudo.
Para ello, se procede a “romper” la contraseña mediante jhon the reapper, siguiendo los pasos siguientes:
- Con la herramienta ssh2jhon.py se obtiene el hash de la clave privada para poder ejecutar un ataque de diccionario.
- Se ejecuta el programa jhon junto con el diccionario rockyou (muy usado en CTFs).
Entonces, desde la máquina atacante, se puede acceder mediante SSH con el usuario kay usando el parámetro -i junto con la clave privada obtenida previamente.
Con el acceso ganado, el usuario kay ya puede ejecutar comandos con sudo, sin contraseña, por lo que se puede acceder al directorio home de root y así obtener la última flag del reto.