Curso basicoseguridadweb slideshare7
-
Upload
tantascosasquenose -
Category
Technology
-
view
905 -
download
1
Transcript of Curso basicoseguridadweb slideshare7
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