Primero lo primero y como en toda auditoría a sistemas,
debemos crearnos un directorio con el nombre de nuestro trabajo. En este caso
hago un directorio llamado Validation:
Una vez creado nuestro directorio, vamos a crear los espacios (subdirectorios) con los que vamos a organizar toda la información que vamos a ir identificando. Para esto, personalmente, uso una función definida en la ZSHRC que se llama mkt. Esta función lo que hace es crear de manera rápida todos los directorios que posiblemente necesite para trabajar:
Una vez creado todo el espacio de trabajo, ingresamos al directorio NMAP, en el cual ejecutaremos una segunda función que uso, igual definida en una ruta absoluta, que se llama whichsystem.py. Esta función en Python nos permite identificar mediante el TTL el sistema operativo de nuestro objetivo. Recordemos que los sistemas Linux tienen un TTL de 64, mientras que los sistemas Windows tienen un TTL de 128. Esta función utiliza estos parámetros para identificar, por proximidad, el sistema operativo:
Una vez que tenemos el sistema identificado, comenzamos con el escaneo básico. Ejecutamos el siguiente comando de NMAP:
Y M4nDr4K3, qué son todos esos parámetros?
Pues te los explico ahora:
-p- Este parámetro indica que quiero que escanee todos los puertos por defecto (65535)
–open Esta parámetro indica que solo quiero que me reporte los puertos con estado OPEN
-sS Indica que haré un escaneo TCP Syn Port
–min-rate 5000 Indica que mandaré 5000 paquetes por segundo durante el escaneo
-vvv Indica que me reporte la información ni bien la obtenga y así no esperamos a que termine todo el escaneo
-n Indica que no queremos que realice un escaneo con resolución DNS porque esto demoraría mucho el escaneo
-Pn Indica que no se ejecute un reconocimiento por ICMP (ping)
-oG Indica que exportará los resultados en formato grepeable al archivo “allPorts”
El escaneo nos devuelve el siguiente resultado:
En este punto, vamos a hacer uso de otra utilidad que está en la ZSHRC para parsear la información del archivo allPorts. Esta utilidad se llama extractPorts:
Lo lindo de esta función es que de muestra un resumen de los puertos abiertos, el host y esta información de puertos la coloca en el clip-board para que puedas hacer un ctrl+shift+v directamente para el siguiente paso (muy útil cuando tienes muchos puertos abiertos)
Una vez con la información copiada en la clip-board, ejecutamos el siguiente comando nmap:
M4nDr4K3, hay nuevos paramátros…
Y te los explico ahora:
-p A diferencia del anterior escaneo, este indica solo algunos puertos (los de la clip-board) que queremos que escanee
-sC Indica que queremos ejecutar una serie de scripts básicos de reconocimiento con los que cuenta NMAP
-sV Indica que queremos que nos obtenga la versión de los servicios que corren en ese puerto
-oN Indica que vamos a exportar estos resultados en un archivo en formato NMAP llamado “targeted”
Espero que todo esté claro hasta acá.
El resultado que nos muestra este escaneo es el siguiente:
Podemos explorar este resultado con un batcat sobre el archivo targeted:
¿Quieren un truco? Como es un BATCAT, podemos mandar el parámetro “-l” para especificar algún lenguaje de programación para que tengas más colores y no sea tan monocromático:
Como podemos ver, tenemos el puerto 80 abierto, en este caso corresponde hacer la revisión de lo que está publicado en dicho puerto:
Con la herramienta Wappalyzer podemos ver la tecnología que se usa para este sitio:
Ok, si no te gusta esta herramienta, puedes usar esta otra: whatweb
Como vemos que hay un campo para ingresar información, lo que haremos es registrarnos para ver qué tipo de accesos y privilegios nos otorga este sistema:
Podemos observar que cuando ingresamos los datos, éstos se muestran inmediatamente después en la página account.php, lo que nos hace pensar que podemos usar algo de SQL Injection o XSS para poder acceder a información del servidor:
Al ingresar este comando en el input vemos que el XSS sí funciona: <script>alert(´XSS´);</alert>
Si se dan cuenta, en este punto no hemos logrado hacer nada, pues desde acá no podemos acceder a ninguna sesión ni nada pues no estamos con un login o información que nos permita acceder… eso sí, hemos validado una vulnerabilidad.
Sin embargo, hay un campo más que podemos intentar manipular y que muy posiblemente nos de algo más de información o acceso. Es el ComboBox donde está el listado de los países. Para esto haremos uso de la herramienta BurpSuite:
Luego habilitamos en nuestro navegador el proxy para que nos redireccione a BurpSuite todas las peticiones. Personalmente uso el plugin FoxyProxydonde ya lo tengo agregado para hacerlo más rápido:
Mandamos nuevamente información dentro de la variable que maneja el input para ver cómo se está manejando:
Como podemos ver en el BurpSuite, se envía el nombre que introducimos y el país:
Pero ¿qué pasaría si tratamos de manipular la variable “country” desde acá?
Podemos ver que al momento de enviar esta petición con la variable “country” manipulada, la respuesta del servidor incluye el nombre de la base de datos:
En este punto podemos confirmar que hay una vulnerabilidad de SQL Injection. Ahora lo que podemos hacer es tratar de listar otras bases de datos que estén en el servidor para ver si podemos acceder a información:
Como podemos ver, están las base de datos por defecto de MYSQL y únicamente se cuenta con la base de datos REGISTRATION con la que podremos operar para tratar de vulnerar. Ahora podemos probar nuevamente con la siguiente inyección para ver las tablas que tiene esta base de datos:
Esto nos devolverá el nombre de las tablas dentro de la base de datos “registration”:
Ahora lo que podemos intentar hacer es obtener el nombre de las columnas de la tabla “registration” dentro del esquema “registration” en la base de datos:
El resultado que nos devuelve la consulta es el siguiente:
En este resultado podemos ver que hay dos campos que nos pueden servir: username y userhash. Para esto enviaremos una nueva petición donde solicitaremos que nos liste la información de esos campos:
NOTA: 0x3a es el valor en hexadecimal para el caracter de dos puntos (:).
Cabe recalcar que la información que se muestra es de los usuarios que hemos probado ahora, no lo podemos tomar como información de usuarios privilegiados aún.
Pero no desesperes. Si bien podemos hacer algunas consultas sobre la base de datos, tomemos en cuenta que también podemos depositar contenido en una ruta específica desde un SQL Injection. Supongamos que el archivo “account.php” está en la siguiente ruta: /var/www/html/
Con esta consulta estamos intentando crear un fichero llamado “prueba.txt” el cual contenga el texto “m4ndr4k3”. Al enviar esta petición, vemos que el servidor crea el archivo pues al momento de verificar desde la URL vemos que nos muestra el archivo y su contenido:
Ahora que sabemos que podemos depositar archivos mediante SQL Injection, lo que intentaremos hacer es depositar un archivo PHP (pues porque el servidor interpreta este tipo de archivos), con el que podremos enviar comandos mediante una variable “cmd”:
La respuesta del servidor cuando consultamos la url donde está el archivo “prueba.php” es la siguiente:
Es aquí donde podremos enviar comandos desde la variable “cmd”:
Ahora lo que toca es un poco scripting en Python. Nos crearemos un archivo llamado “autopwn.py” que tendrá lo siguiente:
Lo que hace este script básicamente es automatizar todo lo anterior que vimos con BurpSuite pero además se genera un acceso remoto mediante una ReverseShell. Una vez creado el archivo, es momento de ejecutarlo:
Como podemos ver, obtenemos una Shell interactiva en la cual nos podremos mover para encontrar las flags que necesitamos. Al explorar el directorio donde nos encontramos vemos un archivo “config.php”:
Al explorarlo podemos ver que tenemos un usuario y una contraseña que podríamos usar para escalar privilegios:
Luego es cosa de explorar un poco sobre los directorios para que podamos encontrar la flag del USER en una primera instancia:
Ahora toca hacer la escalación de privilegios. Lo primero que podemos hacer es tratar de cambiar de usuario al “root” usando la contraseña que hemos encontrado en el archivo “config.php”:
Y qué creen… La credencial es válida y ya estamos como usuario root. Ahora solo queda explorar en los directorios para encontrar la flag del root y con eso habríamos terminado esta máquina!