Ing. Pablo Daniel Pazmiño Naranjo
CEC-EPN
Lo más importante en una operación
militar es la victoria y no la persistencia.
Esta última no es beneficiosa. Un ejército...
OBJETIVOS
 Aprender el concepto fundamental de
un ataque SLQ Injection
 Conocer cómo se arman ataques de
este estilo y q...
SQL INJECTION
(INYECCIÓN DE CÓDIGO SQL)
 Descripción del ataque
 Cómo armar ataques
 Qué busca un atacante
 Cómo prote...
DESCRIPCIÓN DEL ATAQUE
 Es un método de infiltración de código intruso que se vale
de una vulnerabilidad informática pres...
DESCRIPCIÓN DEL ATAQUE
 Ejemplo: este código reside en una
aplicación web y existe un parámetro
“usuario" que contiene el...
DESCRIPCIÓN DEL ATAQUE
 En el ejemplo se tiene que si en el
parámetro usuario se coloca un nombre
válido (Ej.: admin) la ...
SQL INJECTION
(INYECCIÓN DE CÓDIGO SQL)
 Descripción del ataque
 Cómo armar ataques
 Qué busca un atacante
 Cómo prote...
CÓMO ARMAR ATAQUES
 La manera de armar ataques es
insertando uno o varios de los
siguientes caracteres especiales:
○ “
○ ...
CÓMO ARMAR ATAQUES
 El siguiente paso es armar una sentencia
de consulta básica, por ejemplo:
 ‘; select * from tab; --
...
CÓMO ARMAR ATAQUES
 Otra manera común de armar ataques es
analizar el servidor buscando puertos
abiertos.
 Se encuentran...
CÓMO ARMAR ATAQUES
 Otra manera común de armar ataques es
analizar el servidor buscando puertos
abiertos.
 Se encuentran...
SQL INJECTION
(INYECCIÓN DE CÓDIGO SQL)
 Descripción del ataque
 Cómo armar ataques
 Qué busca un atacante
 Cómo prote...
QUÉ BUSCA UN ATACANTE
 Los objetivos de un atacante varían
según las expectativas:
 Enumeración de usuarios.- Se pretend...
QUÉ BUSCA UN ATACANTE
 Los objetivos de un atacante varían según
las expectativas:
 Destrucción de información.- mediant...
SQL INJECTION
(INYECCIÓN DE CÓDIGO SQL)
 Descripción del ataque
 Cómo armar ataques
 Qué busca un atacante
 Cómo prote...
CÓMO PROTEGER SISTEMAS WEB
 Mejor codificación
 Los sistemas web deberán ser codificados de
mejor manera de modo que se ...
CÓMO PROTEGER SISTEMAS WEB
 Mejor codificación
○ Java .- se puede usar la clase PreparedStatement
 En lugar de:
 Connec...
CÓMO PROTEGER SISTEMAS WEB
 Mejor codificación
○ Escape de las variables a insertar en la
sentencia SQL
 Escapar el text...
CÓMO PROTEGER SISTEMAS WEB
 Mejor codificación
○ También se puede utilizar el método
escapeSQL de la clase StringEscapeUt...
CÓMO PROTEGER SISTEMAS WEB
 Validación de campos:
 Es necesario que se validen los campos de
ingreso mediante el uso de ...
CÓMO PROTEGER SISTEMAS WEB
 Separación de las capas de aplicación
de la de base de datos
 Un error común es que en el mi...
CÓMO PROTEGER SISTEMAS WEB
 Implementar un analizador de
contenidos
 La implementación de un analizador de
contenidos bl...
CÓMO PROTEGER SISTEMAS WEB
 Usar ‘stored procedures’ en las bases de
datos
 Cuando la base de datos soporte
procedimient...
CÓMO PROTEGER SISTEMAS WEB
 Limitar los permisos de la base de datos
y segregar usuarios
 Los permisos de la base de dat...
CÓMO PROTEGER SISTEMAS WEB
 Configurar el reporte de errores
 Esta acción permitirá al administrador de la
base de datos...
Upcoming SlideShare
Loading in …5
×

Ethical hacking course sql injection

1,277 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,277
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
46
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ethical hacking course sql injection

  1. 1. Ing. Pablo Daniel Pazmiño Naranjo CEC-EPN
  2. 2. Lo más importante en una operación militar es la victoria y no la persistencia. Esta última no es beneficiosa. Un ejército es como el fuego: si no lo apagas, se consumirá por sí mismo Tsun-Tsu El arte de la guerra
  3. 3. OBJETIVOS  Aprender el concepto fundamental de un ataque SLQ Injection  Conocer cómo se arman ataques de este estilo y qué consecuencias se tienen.  Aprender a proteger aplicaciones web con ingreso de campos.
  4. 4. SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)  Descripción del ataque  Cómo armar ataques  Qué busca un atacante  Cómo proteger sistemas web
  5. 5. DESCRIPCIÓN DEL ATAQUE  Es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.  El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.  Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.
  6. 6. DESCRIPCIÓN DEL ATAQUE  Ejemplo: este código reside en una aplicación web y existe un parámetro “usuario" que contiene el nombre de usuario a consultar. Dentro del código original y vulnerable se tiene:  consulta := "SELECT * FROM usuarios WHERE nombre = '" + usuario + "';"
  7. 7. DESCRIPCIÓN DEL ATAQUE  En el ejemplo se tiene que si en el parámetro usuario se coloca un nombre válido (Ej.: admin) la consulta se ejecuta normalmente.  Pero supongamos que en vez de eso se ingresa algo como lo siguiente:  admin'; DROP TABLE usuario; SELECT * FROM data WHERE name LIKE '%  El resultado será un Drop de la tabla usuario!!!!
  8. 8. SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)  Descripción del ataque  Cómo armar ataques  Qué busca un atacante  Cómo proteger sistemas web
  9. 9. CÓMO ARMAR ATAQUES  La manera de armar ataques es insertando uno o varios de los siguientes caracteres especiales: ○ “ ○ ; ○ -- o - ○ , ○ %
  10. 10. CÓMO ARMAR ATAQUES  El siguiente paso es armar una sentencia de consulta básica, por ejemplo:  ‘; select * from tab; --  Esta consulta nos mostrará un resultado en el browser que despliega todas las tablas existentes en la base de datos  Este tipo de consultas dependerá del motor de base de datos ya que a pesar de que el lenguaje base es el PL-SQL las implementaciones varían entre motores.
  11. 11. CÓMO ARMAR ATAQUES  Otra manera común de armar ataques es analizar el servidor buscando puertos abiertos.  Se encuentran puertos abiertos de bases de datos:  1433/tcp Microsoft-SQL-Server  3306/tcp MySQL sistema de gestión de bases de datos  5432/tcp PostgreSQL sistema de gestión de bases de datos  8000/tcp SQLite
  12. 12. CÓMO ARMAR ATAQUES  Otra manera común de armar ataques es analizar el servidor buscando puertos abiertos.  Se encuentran puertos abiertos de bases de datos:  1433/tcp Microsoft-SQL-Server  3306/tcp MySQL sistema de gestión de bases de datos  5432/tcp PostgreSQL sistema de gestión de bases de datos  8000/tcp SQLite
  13. 13. SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)  Descripción del ataque  Cómo armar ataques  Qué busca un atacante  Cómo proteger sistemas web
  14. 14. QUÉ BUSCA UN ATACANTE  Los objetivos de un atacante varían según las expectativas:  Enumeración de usuarios.- Se pretende comprometer información de usuarios, claves y datos de contacto para su comercialización (SPAM)  Espionaje industrial.- Se intenciona un ataque para obtener información sensitiva respecto a clientes, procesos o documentos internos anexados a un aplicativo web (intranet)
  15. 15. QUÉ BUSCA UN ATACANTE  Los objetivos de un atacante varían según las expectativas:  Destrucción de información.- mediante una alteración de las tablas de sistema se daña la consistencia de las bases de datos haciendo que el aplicativo no funcione. Esto puede ser intencionado o accidental.  Desprestigio.- un ataque de este estilo puede perseguir un objetivo de daño de imagen de la víctima, en cuyo caso resultará en una pérdida de cuota de mercado significativa y mejor posición de su competencia.
  16. 16. SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)  Descripción del ataque  Cómo armar ataques  Qué busca un atacante  Cómo proteger sistemas web
  17. 17. CÓMO PROTEGER SISTEMAS WEB  Mejor codificación  Los sistemas web deberán ser codificados de mejor manera de modo que se tienda a la seguridad de los aplicativos como parte del ciclo de desarrollo. Ej.: ○ PHP .- se puede utilizar la función mysql_real_escape_string:  $query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = "" . mysql_real_escape_string($nombre_usuario) . """);  Esto ayudará a evitar un ataque de inyección de código ya que al ingresar caracteres especiales o consultas generará un error que para la ejecución de la aplicación.
  18. 18. CÓMO PROTEGER SISTEMAS WEB  Mejor codificación ○ Java .- se puede usar la clase PreparedStatement  En lugar de:  Connection con = (acquire Connection) Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';");  se puede usar parametrización o escape de variables, como se indica en los siguiente apartados. ○ Parametrización de sentencias SQL  Connection con = (acquire Connection);  PreparedStatement pstmt = con.prepareStatement("SELECT * FROM usuarios WHERE nombre = ?");  pstmt.setString(1, nombreUsuario);  ResultSet rset = pstmt.executeQuery();
  19. 19. CÓMO PROTEGER SISTEMAS WEB  Mejor codificación ○ Escape de las variables a insertar en la sentencia SQL  Escapar el texto contenido en la variable reemplazando los caracteres especiales en SQL por su equivalente textual, de tal forma que SQL interprete todo el contenido de la variable como si fuera texto.  Connection con = (acquire Connection) Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario.replace("", "").replace("'", "'") + "';");
  20. 20. CÓMO PROTEGER SISTEMAS WEB  Mejor codificación ○ También se puede utilizar el método escapeSQL de la clase StringEscapeUtils procedente de la librería de Apache Commons Lang  Connection con = (acquire Connection);  Statement stmt = con.createStatement();  ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + StringEscapeUtils.escapeSQL(nombreUsuario) + "';");
  21. 21. CÓMO PROTEGER SISTEMAS WEB  Validación de campos:  Es necesario que se validen los campos de ingreso mediante el uso de expresiones regulares con JavaScript, por ejemplo, de modo que donde se ingresen números y letras no se permitan caracteres especiales.  La validación evita más de un 80% de los ataques.  La validación de campos junto con una buena codificación evitan más del 85% de los ataques de SQL injection
  22. 22. CÓMO PROTEGER SISTEMAS WEB  Separación de las capas de aplicación de la de base de datos  Un error común es que en el mismo servidor donde se ejecuta la aplicación (web) se instale y ejecute la base de datos del mismo aplicativo. Esto puede ser detectado e identificado mediante un escáner (nmap) y según eso ya se pueden armar ataques con un aplicativo de conexión (por ejemplo un programa pequeño php)
  23. 23. CÓMO PROTEGER SISTEMAS WEB  Implementar un analizador de contenidos  La implementación de un analizador de contenidos bloqueará cualquier intento de inyección de código en el aplicativo, asegurando la ejecución correcta del mismo.
  24. 24. CÓMO PROTEGER SISTEMAS WEB  Usar ‘stored procedures’ en las bases de datos  Cuando la base de datos soporte procedimientos almacenados hay que usarlos ya que eso evitará el ingreso de inyección de código porque los procedimientos pueden encapsular acciones (query, update, delete, etc.) en un solo procedimiento.  Si se inyectase código, este genera un error a nivel de base de datos y para la ejecución de la sentencia.
  25. 25. CÓMO PROTEGER SISTEMAS WEB  Limitar los permisos de la base de datos y segregar usuarios  Los permisos de la base de datos y del usuario que se conecta NO DEBEN tener permisos de DBA (administrador) ya que con eso se evitan problemas asociados a la alteración de las tablas y estructura de la base de datos.
  26. 26. CÓMO PROTEGER SISTEMAS WEB  Configurar el reporte de errores  Esta acción permitirá al administrador de la base de datos conocer en detalle errores asociados a intentos de alterar la base de datos y por tanto ayudará a tomar correcciones y acciones preventivas para futuros ataques.

×