sql injection - materias.fi.uba.armaterias.fi.uba.ar/6669/alumnos/2006-2/sqlinjection.pdf ·...
TRANSCRIPT
![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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052421/5be315c809d3f284098c9e04/html5/thumbnails/21.jpg)
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