Las pruebas de penetración es el acto de poner a prueba una red para encontrar vulnerabilidades de seguridad antes de ser explotados por un atacante o hackers maliciosos. DE-ICE es una maquina virtual que contiene una instalación Linux Slax y sirve para realizar prácticas tanto para los principiantes todo el camino a través de los practicantes avanzados.
Slax es un Live CD del sistema operativo GNU/Linux basada en la distribución Slackware. Slax es un sistema operativo Linux portable, no ocupa mucho espacio y brinda un rendimiento rápido.
Slax proporciona un repositorio de software preinstalado y es muy utilizada por administradores para crear plataformas de pruebas, distribuciones especificas y útiles para crear herramientas de recuperación, de pruebas de penetración, de seguridad y simulaciones de red con maquinas virtuales para administradores de sistema y desarrolladores de software o expertos en seguridad, el sistema ocupa alrededor de 190 MB. Puede o no instalarse un interfaz gráfica pero esto ocuparía mucho espacio y volvería lento el sistema.
De-ICE se puede instalar en VirtualBox o grabarlo en un CD para utilizarlo como LiveCD. Existen varias versiones que presentan distinto nivel de dificultad, la versión para principiantes es la DE-ICE1.100 y la mas compleja en la actualidad es la DE-ICE1.140. Para este tutorial utilizaremos la versión DE-ICE 1.120 que se encuentra disponible en https://www.vulnhub....e-ice-s1120,10/.
Esta máquina virtual esta preparada especialmente para poner a prueba nuestros conocimientos y aplicar cualquier técnica o herramientas de pruebas de penetración.
Para los procedimientos de pruebas de penetración instala la versión DE-ICE.1.120 y utilizo Linux Mint y VirtualBox para instalar DE-ICE. Puede utilizarse de cualquier sistema operativo que permita crear una maquina virtual.
Comienzo buscando mi ip actual desde una terminal mediante el comando ifconfig y el resultado es el siguiente:
IP: 192.168.0.11
A continuación utilizo distintos software a mi elección, pero pueden probar con otros a gusto del usuario.
A) Utilizo Zenmap para escanear todos los host entre 1-254
En los tutoriales:
Vimos algunas herramientas para el escaneo de puertos y como utilizarlas.
Abrimos Zenmap, asigno la ip y los parámetros para que escanee toda la red y me muestre los equipos conectados y las ip.
La IP 192.168.0.1 corresponde a la ip Gateway del router con el puerto 80 abierto y la ip del router 192.168.0.10 con todos los puerto cerrados.
Viendo la topología y las características de cada host, determino que la ip 192.168.0.38 es la ip WiFi de la máquina virtual y la ip 192.168.0.40 es la conexión ethernet es la máquina virtual.
Accedo a la ip de la máquina virtual o VPS y encuentro una web para dar de alta productos.
En principio [color=#b22222]un fallo grave[/color] seria que esta web no tenga ningún tipo de control de acceso de usuario, de esta manera estaría con acceso a todos los usuarios de la red, por más que se encuentre en una intranet.
Desde Zenmap observo también los puertos escaneados para este host.
Encuentro varios puertos abiertos para intentar ataques de fuerza bruta para acceder forzando usuario y clave con herramientas como Hydra o John the Ripper, entre otras.
También podemos ver la topología par analizar cada host y con quienes esta conectado.
Así de esta manera podremos ver las características de los equipos, como esta configurada la red y cuales son los host que podemos atacar.
B) Escaneo de vulnerabilidades
Utilizo OSWAP ZAP para realizar un escaneo de vulnerabilidades. Esta herramienta la vimos en el tutorial:
Nos permite escanear vulnerabilidades de un sitio web presentando informes de las vulnerabilidades encontradas.
Utilizando filtro y reglas de escaneo activo y pasivo podremos encontrar las vulnerabilidades de la web. Además nos muestra todas las paginas que contenga la web, inclusive nos indica cuales son las que reciben algún tipo de parámetro por url.
Después del escaneo puedo ver la estructura de la web con las páginas programadas en PHP y las vulnerabilidades según los filtros aplicados.
En el caso de la página de inserción de productos vemos que recibe parámetros por el método POST y también podemos ver los campos o variables que recibe.
C) XSS Inyección de Código
A continuación iremos a la pagina de añadir un producto (Add Product) y aplicaremos técnicas de inyección XSS donde inyecto código html y Javascript para ver si es vulnerable a este tipo de ataques.
Como primer test añado el codigo html de una imagen externa en la descripción del producto, se puede seleccionar cualquier buscando en Google.
<img alt="http://www.midominio/virus-detected.jpg" src="http://www.midominio/virus-detected.jpg">Si es vulnerable la imagen se guardara en la base de datos y se mostrará en el listado de productos que deberemos buscar en el combo por el código que le asignamos, el resultado es el siguiente:
[color=#b22222]Es vulnerable a XSS[/color] ya que podríamos ingresar cualquier código html o javascript inclusive enlaces.
Insertamos en el campo descripción un iframe y guardamos:
<iframe src="http://www.w3schools.com"></iframe>
Luego buscamos el producto por el código 003 y podremos ver el resultado
Mediante esta técnica podemos ingresar un formulario conde simulemos un login y que los datos en realidad se guarden en una base de datos externa. Podemos inutilizar el listado de productos provocando un redireccionamiento a otra web si en cualquier campo de alta de producto añadimos el siguiente código html:
<BODY onload= window.location="http://www.google.com">Cuando alguien intente ver el listado de productos sera reenviado automáticamente a la web indicada en este caso Google.
D) Inyección SQL acceso a Base de datos
Sqlmap es una herramienta muy util para testear la seguridad de servidores de bases de datos en los tutoriales:
Utilizo sqlmap para determinar si hay alguna base de datos disponible mediante los siguientes comandos.
python sqlmap.py -u “http://192.168.0.40/products.php?id=1” --dbs
Podemos observar que el servidor es Apache 2.2.11, que utiliza php 5.2.9 y que el servidor de base de datos es MySQL 5.0.12, ademas visualizamos todas las bases de datos disponibles, inclusive aquellas que son de configuración del servidor de base de datos MySQL.
A continuación utilizo el comando para verificar si hay tablas en la base de datos merch que es la que supongo tiene la tabla productos que ingr4esamos en la web.
python sqlmap.py -u “http://192.168.0.40/products.php?id=1” --tables -D merch
Encontramos la tabla que utiliza el sitio web. A continuación puedo mirar la tabla products con el siguiente comando
python sqlmap.py -u “http://192.168.0.50/products.php?id=1” --columns -D merch -T products
Busco averiguar los usuarios que tienen cuenta en Mysql tratando de encontrar algun administrador, por defecto uso el diccionario de datos de sqlmap ubicado en la carpeta sqlmap-dev/txt/wordlist.zip
En este directorio encontraremos varios diccionarios, sqlmap se encargará de descomprimir y utilizar el archivo, para buscar usuarios y password para ir probando si puedo descubrir y conseguir los nombres de usuario configurados en el servidor MySQL, para ello utilizo el siguiente comando:
python sqlmap.py -u "http://192.168.0.40/products.php?id=1" --users --passwords
A continuación busco el tipo de usuario para ver cuales son los privilegios de acceso de cada usuario para determinar quienes son administradores y cuales son sus claves de acceso.
python sqlmap.py -u "http://192.168.0.65/products.php?id=1" -f -b --current-user --is-dba --is-dba --privileges --dbs --dump
Como resultado de la ejecución se revelan la claves de cada usuario para acceder a las bases de datos y que privilegios tienen.
Cuando termine el escaneo, al final del listado podremos ver los privilegios de cada usuario y determinar que usuarios son administradores.
Encuentro que hay varios usuarios administradores, por lo tanto tomare el usuario jdavenport que es un administrador y su clave es babyl0n, para intentar acceder al sistema
A continuación intento vulnerar el puerto 22 SSH con los datos obtenidos:
Se puede observar que obtuve el acceso como administrador y tengo control total del servidor. Mediante el comando cd /, vamos al directorio root y de allí podemos acceder a cualquier sector, como por ejemplo ver las carpetas y cuentas de los demás usuarios
Al tener acceso mediante SSH con la combinación de usuario y contraseña que hemos obtenido. Nuestro siguiente objetivo será la escalada de privilegios, aunque ya tenemos un usuario root o administrador.
Para manipular los permisos debemos consultar los archivos que contiene los permisos, usuarios, grupos y claves de acceso estos archivos se encuentran en el directorio /etc
- Usuario y Grupos con sus claves en el directorio: /etc/passwd
- Grupos y permisos en el directorio: /etc/sudores
Podemos acceder al archivo de usuarios y claves del sistema mediante el siguiente comando:
nano /etc/password
Podemos recorrer los directorios entre ellos podemos ver los archivos de la web que estábamos analizando y descargarlos luego mediante el ftp o desde la consola de ssh podemos copiarlos a nuestro directorio local si queremos editarlos o revisar el código para que sea mas seguro y volver a testear.
Ahora que conocemos los datos de acceso de un administrador podemos loguearnos en la maquina virtual.
La seguridad de la web es muy importante aquí por un problema de inyección SQL tomamos todo el servidor.
Hay que controlar lo que se envía como parámetro en las url como por ejemplo:
http://192.168.0.40/products.php?id=1Al hacer la consulta sql debemos asegurarnos que no se puedan introducir caracteres o parámetros que no correspondan por ejemplo:
$sql= SELECT * FROM usuarios WHERE usuario = ‘jose’ and clave= ‘12345’ OR ‘1’ = ‘1’;La sentencia es muy similar a un login de un usuario donde buscamos si existe el usuario y clave, en la tabla usuarios, si hay alguien registrado con nombre de usuario que enviamos como parámetro y si su contraseña es ‘12345 o bien que 1 sea igual a 1’.
Esta expresión determina que si la clave no es correcta, la expresión 1 igual a 1 es verdadera y lograríamos entrar al sistema sin conocer la contraseña.
Un método es escapar las variables por ejemplo en PHP:
mysql_real_escape_string($_POST[‘usuario’]);Si necesitamos enviar parámetros por url deberíamos encriptarlos utilizando md5, sha1 o base64 y podemos enviar varios datos encriptados para que el formato final del parámetro no se relacione directamente con datos o campos de la base de datos.
Ademas debería haber un sistema que evite escaneo de puertos y conexiones múltiples desde una misma ip, un firewall en este caso con iptables bastaría y un detector de intrusos.
Una herramienta que podemos utilizar es PortSentry o Fail2Ban que se instala de un repositorio de linux y solo debemos configurar que puertos deben protegerse, si uno de esos puertos es escaneado, automáticamente bloqueara la ip que esta atacándonos.
Bueno es poco. Impresionante de los tutoriales que me gustan, hacking test
BRAVO Sergio! te sigo.