Curso basicoseguridadweb slideshare7

Embed Size (px)

Citation preview

SEGURIDAD Y APLICACIONES WEB
Licencia Creative Commons

Esta obra esta distribuida bajo una licencia de:Reconocimiento (Attribution): En cualquier explotacin de la obra autorizada por la licencia har falta reconocer la autora.

No Comercial (Non commercial): La explotacin de la obra queda limitada a usos no comerciales.

Compartir Igual (Share alike): La explotacin autorizada incluye la creacin de obras derivadas siempre que mantengan la misma licencia al ser divulgadas.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Prctica SQL Injection

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Para la realizacin de las prcticas vamos a utilizar una suite de aprendizaje que consiste en un una imagen virtualbox que contiene instaladas varias aplicaciones vulnerables y algunas herramientas para facilitar la realizacin de ataques sobre ellas.Esta imagen se llama Web Security Dojo. Ha sido preparada por Maven Security y se puede encontrar en:http://www.mavensecurity.com/web_security_dojo/

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

En esta imagen podremos encontrar como aplicaciones vulnerables:

OWASP's Webgoat

Google's gruyere

Damn Vulnerable Web App

Hacme Casino

OWASP Insecure WebApp

W3af's test website

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Burp Suite

w3af

sqlmap

arachni

metasploit

Zed Attack Proxy

OWASP Skavenger

OWASP Dirbuster

Paros

Webscarab

Ratproxy

skipfish

websecurify

davtest

J-Baah

JBroFuzz

Watobo

RATS

helpful Firefox add-ons

Herramientas:

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

A continuacin iremos realizando diferentes prcticas donde veremos diferentes herramientas y ataques que se usan para descubrir y explotar vulnerabilidades en aplicaciones web y sistemas.En cada una de las prcticas se explicarn brevemente las herramientas que usamos para facilitar la explotacin de cada vulnerabilidad.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Webgoat es una aplicacin ofrecida por OWASP y es una aplicacin diseada para el aprendizaje en pentesting con diversas vulnerabilidades cuya explotacin es guiada por la aplicacin.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Para acceder:

Applications->Targets->Webgoat Start

Se abrir una ventana de firefox con la pgina inicial cargada.

Usuario: guest

Contrasea:guest

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Para aumentar la comodidad en la realizacin de las pruebas usaremos tambin webScarab

WebScarab es otra aplicacin de Owasp y es una aplicacin para facilitar las auditorias web.

Funciona como un proxy que intercepta toda la comunicacin entre el navegador web y el servidor permitindonos entre otras cosas: editar los parmetros get y post que se intercambian.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Para usar webScarab:

Arrancamos webScarab

Configuramos el navegador para que apunte como proxy a webScarab

IP: 127.0.0.1

Puerto: 8008

Configuramos webScarab para que intercepte las peticiones get y post

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SQL Injection

Vamos a realizar algunas de las lecciones del apartado Injection Flaws

Objetivo:Realizar ataques SQLi

Entender como funcionan

Entender como prevenirlos

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Prctica 1:El objetivo es obtener todos los registros de la tabla que consulta la aplicacin para realizar su trabajo legitimo.

En esta leccin se nos indica la query que se esta ejecutando por debajo.

Tendremos que:Interceptar la peticin con Webscarab

Modificar el valor de tal forma que la query que se ejecuta sobre la BD devuelva todos los registros

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Pulsamos en go y nos saltar una ventana de websacarab con la peticin http que se realiza al servidor.

Nos aparecern todos los campos que se intercambian y podremos modificarlos pulsando sobre ellos.

Una vez modificados pulsaremos en Accept Changes para enviar la solicitud modificada al servidor

La aplicacin devolver el resultado de la operacin

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

La consulta es la siguiente

SELECT * FROM weather_data WHERE station = [station]En lugar de [station] la aplicacin colocar lo que nosotros introduzcamos en webscarab por lo que si introducimos hola, la consulta que se realizar ser:SELECT * FROM weather_data WHERE station = hola

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Que habra que introducir para que la consulta devuelva todos registros de la tabla??

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

El ataque se resuelve inyectando

101 OR 1=1;

Quedando la consulta ejecutada:

SELECT * FROM weather_data WHERE station = 101 or 1=1;Lo que es lo mismo que SELECT * FROM weather_data, ya que la clausula where siempre devolver true.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Una vez realizado el caso con xito la aplicacin se protege utilizando una consulta parametrizada

Al intentar el ataque de nuevo nos indica que existe un error de parseo ya que el campo introducido no es un entero

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Vamos a revisar un poco como funciona todo esto a nivel cdigo con otra prctica

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Seleccionamos LAB:SQL Injection

Aparece la siguiente prctica.

El objetivo es logarnos como el usuario administrador

En este caso nos encontraremos con algunas dificultades:Existe un lmite a la longitud del campo password

El campo usuario viene en un combo

No tenemos informacin de la query que se ejecuta a priori (Blind SQL injection)

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Superando las dificultades:

Las dos primeras dificultades se solucionan con el uso de WebScarab (al igual que si existiera alguna validacin javascript en la pgina)

La ltima nos obliga a pensar en como debera ser la query que se esta ejecutando:

Select * from tablaEmpleados where numeroEmpleado=x AND pass=y?

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

En este caso para ver ms claramente que esta pasando en la aplicacin pasaremos a ver el cdigo.

Internamente se esta componiendo la query que se va a realizar en la BD de la siguiente manera:String query = "SELECT * FROM employee WHERE userid = " + userId + " and password = '" + password + "'";

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Probaremos con algo muy parecido al caso anterior

En el campo password injectaremos:

A' or '1'='1

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Como lo evitamos?

String query = "SELECT * FROM employee WHERE userid = ? and password = ?";try{ Connection connection = WebSession.getConnections(s); PreparedStatement statement = connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); statement.setString(1, userId); statement.setString(2, password); ResultSet answer_results = statement.executeQuery();

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Y solo se puede hacer esto con SQL injection?NOOOOOOPodemos insertar o modificar datos

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Seleccionamos Modify Data with SQLi

Nos informan de:

La tabla que pretendemos injectar se llama salaries

Los campos son userid y salary

Debemos cambiar el sueldo de jsmith

Como lo hacemos?

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

jsmith' ; update salaries set salary=5000 where userid = 'jsmith

Podemos utilizar el punto y coma para ejecutar varias sentencias

Tras ejecutar esta query podemos volver a poner jsmith para comprobar que se ha modificado la tabla

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Solucin:

probandoLogin succeeded for username:adminalert("hola"+document.cookie);probando%0ALogin%20succeeded%20for%20username%3Aadmin%3Cscript%3Ealert(%22hola%22%2Bdocument.cookie)%3B%3C%2Fscript%3E

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Pero,...aqu falta algo como sabemos los nombres de las tablas y los campos para realizar estas inyecciones?

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Para poder extraer estos datos tan necesarios necesitamos avanzar un poco ms:Conocer la BD que estamos atacando (MySql, Oracle, MSQL,...)

Obtener datos sobre la estructura interna de la misma.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Se pueden dar dos circunstancias:La aplicacin esta tan mal construida que nos informa de estos datos en pantalla. (Volcado de excepcin en pantalla...)

La aplicacin solo informa de que se ha producido un error de manera genrica (Blind SQLi)

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

En cualquier caso, una vez detectada una SQLi se pueden utilizar herramientas que automaticen el proceso de extraccin de datos de la BD.En esta prctica vamos a ver como funciona sqlmap:Vamos a la mquina virtual DOJO

Arrancamos la aplicacin DVWA

Arrancamos sqlmap (se abrir una consola)

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Nos logamos en la pgina de DVWA

admin

Password

Pulsamos en la opcin SQL Injection

Bajamos el nivel de seguridad de la aplicacin para facilitar la prctica

Pulsamos en DVWA Security

Bajamos el nivel a low

Comprobamos la vulnerabilidad 1' or '1'='1

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Ahora mismo estamos logados en la aplicacin y tenemos una cookie de session asignada, para poder usar sqlmap tendremos que pasarle dicha variable para obtenerla:Tools->Cookies Manager+

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Apuntamos el valor de la variable PHPSESSID

En mi caso(r0ne9pqfj3du14d64bttchgrj5)

Ejecutamos en la consola de SQLMAP la siguiente sentencia

python sqlmap.py -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie='PHPSESSID=r0ne9pqfj3du14d64bttchgrj5; security=low' --string="Surname" --dbs

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Tras la ejecucin de la sentencia SQLMAP nos devolver:

[02:28:54] [INFO] the back-end DBMS is MySQL

web server operating system: Linux Ubuntu 10.04 (Lucid Lynx)

web application technology: PHP 5.3.2, Apache 2.2.14

back-end DBMS: MySQL 5.0

[02:28:54] [INFO] fetching database names

available databases [4]:

[*] dvwa

[*] information_schema

[*] mysql

[*] w3af_test

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Ya sabemos las tecnologas que usa la aplicacin y el nombre de las BD que contiene el servidorQue ms podramos sacar?Nombres de tablasUsuariosPasswords.TODO

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Vamos a ir aadiendo al comando ejecutado al principio los siguientes parmetros

--tables

--users

--passwords

En fin que podemos obtener facilmente toda la informacin que necesitemos de la BD

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Algunas opciones interesantes SQL map: (python sqlmap.py -h) --is-dba Detect if the DBMS current user is DBA --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --columns Enumerate DBMS database table columns --schema Enumerate DBMS schema --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

En esta prueba tenemos unos altos privilegios porque la aplicacin esta usando un usuario root para conectarse con la base de datos.

En todo caso podremos realizar las mismas acciones que el usuario que se conecta a la BD desde la aplicacin por lo que siempre es conveniente que este usuario tenga los mnimos privilegios posibles.

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

Como hemos visto a travs de una vulnerabilidad relativamente sencilla de evitar se crea un agujero de seguridad cuya criticidad es variable en funcin de la configuracin del resto de capas que nos vamos encontrandonos:Usuario que utiliza la aplicacin para acceder a BD

Vulnerabilidades en la BD

Usuario con que se lanza la BD

Vulnerabilidades en el SO

SEGURIDAD Y APLICACIONES WEB
Practica SQLi

La criticidad de una vulnerabilidad SQLi no se queda en lo visto hasta ahora que consistira en acceder a todos los datos y privilegios que el usuario con el que se ejecuta la aplicacin.Tenemos acceso a la ejecucin de comandos en la BD con lo que en caso de existir vulnerabilidades en la BD podramos aprovecharlas para escalar privilegios en la mismo o incluso tener acceso a una shell del sistema operativo con lo que poder seguir adentrndonos en el sistema.

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamallaToinen jsennystasoKolmas jsennystasoNeljs jsennystasoViides jsennystasoKuudes jsennystasoSeitsems jsennystasoKahdeksas jsennystasoYhdekss jsennystaso