Вы находитесь на странице: 1из 70

Seminario de SEGURIDAD WEB

Pedro Villena Fernndez www.consultoriainnova.com

Algunas cosas antes de empezar....

Este seminario NO tiene la intencin de piratear otras webs. Los ataques que aprenderemos NO deben probarse en aplicaciones webs que no son nuestras. La nica finalidad es aprender los fallos que se pueden dar para evitarlos.

INDICE
1.- Introduccin 2.- Principales ataques 3.- Fingerprinting y exploits

Introduccion

Qu es necesario para que un sitio sea seguro?

Introduccin
1.-Confidencialidad. Los datos solo podrn ser modificados por aquellas personas que tengan permiso para hacerlo. 2.-Integridad. Los datos se deben mantener sin modificar, como se dejaron en su origen.

Introduccin
3.-Disponibilidad. Los datos deben estar disponibles y accesibles cuando se requiera el acceso a ellos. 4.-Autenticidad. Los datos deben ser de la persona que los creo y no ser modificados. Va ligado a la integridad.

Introduccin
Por qu se atacan webs?

Introduccin
Robar informacin sensible

Introduccin
Defacement (fama)

Introduccin
Implantar Malware: sirven para infectar a victimas que visitan la web y crear botnets (redes zombies)

Introduccion

Quin protege ante estos ataques?

Introduccin
OWASP http://www.owasp.org/

Introduccin
Open Web Application Application Security Project

Sin fines de lucro, organizacin de voluntarios Promueve el desarrollo de software seguro Orientada a la prestacin de servicios orientados a la Web Se centra principalmente en el "back-end" mas que en cuestiones de diseo web Un foro abierto para el debate Un recurso gratuito para cualquier equipo de desarrollo de software

Introduccin
Open Web Application Application Security Project

Materiales de Educacin

OWASP Top 10 Gua de Desarrollo OWASP Gua de Testing OWASP Gua OWASP para aplicaciones Web Seguras Muchos mas WebGoat WebScarab ESAPI

Software

Introduccin
OWASP TOP 10:

https://www.owasp.org/index.php/Top_10_2013-Top_10

INDICE
1.- Introduccin 2.- Principales ataques 3.- Fingerprinting y exploits

Principales ataques
Top de fallos registrados segn OWASP

Principales ataques
Principales ataques que veremos:

SQL Injection (y Blind SQL Injection) Cross-Site Scripting (XSS) Cross Site Request Forgeries (CSRF) Command Execution File inclusion File upload Brute Force

Principales ataques
Para hacer las pruebas utilizaremos DVWA

Principales ataques
DVWA (Damn Vulnerable Web App) es un sitio web que tiene las principales vulnerabilidades. Tiene 3 niveles de seguridad, desde LOW (lo que nunca se debe hacer), hasta HIGHT (la implementacin segura del cdigo) Existen otras alternativas como por ejemplo Webgoat (de OWASP) y Web for Pentester

Principales ataques

SQL INJECTION

Principales ataques
Se produce cuando se ejecutan consultas de SQL con datos recibidos del usuario, y estos no han sido procesados.
sql_query= SELECT * FROM users WHERE username = '" . $usuario . "' AND userpass = '" . $password . "'";

El objetivo principal es obtener todos los datos posibles de la BDD, como por ejemplo contraseas de los usuarios; o saltarse condicionales.

Principales ataques
Un truco que se suele utilizar, siempre que no sea Blind SQL Injection (a ciegas), es poner el smbolo ' o en los campos, y ver si devuelve error.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1

Si esto sucediera, es casi seguro que hay un SQL Injection en esa consulta

Principales ataques
Cosas que se suelen probar siempre:
1' OR 1=1-1' OR '1' = '1 ' '' ') or ('a'='a ") or ("a"="a or a=a-admin'-' or 0=0 -" or 0=0 -or 0=0 -' or 'x'='x " or "x"="x ') or ('x'='x

SELECT * FROM users WHERE username = 'admin' -- AND userpass = 'password'

Principales ataques
Con lo que obtenemos:

Principales ataques
Cmo solucionar este problema?

Si esperamos un entero, hacer casting hacia ese tipo. Utilizando funciones como addclashes (de php) Utilizando funciones del framework que utilicemos (los ORM tambin implementan la seguridad para evitar esto)

Principales ataques

XSS

Principales ataques
El XSS (Cross-Site Scripting) consiste en ejecutar cdigo HTML o Javascript en la pgina.
buscar.php?d=Busqueda buscar.php?d=<script type="text/javascript">scriptaqui();</script>

Desde hace poco tiempo los navegadores interceptan muchos estos ataques: Internet Explorer, Chrome o Firefox mediante No-Script.

Principales ataques
Suelen existir dos tipos de XSS:

XSS persistente: se guardan en BDD o archivos, como por ejemplo en un nombre de usuario o mensaje de un foro. XSS reflejado: el XSS suele estar incrustado en la URL, y normalmente si el usuario entra directamente se saltara el XSS.

Principales ataques
Qu pasa si caemos en un XSS?

Robo de sesin Phising Escaneo de puertos de intranet Fallos de navegador

Principales ataques
Explotando un XSS

Principales ataques
Cmo solucionar este problema?

Eliminando todas las etiquetas html, con funciones como strip_tags Parseando los elementos html, y pasandolos a cdigos no ejecutables (con htmlentities)

Principales ataques

CSRF

Principales ataques
Muchos sitios webs realizan acciones mediante llamadas a URL. Aqu es donde se podra ejecutar un CSRF (Cross-Site Request Forgery)
csrf/?password_new=tales&password_conf=tales&Change=Change

Si enviamos esta URL a una vctima y hace clic en ese enlace, estar cambiando la contrasea sin ser consciente de ello.

Principales ataques
Para poder realizar este ataque, tenemos que comprobar que los parmetros se puedan recibir por medio de GET.

En un principio se pueden enviar por POST, pero quizs tambin se acepten por GET.

Principales ataques
Cmo solucionar este problema?

Insertando un token en el formulario, para que vaya cambiando y no sea siempre el mismo. Aceptando parmetros solo por post.

Principales ataques

COMMAND EXECUTION

Principales ataques
Hay veces que las pginas web tienen que acceder a comandos del sistema, y necesitan obtener algn parmetro por parte del usuario:
<?php $host=$_GET['host']; system("ping ".$host); ?>

En el ejemplo anterior vamos a hacer un ping a una IP, pero como no se ha parseado correctamente la llamada, podemos poner un && ls y nos devolver el directorio de ficheros.

Principales ataques
Con lo que obtenemos:

Principales ataques
Algunas de las funciones que ms posibilidades tiene de sufrir Command execution son:
exec() passthru() shell_exec() system()

Habra que utilizar operadores como & o | para lanzar un segundo comando.

Principales ataques
Cmo solucionar este problema?

Validando los datos. Limitando los caracteres Restringir el uso de operadores &, | , etc

Principales ataques

FILE INCLUSION

Principales ataques
Este ataque se da cuando incluimos ficheros ejecutables directamente por URL o por POST.
http://sitiovulnerable.com/menu.php?seccion=usuarios.php

Se pueden distinguir dos tipos:


LFI (Local File Inclusion): Incluyendo ficheros del propio servidor. RFI (Remote File Inclusion): Incluyendo ficheros de otro servidor.

Principales ataques
Cuando se realiza LFI, es normal coger archivos de configuracin o el archivo htpasswd del sistema (si es UNIX).

Principales ataques
Cuando se realiza RFI, lo normal es incluir alguna web shell como la C99, para as ganar control sobre el sistema.

Principales ataques
Cmo solucionar este problema?

Comprobando que el archivo sea local y exista en nuestro servidor. Eliminando caracteres como . y /. Eliminando cualquier carcter extrao.

Principales ataques

FILE UPLOAD

Principales ataques
Consiste en engaar al sistema para subir un archivo distinto al esperado, o subirlo en una ruta totalmente diferente.
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename( $_FILES['uploaded']['name']); move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path);

Si se consigue la capacidad de subir ficheros, lo normal es subir una web shell como la C99.

Principales ataques
Si esto se consigue, el atacante tendr acceso directo al sistema.

Si se consigue cambiar la ruta de subida de ficheros, pero no se pueden subir archivos ejecutables (por ejemplo nicamente podemos poenr imgenes), se suelen hacer DEFACES.

Principales ataques
Cmo solucionar este problema?

Comprobando adems de la extensin del fichero, su tipo (ya que se puede saltar esa comprobacin) Filtrando que el nombre de fichero no tenga .. ni /, u otros simbolos parecidos.

Principales ataques

BRUTE FORCE

Principales ataques
Consiste en probar millones de contraseas hasta dar con la contrasea que buscamos.

En la prctica este ataque no suele tener mucha efectividad, ya que la velocidad para realizarlo (online) es muy baja, siendo nicamente rentable utilizar un diccionario (contraseas ms utilizadas).

Principales ataques
Contraseas mas tilizadas:

Principales ataques
Cmo realizar un bruteforce? Con FireForce, extensin de Firefox

Principales ataques
Cmo solucionar este problema?

Mostrando un captcha despus de X intentos Bloqueando la IP despus de fallar X veces Poniendo tokens en el formulario

INDICE
1.- Introduccin 2.- Principales ataques 3.- Fingerprinting y exploits

Fingerprinting
El fingerprinting es el primer paso que se realiza al probar un servidor web y busca recopilar la mayor cantidad de informacin posible.

Fingerprinting
Buscaremos los siguientes datos:

Qu aplicaciones web corren? Y en qu versiones? Hay rutas o archivos que pudieran considerarse como sensibles? Sobre qu servidor trabaja?

Fingerprinting
Identificando el servidor web

Mediante las cabeceras que devuelve (utilizando extensiones como Firefox Live HTTP Headers )

Fingerprinting
Identificando el servidor web

Mediante los errores que se devuelven. Muchas veces las pginas de error contienen la versin del servidor.

Fingerprinting
Identificando el servidor web

Cuidado! Esta informacin se puede engaar para mostrar resultados errneos:

Se pueden modificar las cabeceras para poner que un Apache es en realidad un IIS Se pueden cambiar las pginas de error por las de otro servidor.

Fingerprinting
Obteniendo el tipo de aplicacin:

Mirando el cdigo html. La mayora de los CMS o aplicaciones webs suelen tener una etiqueta meta con el nombre, o un comentario indicandolo al pie de pgina.

Fingerprinting
Obteniendo el tipo de aplicacin:

Mirando la estructura de carpetas. Teniendo un poco de conocimientos sobre plataformas comnes, podremos identificarla por la carpeta en la que se guarden los css, imgenes o componentes.

Fingerprinting
Obteniendo el tipo de aplicacin:

Probando a buscar el backend, ya que suele tener el logotipo de la plataforma:


/administrator /admin /wp-admin /administrador ..

Fingerprinting
Una vez que se sepa la plataforma, hay que averiguar la versin.

Podemos ir mirando el checksum (md5 de archivos) que se suelen modificar a lo largo de versiones. Se suele hacer una base de datos con estos md5 para agilizar el proceso. Ejemplo: blindelephant (python)

Fingerprinting

Introduccion

Por qu ocultar la versin y la plataforma?

Fingerprinting
Existen nmerosas vulnerabilidades en las aplicaciones sin actualizar. Muchas veces, aunque la plataforma este actualizada, salen fallos y tardan varios dias en solucionarse. Siempre que sea posible lo recomendable es actualizar siempre que sea posible.

Fingerprinting

Preguntas, dudas, sugerencias?

Вам также может понравиться