SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf ·...

21
SQL INJECTION 66.69 – Criptografía y Seguridad Informática Benitez, Marcelo Chinikailo, Cristian De la Cruz, Leonardo Klas, Julián Grupo 5

Transcript of SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf ·...

Page 1: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

SQL INJECTION

66.69 – Criptografía y Seguridad Informática

Benitez, MarceloChinikailo, CristianDe la Cruz, LeonardoKlas, Julián

Grupo 5

Page 2: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Introducción

Ataque basado en inyección de códigoExplota omisiones en la verificación de parámetrosAtaques relacionados

Cross-Site ScriptingBuffer OverflowFile Includes

2

Page 3: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Requerimientos para el ataque

Conocimientos técnicosObligatorios

Lenguaje SQLOpcionales

Conocimiento del DBMSPHPHTTP y lenguaje C (ataques sin browser)

Conocimientos acerca de la víctimaConsulta a ser explotadaTablas de la base de datosDBMS en uso

3

Page 4: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Análisis del Problema

En las aplicaciones basadas en web el usuario ingresa datos mediante formulariosLos datos se envían a un script que construye una consulta SQL usando los datos ingresadosCuando los parámetros no se validan, se pueden utilizar consultas “legales” para ejecutar acciones arbitrarias sobre una Base de Datos

4

Page 5: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Login (codigo HTML)

<html><body>

<form name="frmSistema" method="POST" action="login.php">

<input type="text" name="username" value="Usuario"/><input type="text" name="password"

value="Password"/><input value="Ingresar" type="submit"/>

</form></body></html>

5

Page 6: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Login (codigo HTML)

Internet Explorer – SQL InjectionInternet Explorer – SQL Injection

Ingresar

Usuario

Password

6

Page 7: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Login (código PHP)$username = isset($_REQUEST['username'])?$_REQUEST['username']:"";$password = isset($_REQUEST['password'])?$_REQUEST['password']:"";$_dbhandler = mysql_connect("localhost", "root", "clavecita",true);$_connected = mysql_select_db("fiuba", $_dbhandler);$sql_query = "SELECT * FROM user WHERE username='".$username."' AND

password='".$password."'";$query_result = mysql_query($sql_query,$_dbhandler);$row = mysql_fetch_array($query_result);if(count($row)>1){

print "El nombre de usuario $username es Valido. Bienvenido al Sistema";. . . . . .

}

7

Page 8: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Ataque SQL Injection

El atacante ingresa una cadena maliciosa en el cuadro “password”Esta cadena se expande en el código PHP generando una consulta “maliciosa”

8

Page 9: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Otros ataques posibles

Otras sentencias SQL (borra la tabla de usuarios)SELECT * FROM user_table WHERE username=’user01’ AND password=’pass01’; DROP TABLE user_table;’’;

Uso del catálogo del DBMS (Ejemplo: MySQL)SHOW DATABASES;SHOW TABLES;SHOW TABLES LIKE 'geo%';SHOW TABLES FROM db_bame;

99

Page 10: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Protección contra el ataque (cont.)

Validación: uso de expresiones regularesPara el ejemplo que vimos en PHP: preg_match("/^[A-Za-z0-9-_.]{3,16}$/", $username); preg_match("/^[A-Za-z0-9-_.]{3,16}$/", $password);

10

Page 11: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Protección contra el ataque

Los lenguajes incluyen filtros específicos para validar cadenas

PHP: mysql_real_escape_string()Java: Clase “PreparedStatement”Hay ejemplos en .NET, etc.

11

Page 12: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Protección contra el ataque (cont.)

Se puede configurar el Apache para que limpie las cadenas que pasa al módulo PHP:Directiva “magic_quotes_gpc” en php.iniLos caracteres ' (comilla-simple), " (comilla doble), \ (barra invertida) y NULs son escapados con una barra invertida automáticamente.

12

Page 13: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Protección contra el ataque (cont.)

Otras “Best Practices”8

Evitar SQL Dinámico (usar Stored Procedures)

8

Ejecutar consultas sin privilegios

8

Guardar datos cifrados (caso de los passwords)

13

Page 14: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Demostración 1: Login

DescripciónInyección de código en formulario de registro

Se ve la prevención utilizando:mysql_real_escape_string()Expresiones Regularesmagic_quotes_gpc

14

Page 15: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Demostración 2: Drop table

DescripciónInyección de código en formulario de registro

El ataque permite borrar tablas de la base de datos

15

Page 16: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo de ataque desde C/C++char str_exploit="POST /phpnuke/html/ HTTP/1.0\n"

"Connection: Keep-Alive\n" "Pragma: no-cache\n" "Cache-control: no-cache\n" "Accept: text/html, image/jpeg, image/png, text/*, image/*, */*\n" "Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity\n" "Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5\n" "Accept-Language: en\n" "Host: www.victim.com\n" "Referer: http://www.victim.com/phpnuke/html?name=Your_Account&op=new user\n" "User-Agent: SecurityReason - [SR]\n

...

”;

void exploit()

{

int sock=tcp_open_activo(url_server,80); // conecta al servidor

FILE * conexion=fdopen(sock,”a”);

fprintf(conexion,str_exploit);

grabar_respuesta(conexión,stdout);

}

Basado en exploit publicado en SecurityReason.org16

Page 17: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Demostración 2: POST desde PERLDescripciónAtaque automatizado que no puede ser realizadodesde el navegador

Utiliza sentencias SQL adicionales (UNION)Muestra ventajas de conocer la estructura de las tablas

17

Page 18: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Demostración 3: Ataque a phpNuke

DescripciónAtaque a portal phpNuke mediante el formulario de registro

18

Page 19: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Ataque a phpNuke19

Page 20: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Ejemplo: Ataque a phpNuke

Page 21: SQL INJECTION - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/SQLInjection.pdf · Introducción Ataque basado en inyección de código Explota omisiones en la verificación

Víctimas conocidas y potenciales

Content Management Systems (CMS)phpNUKE (portal)Mambo (portal)phpBB (foros)

Sistemas basados en web: JSP, ASP.NET, PHP, etc.consultas.fi.uba.ar(listas.fi.uba.ar/pipermail/iinfo/2006-March/013843.html)

Sistemas generalesMicrosoft BizTalk Server 2002 (www.microsoft.com/technet/security/Bulletin/MS03-016.mspx)

21