Hay muchos sitios y blogs que hablan sobre el tema de inyección SQL. Puede encontrar toda la información en este artículo, y más, en los sitios siguientes:
El blog de SWI: http://blogs.technet.com/swi/archive/2008/05/29/sql-injection-attack.aspx
El blog de Neil Carpenter: http://blogs.technet.com/neilcar/archive/2008/03/14/anatomy-of-a-sql-injection-incident.aspx
http://blogs.technet.com/neilcar/archive/2008/03/15/anatomy-of-a-sql-injection-incident-part-2-meat.aspx
La inyección SQL últimamente es un tema que recibe mucha atención.
La verdad es que no es falta de una explotación de vulnerabilidad de IIS o SQL conocido o 0-day. Hemos recibido muchos casos de inyección SQL y todos son fallos de código ASP/ASPX. A demás, el usuario de SQL utilizando su aplicación ASP no necesita ser un sysadmin.
En general, la inyección SQL es el resultado de:
- Validación floja de los datos entrada
- Construcción dinámica de las sentencias SQL.
- Usuarios de SQL demasiado privilegiados
Detección:
¡Ya sabemos dos cosas que son muy importantes para revisar y evitar un ataque de inyección SQL!
· El código ASP/ASPX
· Los derechos de usuarios de SQL
Al primero, hay que saber si nuestros sitios están o estaban bajo ataque. Por eso, tenemos que analizar los logs de IIS. Hay muchas herramientas de consultas disponibles en Internet por hacer esto, una es LogParser. Podemos ejecutar la siguiente:
LogParser -i:iisw3c -o:csv "SELECT * INTO suspicious.csv FROM ex*.log WHERE cs-uri-query LIKE '%CAST(%' or cs-uri-query LIKE '%dEcLaRe%'"
O puede descargar una herramienta que lo hace automáticamente: http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=WSUS&ReleaseId=13436
¡Si el log tiene datos, tenemos un problema!
En caso de inyección SQL que hemos visto últimamente, buscamos por el texto así:
DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x440045004300...7200%20AS%20NVARCHAR(4000));EXEC(@S);--
Verificamos si un <script> tag estaba inyectado en las tablas de la base de datos utilizado con el aplicativo de web.
Acción:
¡Es muy importante cerrar el acceso a nuestro aplicativo de web ahora mismo para proteger la gente quien lo visita!
Antes de abrirlo, tenemos que revisar el código ASP/ASPX y el usuario de SQL o contactamos el vendedor del aplicativo de web. El log contiene las páginas web que están utilizando para el ataque. Estas páginas son buenas para empezar de revisar el código. Presta atención que necesitamos revisar todas las páginas ASP/ASPX, no solo aquellas listadas en el log.
Hay métodos para filtrar inyección SQL utilizando palabras muy conocidas como CAST, DECLARE pero estos métodos solo son temporales y no es seguro que bloqueen todos.
Para más información: http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx
Puede encontrar enlaces de los sitios abajo que pueden ayudarle de corregir el código:
SLQ Injection, ASP.NET, ADO.NET
http://msdn.microsoft.com/en-us/library/bb671351.aspx
SQL Injection in ASP code (diferente que arriba!)
http://msdn.microsoft.com/en-us/library/cc676512.aspx
How SQL Injection works
http://msdn.microsoft.com/en-us/library/ms161953.aspx