SlideShare una empresa de Scribd logo
SEGURIDAD




Los ataques de SQL Injection perduran en nuestros días debido a dos
 factores principales: la falta de concientización y el ingenio de quie-                                                            Autor: Ariel Liguori
            nes encuentran nuevas formas de explotación.                                                                            Analista en Seguridad Informática




    L
               as SQL Injection ocupan según             Exec master..xp_cmdshell Âdir c:Ê                 Custom Extended
               OWASP el puesto número dos                Además de esa SP podemos encontrar las si-        Procedures
               en cuanto a vulnerabilidades en           guientes:
               aplicaciones Web se refiere. Bási-                                                          En algunos motores de bases de datos es posi-
    camente se basan en la modificación malin-           SP de interacción con el registro:                ble encontrarse con SP que permiten el mane-
    tencionada de datos que serán comunicados            xp_regaddmultistring                              jo de la API de dicha aplicación, con esto es
    al motor de base de datos ocasionando con            xp_regdeletekey                                   posible la creación de nuevas SP que pueden
    esto la ejecución de código arbitrario. En este      xp_regdeletevalue                                 contener código malicioso. En particular en
    artículo explicaremos los métodos avanzados          xp_regenumkeys                                    este caso hacemos referencia al SP sp_addex-
    de explotación mediante la técnica de SQL In-        xp_regenumvalues                                  tendedproc que nos permitirá crear un nuevo
    jection y nos introduciremos en el concepto          xp_regread                                        SP en base a un DLL malicioso que le pasemos
    de ataques de Blind SQL Injection.                   xp_regremovemultistring                           como parámetro. Luego de la utilización del
                                                         xp_regwrite                                       mismo podremos eliminarlo con el SP sp_dro-
    Stored Procedures (SP)                                                                                 pextendedproc para borrar nuestro rastro del
    & Extended Stored                                    SP de interacción con los servicios:              sistema comprometido.
    Procedures                                           xp_servicecontrol : Permite al usuario la inte-
                                                         racción con los servicios del equipo victima.     OPENROWSET:
    Los Extended Stored Procedures (o procedi-                                                             Escalando privilegios
    mientos extendidos) son esencialmente DLLÊs          Otros SP comunes:
    compiladas que brindan al motor SQL la ca-           Xp_enumdsn: Lista los fuentes de datos            Es común encontrarse en entornos en los cua-
    pacidad de acceso a funciones externas. En los       ODBC disponibles en el Server.                    les el acceso a la DB se logrará con un usua-
    motores de bases de datos como MS SQL es             Xp_makecab: Permite al usuario la creación        rio con bajos/mínimos privilegios. En estos
    común encontrar por defecto instaladas estas         de un archivo comprimido de archivos a los        casos si el atacante puede ejecutar el coman-
    SP y es por ello necesario destacar entre las dis-   cuales pueda acceder el Server.                   do OPENROWSET podrá intentar una reau-
    ponibles a la SP xp_cmdshell. Esta SP permite        Xp_ntsec_enumdomains: Lista los dominios a        tenticación contra el Server y de este modo
    la ejecución de código arbitrario (siempre es-       los cuales el servidor tiene acceso.              mediante fuerza bruta logrará finalmente el
    taremos limitados a los permisos del usuario         Xp_terminate_process: Elimina el proceso ob-      acceso al mismo como root. Un ejemplo claro
    que ejecute la DB), por ejemplo:                     jetivo brindando el PID correspondiente.          de esto se observa en lo siguiente:



    |14| NEX IT SPECIALIST                                                                                                  WWW.REVISTANEX.COM
el caso de que el bit Â@bitÊ del byte Â@byteÊ en
Utilizando MSDASQL:                               http://test.dominio.com.ar/BlindTest.                el string Â@sÊ es igual a Â1Ê. De este modo po-
select * from OPENROWSET(ÂMSDASQLÊ,Ê              php?id=1 AND (SELECT Count(*) FROM                   dremos ir determinando bit a bit el contenido
DRIVER={SQL Server};SERVER=;uid=sa;pw             users) > 5;                                          de un campo que deseemos.
d=barÊ,Êselect @@versionÊ)
                                                  El resultado será verdadero si y solo si el nú-      A estas técnicas que se aprovechan de los re-
Utilizando SQLOLEDB:                              mero de registros de la tabla users es mayor a       tardos de tiempo para lograr la extracción de
select * from OPENROWSET(ÂSQLOLEDBÊ,Ê             5. Modificando estos datos podremos llegar a         datos de una DB se las conoce como Time Ba-
Ê;ÊsaÊ;ÊbarÊ,Êselect @@versionÊ)                  determinar la cantidad de registros correcta de      sed SQL Injection.
                                                  la tabla.
                                                                                                       La técnica demostrada por Chris Anley es apli-
Atacando a ciegas:                                Develando passwords                                  cable a motores de bases de datos MS SQL, no
Introducción a Blind SQL                          con BSQLi                                            obstante en otras DB deberemos emplear otros
Injection (BSQLi)                                                                                      métodos como ser: funciones Benchmark o
                                                  Mediante la función LENGHT y SUBSTRING               sleep en motores MySQL y el uso de la fun-
En ciertos entornos de aplicaciones Web pode-     podremos develar la contraseña realizando            ción PL/SQL DBMS_LOCK.SLEEP(time) en
mos encontrarnos ante una variante no fácil-      consultas del siguiente tipo:                        sistemas Oracle.
mente perceptible de SQL Injection, la Blind
SQL Injection. Esta técnica es similar al SQLi    http://test.dominio.com.ar/BlindTest.                Ejemplos de Time Based SQL Injections en
solo que se basa en respuestas del tipo verda-    php?id=1 AND (Select length(name) from               diferentes entornos:
dero/falso para llevar a cabo la explotación de   users where id=2) > 5
forma satisfactoria. Por ejemplo, supongamos                                                           *Oracle:
la siguiente URL:                                 El resultado aquí será verdadero si la longitud      http://test.dominio.com.ar/BlindTest.
                                                  del nombre de usuario es mayor a 5. Variando         php?id=1; begin if (condicion) then dbms_
http://test.dominio.com.ar/BlindTest.             este valor llegaremos a determinar la longitud       lock.sleep(5); end if; end;
php?id=1                                          exacta del username.

La cual nos devuelve una determinada pan-         http://test.dominio.com.ar/BlindTest.                *MySQL:
talla. Sin embargo probemos las siguientes        php?id=1 AND ascii(substring((SELECT pas-            http://test.dominio.com.ar/BlindTest.
variantes:                                        sword FROM users where id=1),1,1))=97;               php?id=1 and exists(select * from contrasena)
                                                                                                       and benchmark(5000000,md5(rand()))=0
http://test.dominio.com.ar/BlindTest.             Este resultado retornará verdadero si el primer
php?id=1 and 1=1                                  carácter del password del usuario cuyo id es 1       http://test.dominio.com.ar/BlindTest.
http://test.dominio.com.ar/BlindTest.             (generalmente el root) es la letra ÂaÊ (ASCII 97).   php?id=1 and exists(select * from contrasena)
php?id=1 and 1=0                                                                                       and sleep(5)
                                                  Técnicas Avanzadas de
Si en el primer caso recibimos como respues-      Blind SQL Injection
ta la misma página que la observada sin la                                                             Luego de estas aclaraciones una consulta esen-
adición de ningún parámetro podremos decir        Los primeros avances sobre esta técnica datan        cial surge: œQué realizar en aquellos sistemas
„en principio‰ que se ha ejecutado la inyec-      de Junio de 2002 de manos de Chris Anley en          que no poseen funciones o SP que nos garanti-
ción. Si en el segundo caso aparece un mensaje    su papper „(more) Advanced SQL Injection‰.           cen de modo inmediato el retardo de tiempo?
de error u otra página (por ejemplo la default    En esta obra Chris nos enseña la capacidad de        Aquí surge el concepto de Time Based SQL
URL) estaremos en condiciones de afirmar          realizar BSQLi sin utilizar los ataques basados      Injection with Heavy Queries (Inyecciones
que la sentencia es falsa (lo cual se observa     en respuestas verdadero/falso sino mediante          SQL basadas en retardos mediante el uso de
claramente ya que 1 es distinto a 0) y además     la incorporación de retardos de tiempo. Por          consultas pesadas).
que la variable id es susceptible a Blind SQL     ejemplo observemos dos claros ejemplos cita-
Injection. Con estos datos estaremos en condi-    dos por Chris:                                       Time Based SQL
ciones de ejecutar sentencias como las siguien-                                                        Injections with Heavy
tes para llevar a cabo un ataque:                 if (select user) = ÂsaÊ waitfor delay Â0:0:5Ê        Queries
http://test.dominio.com.ar/BlindTest.             Lo cual ocasionará un retardo de 5 segundos          En sistemas Access o DB2 no se cuentan con
php?id=1 AND (SELECT (Count(*)) FROM              si estamos conectados en la base de datos con        funciones o SP que remitan a retardos de
usuarios) -- Resultado ERROR.                     el user sa.                                          tiempo, asimismo es difícil encontrar sistemas
                                                                                                       Oracle con inyecciones PL/SQL y los sistemas
http://test.dominio.com.ar/BlindTest.             if (ascii(substring(@s, @byte, 1)) & ( power(2,      MS SQL y MySQL poseen restricciones en las
php?id=1 AND (SELECT (Count(*)) FROM              @bit))) > 0 waitfor delay Â0:0:5Ê                    funciones de Benchmarking y de retardos en
users) -- Resultado OK: La tabla correcta es                                                           general. Por todo esto es necesaria la intro-
la llamada users.                                 Aquí se producirá un retardo de 5 segundos en        ducción de consultas pesadas para ocasionar


|16| NEX IT SPECIALIST                                                                                                   WWW.REVISTANEX.COM
retardos en el Server y, gracias a esto, lograr   estamos en condiciones de analizar una Time        tablas para realizar el ataque:
la extracción de datos bajos las condiciones      Based SQL Injection:
descriptas en las Time Based SQL Injections.                                                         http://test.dominio.com.ar/mysql.aspx?id=1
Básicamente la ideología que se esconde de-       SELECT * from users WHERE cons_pesada              and exists (select * from passwords)and 300
trás de estos métodos está íntimamente rela-      AND cons_liviana                                   > (select count(*) from information_schema.
cionada con la forma en que las consultas son                                                        tables, information_schema.tables T1, infor-
procesadas por el motor de bases de datos. Ge-    En principio partamos de la base que pode-         mation_schema T2)
neralmente la optimización de queries se deja     mos formar la consulta liviana para que sea
en manos del DBA (DataBase Administrator)         verdadera (por ejemplo diciéndole que el va-       NOTA: Como ya se mencionó es posible reali-
o incluso del propio motor de base de datos.      lor ASCII de un campo es menor a 900) y            zar las consultas sobre cualquiera de las tablas
Sin embargo supongamos un caso simple en el       con esto ya determinado forzaremos a que en        de la db information_schema, las cuales son:
cual logramos la simplificación de una query      nuestra query se procesen las dos consultas,       tables, columns, schemata, statistics, user_pri-
a una consulta básica AND:                        además el tiempo de retardo que se apreciará       vileges, schema_privileges, column_privileges,
                                                  en la ejecución de la misma será el determina-     table_privileges, carácter_ser, collation, colla-
select field from db_table where cond1            do por la consulta pesada. Una vez que hemos       tion_character_set_applicability, table_cons-
AND cond2                                         registrado que el tiempo de ejecución de nues-     traints, key_column_usage, routines, views,
                                                  tra consulta pesada es apreciable podremos ir      triggers, profiling.
En esta consulta el tiempo de ejecución estará    recorriendo con distintos valores la consulta
ligado a los tiempos de cada condición cond1      liviana hasta obtener un resultado falso que       *Microsost SQL Server
y cond2. Supongamos que el tiempo de ejecu-       ocasionará que el tiempo de ejecución de la        En las bases de datos MS SQL Srv podremos
ción de la consulta uno „cons1‰ es de 2 segun-    query disminuya notablemente. Por ejemplo          acceder a tablas que también vienen por defecto
dos y el de la consulta dos es de 4 segundos.     podremos preguntar en cada query si el valor       comos ser sysusers, sysobjects o syscolumns.
Según la lógica el menor tiempo asociado a        del primer ascii de la contraseña es menor a
la ejecución de la consulta será el obtenido      X, y variaremos X desde 0 hasta 255, cuando        En general podremos realizar este tipo de ata-
en el caso de que la consulta uno sea falsa y     obtengamos un valor verdadero sabremos que         ques ante cualquier motor de base de datos,
además se ejecute primera, ya que en caso de      el ascii correspondiente será X-1.                 aunque no poseamos información acerca de
que la consulta sea procesada de „derecha a iz-                                                      cuales son sus tablas por defecto con métodos
quierda‰ el mínimo tiempo de ejecución será       Construyendo consultas                             ya repasados en éste y en el anterior artículo de
el propio de la consulta dos que como obser-      pesadas                                            la serie podremos detectar las tablas e inclusive
vamos es mayor al tiempo de ejecución de la                                                          mucha más información. Realizando un análisis
uno. En criterios como estos es donde entran      Una forma sencilla de construir consultas pe-      a las aplicaciones Web se detecta que es mayor la
en juego los métodos de optimización de cada      sadas es generarle a la base de datos una query    tendencia a detectar vulnerabilidades de Blind
motor y en particular jugará un rol principal     que precise interactuar con distintas tablas, de   SQL Injection, por lo cual es imprescindible
el know-how del desarrollador que según su        este modo se logrará que el tiempo en devol-       comprender cómo funciona y saber prevenirlo.
análisis deberá determinar (estadísticamente)     vernos todos los datos solicitados sea elevado y
cuál es la distribución más óptima de las con-    podremos aprovecharnos de esto para realizar       En el próximo artículo de esta serie analizare-
sultas que se ejecutarán.                         ataques de TB SQLi. A continuación se pueden       mos nuevos métodos de explotación de SQL In-
                                                  ver algunos casos típicos de consultas pesadas     jection, realizaremos un recorrido sobre algunas
¿Cómo utilizamos las                              para distintos motores de bases de datos:          aplicaciones para lograr explotarlo con éxito y
heavy queries para nues-                                                                             fundamentalmente analizaremos los counter-
tro provecho?                                     *Microsoft Access                                  measures necesarios para lograr mitigarlo.
                                                  En MS Access podemos encontrarnos por de-
Básicamente sabemos que en las técnicas de        fecto con las tablas MSysAccessObjects (en las
blind sql injection lo que haremos es pre-        versiones 97 y 2000) y con la tabla MSysAc-
guntar si el valor ASCII de un carácter de un     cessStorage (en las versiones 2003 y 2007).
campo que nosotros deseemos es mayor que                                                                   Links de Interés &
un determinado número (en general doy este        http://test.dominio.com.ar/msaccess.                     Referencias
ejemplo debido a que nos interesará saber la      aspx?id=1 and (SELECT count(*) from                      http://elladodelmal.blogspot.com
contraseña y el username, aunque también es       MSysAccessStorage t1, MSysAccessStorage t2,                Chema Alonso
posible detectar otra información como ser si     MSysAccessStorage t3, MSysAccessStorage t4,              (more) Advanced SQL Injection
una determinada tabla existe). Esa consulta la    MSysAccessStorage t5, MSysAccessStorage t6)                Chris Anley
denominaremos de momento como „consulta           > 0 and exists (select * from passwords)                 (Re) Playing with (Blind) SQL In-
liviana‰ ya que será relativamente sencillo ge-                                                            jection José Palazón & Chema
nerar otra consulta más pesada. No obstante       * MySQL                                                  Alonso
también será necesario lograr que esta consul-    En MySQL contamos (desde las versions 5.x)               Time Based Blind SQL Injection
ta pesada logre generar un retardo apreciable     con el conjunto de tablas de la base de datos            with Heavy Queries         Chema
para de este modo poder detectarlo por ejem-      de información information_schema, de este               Alonso
plo con una aplicación. Con esta teoría ya        modo podemos seleccionar cualquiera de sus


|18| NEX IT SPECIALIST                                                                                                  WWW.REVISTANEX.COM

Más contenido relacionado

PDF
Lozano william bdii_t7
PPTX
Prepared statement
PDF
Postgre sql y_replicacion_slony_p
DOCX
Base de datos_-_material_didactico
PDF
Doris aguagallo bdii_t7
PDF
PDF
Tenesaca jhonny bdii_t7
PDF
Dba PostgreSQL desde básico a avanzado parte2
Lozano william bdii_t7
Prepared statement
Postgre sql y_replicacion_slony_p
Base de datos_-_material_didactico
Doris aguagallo bdii_t7
Tenesaca jhonny bdii_t7
Dba PostgreSQL desde básico a avanzado parte2

La actualidad más candente (9)

PPTX
Transac sq ll
DOC
Replicacion con postgresql y slony
DOCX
Notas clase java ii
DOCX
Notas clase
DOCX
Html,php
PDF
Admon PG 1
PPTX
permisos de ejecucion el sql
DOCX
Tablas de comandos
PDF
Herrera marcelo bdii_T7
Transac sq ll
Replicacion con postgresql y slony
Notas clase java ii
Notas clase
Html,php
Admon PG 1
permisos de ejecucion el sql
Tablas de comandos
Herrera marcelo bdii_T7
Publicidad

Similar a Sql injection (20)

PDF
Charla OWASP
PDF
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
ODP
Seguridad Base de Datos sql injection v1.0
PPTX
Aprendiz unad
PPTX
Aprendiz unad
PDF
(In) seguridad web
PPTX
Mejores prácticas desarrollo de base de datos
PDF
All your data are belong to us - FIST Conference 2007
PPT
Presentacionbetabeers prevencion ante_ ataques_xss
PPT
Inyeccion sql
PDF
Ataques a-bases-de-datos
PDF
Inyección_sql
PDF
Inyecciones sql para todos
PDF
Introducción a las vulnerabilidades web
PPTX
Inyecciones sql para aprendices
PDF
Actividad No. 1.11: SQL Injection con sqlmap en Kali Linux
ODP
Curso basicoseguridadweb slideshare7
PDF
Ataques a-bases-de-datos
PPTX
Inyecciones SQL para Aprendices
PPT
Seguridad En Programación
Charla OWASP
Principales vulnerabilidades en Aplicaciones Web - Rediris 2008
Seguridad Base de Datos sql injection v1.0
Aprendiz unad
Aprendiz unad
(In) seguridad web
Mejores prácticas desarrollo de base de datos
All your data are belong to us - FIST Conference 2007
Presentacionbetabeers prevencion ante_ ataques_xss
Inyeccion sql
Ataques a-bases-de-datos
Inyección_sql
Inyecciones sql para todos
Introducción a las vulnerabilidades web
Inyecciones sql para aprendices
Actividad No. 1.11: SQL Injection con sqlmap en Kali Linux
Curso basicoseguridadweb slideshare7
Ataques a-bases-de-datos
Inyecciones SQL para Aprendices
Seguridad En Programación
Publicidad

Más de Mauro Gomez Mejia (20)

PDF
Delegation
PDF
PDF
PDF
Encapsulamiento
PDF
Polimorfismo (Clases Abstractas)
PDF
Polimorfismo
PDF
2011 horizon-report
PDF
Spring mvc
PDF
PDF
2010 horizon-report
PPSX
Persistencia de objetos con Hibernate
PDF
J M E R L I N P H P
PDF
Jquery para principianes
PDF
Jmerlin php
PDF
Comunicacion Java Envio De Datos Al Puerto Paralelo
PDF
Cuadrados Mágicos De Orden Impar
PDF
Redes De Computadores
PDF
Delegation
Encapsulamiento
Polimorfismo (Clases Abstractas)
Polimorfismo
2011 horizon-report
Spring mvc
2010 horizon-report
Persistencia de objetos con Hibernate
J M E R L I N P H P
Jquery para principianes
Jmerlin php
Comunicacion Java Envio De Datos Al Puerto Paralelo
Cuadrados Mágicos De Orden Impar
Redes De Computadores

Último (20)

PDF
Calidad desde el Docente y la mejora continua .pdf
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
Maste clas de estructura metálica y arquitectura
PDF
Estrategia de apoyo tecnología miguel angel solis
PDF
Diapositiva proyecto de vida, materia catedra
PDF
clase auditoria informatica 2025.........
PPTX
Propuesta BKP servidores con Acronis1.pptx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPT
Que son las redes de computadores y sus partes
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Calidad desde el Docente y la mejora continua .pdf
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Maste clas de estructura metálica y arquitectura
Estrategia de apoyo tecnología miguel angel solis
Diapositiva proyecto de vida, materia catedra
clase auditoria informatica 2025.........
Propuesta BKP servidores con Acronis1.pptx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Zarate Quispe Alex aldayir aplicaciones de internet .docx
Que son las redes de computadores y sus partes
Estrategia de apoyo tecnología grado 9-3
Plantilla para Diseño de Narrativas Transmedia.pdf
introduccion a las_web en el 2025_mejoras.ppt
Power Point Nicolás Carrasco (disertación Roblox).pptx
Presentación PASANTIAS AuditorioOO..pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...

Sql injection

  • 1. SEGURIDAD Los ataques de SQL Injection perduran en nuestros días debido a dos factores principales: la falta de concientización y el ingenio de quie- Autor: Ariel Liguori nes encuentran nuevas formas de explotación. Analista en Seguridad Informática L as SQL Injection ocupan según Exec master..xp_cmdshell Âdir c:Ê Custom Extended OWASP el puesto número dos Además de esa SP podemos encontrar las si- Procedures en cuanto a vulnerabilidades en guientes: aplicaciones Web se refiere. Bási- En algunos motores de bases de datos es posi- camente se basan en la modificación malin- SP de interacción con el registro: ble encontrarse con SP que permiten el mane- tencionada de datos que serán comunicados xp_regaddmultistring jo de la API de dicha aplicación, con esto es al motor de base de datos ocasionando con xp_regdeletekey posible la creación de nuevas SP que pueden esto la ejecución de código arbitrario. En este xp_regdeletevalue contener código malicioso. En particular en artículo explicaremos los métodos avanzados xp_regenumkeys este caso hacemos referencia al SP sp_addex- de explotación mediante la técnica de SQL In- xp_regenumvalues tendedproc que nos permitirá crear un nuevo jection y nos introduciremos en el concepto xp_regread SP en base a un DLL malicioso que le pasemos de ataques de Blind SQL Injection. xp_regremovemultistring como parámetro. Luego de la utilización del xp_regwrite mismo podremos eliminarlo con el SP sp_dro- Stored Procedures (SP) pextendedproc para borrar nuestro rastro del & Extended Stored SP de interacción con los servicios: sistema comprometido. Procedures xp_servicecontrol : Permite al usuario la inte- racción con los servicios del equipo victima. OPENROWSET: Los Extended Stored Procedures (o procedi- Escalando privilegios mientos extendidos) son esencialmente DLLÊs Otros SP comunes: compiladas que brindan al motor SQL la ca- Xp_enumdsn: Lista los fuentes de datos Es común encontrarse en entornos en los cua- pacidad de acceso a funciones externas. En los ODBC disponibles en el Server. les el acceso a la DB se logrará con un usua- motores de bases de datos como MS SQL es Xp_makecab: Permite al usuario la creación rio con bajos/mínimos privilegios. En estos común encontrar por defecto instaladas estas de un archivo comprimido de archivos a los casos si el atacante puede ejecutar el coman- SP y es por ello necesario destacar entre las dis- cuales pueda acceder el Server. do OPENROWSET podrá intentar una reau- ponibles a la SP xp_cmdshell. Esta SP permite Xp_ntsec_enumdomains: Lista los dominios a tenticación contra el Server y de este modo la ejecución de código arbitrario (siempre es- los cuales el servidor tiene acceso. mediante fuerza bruta logrará finalmente el taremos limitados a los permisos del usuario Xp_terminate_process: Elimina el proceso ob- acceso al mismo como root. Un ejemplo claro que ejecute la DB), por ejemplo: jetivo brindando el PID correspondiente. de esto se observa en lo siguiente: |14| NEX IT SPECIALIST WWW.REVISTANEX.COM
  • 2. el caso de que el bit Â@bitÊ del byte Â@byteÊ en Utilizando MSDASQL: http://test.dominio.com.ar/BlindTest. el string Â@sÊ es igual a Â1Ê. De este modo po- select * from OPENROWSET(ÂMSDASQLÊ,Ê php?id=1 AND (SELECT Count(*) FROM dremos ir determinando bit a bit el contenido DRIVER={SQL Server};SERVER=;uid=sa;pw users) > 5; de un campo que deseemos. d=barÊ,Êselect @@versionÊ) El resultado será verdadero si y solo si el nú- A estas técnicas que se aprovechan de los re- Utilizando SQLOLEDB: mero de registros de la tabla users es mayor a tardos de tiempo para lograr la extracción de select * from OPENROWSET(ÂSQLOLEDBÊ,Ê 5. Modificando estos datos podremos llegar a datos de una DB se las conoce como Time Ba- Ê;ÊsaÊ;ÊbarÊ,Êselect @@versionÊ) determinar la cantidad de registros correcta de sed SQL Injection. la tabla. La técnica demostrada por Chris Anley es apli- Atacando a ciegas: Develando passwords cable a motores de bases de datos MS SQL, no Introducción a Blind SQL con BSQLi obstante en otras DB deberemos emplear otros Injection (BSQLi) métodos como ser: funciones Benchmark o Mediante la función LENGHT y SUBSTRING sleep en motores MySQL y el uso de la fun- En ciertos entornos de aplicaciones Web pode- podremos develar la contraseña realizando ción PL/SQL DBMS_LOCK.SLEEP(time) en mos encontrarnos ante una variante no fácil- consultas del siguiente tipo: sistemas Oracle. mente perceptible de SQL Injection, la Blind SQL Injection. Esta técnica es similar al SQLi http://test.dominio.com.ar/BlindTest. Ejemplos de Time Based SQL Injections en solo que se basa en respuestas del tipo verda- php?id=1 AND (Select length(name) from diferentes entornos: dero/falso para llevar a cabo la explotación de users where id=2) > 5 forma satisfactoria. Por ejemplo, supongamos *Oracle: la siguiente URL: El resultado aquí será verdadero si la longitud http://test.dominio.com.ar/BlindTest. del nombre de usuario es mayor a 5. Variando php?id=1; begin if (condicion) then dbms_ http://test.dominio.com.ar/BlindTest. este valor llegaremos a determinar la longitud lock.sleep(5); end if; end; php?id=1 exacta del username. La cual nos devuelve una determinada pan- http://test.dominio.com.ar/BlindTest. *MySQL: talla. Sin embargo probemos las siguientes php?id=1 AND ascii(substring((SELECT pas- http://test.dominio.com.ar/BlindTest. variantes: sword FROM users where id=1),1,1))=97; php?id=1 and exists(select * from contrasena) and benchmark(5000000,md5(rand()))=0 http://test.dominio.com.ar/BlindTest. Este resultado retornará verdadero si el primer php?id=1 and 1=1 carácter del password del usuario cuyo id es 1 http://test.dominio.com.ar/BlindTest. http://test.dominio.com.ar/BlindTest. (generalmente el root) es la letra ÂaÊ (ASCII 97). php?id=1 and exists(select * from contrasena) php?id=1 and 1=0 and sleep(5) Técnicas Avanzadas de Si en el primer caso recibimos como respues- Blind SQL Injection ta la misma página que la observada sin la Luego de estas aclaraciones una consulta esen- adición de ningún parámetro podremos decir Los primeros avances sobre esta técnica datan cial surge: œQué realizar en aquellos sistemas „en principio‰ que se ha ejecutado la inyec- de Junio de 2002 de manos de Chris Anley en que no poseen funciones o SP que nos garanti- ción. Si en el segundo caso aparece un mensaje su papper „(more) Advanced SQL Injection‰. cen de modo inmediato el retardo de tiempo? de error u otra página (por ejemplo la default En esta obra Chris nos enseña la capacidad de Aquí surge el concepto de Time Based SQL URL) estaremos en condiciones de afirmar realizar BSQLi sin utilizar los ataques basados Injection with Heavy Queries (Inyecciones que la sentencia es falsa (lo cual se observa en respuestas verdadero/falso sino mediante SQL basadas en retardos mediante el uso de claramente ya que 1 es distinto a 0) y además la incorporación de retardos de tiempo. Por consultas pesadas). que la variable id es susceptible a Blind SQL ejemplo observemos dos claros ejemplos cita- Injection. Con estos datos estaremos en condi- dos por Chris: Time Based SQL ciones de ejecutar sentencias como las siguien- Injections with Heavy tes para llevar a cabo un ataque: if (select user) = ÂsaÊ waitfor delay Â0:0:5Ê Queries http://test.dominio.com.ar/BlindTest. Lo cual ocasionará un retardo de 5 segundos En sistemas Access o DB2 no se cuentan con php?id=1 AND (SELECT (Count(*)) FROM si estamos conectados en la base de datos con funciones o SP que remitan a retardos de usuarios) -- Resultado ERROR. el user sa. tiempo, asimismo es difícil encontrar sistemas Oracle con inyecciones PL/SQL y los sistemas http://test.dominio.com.ar/BlindTest. if (ascii(substring(@s, @byte, 1)) & ( power(2, MS SQL y MySQL poseen restricciones en las php?id=1 AND (SELECT (Count(*)) FROM @bit))) > 0 waitfor delay Â0:0:5Ê funciones de Benchmarking y de retardos en users) -- Resultado OK: La tabla correcta es general. Por todo esto es necesaria la intro- la llamada users. Aquí se producirá un retardo de 5 segundos en ducción de consultas pesadas para ocasionar |16| NEX IT SPECIALIST WWW.REVISTANEX.COM
  • 3. retardos en el Server y, gracias a esto, lograr estamos en condiciones de analizar una Time tablas para realizar el ataque: la extracción de datos bajos las condiciones Based SQL Injection: descriptas en las Time Based SQL Injections. http://test.dominio.com.ar/mysql.aspx?id=1 Básicamente la ideología que se esconde de- SELECT * from users WHERE cons_pesada and exists (select * from passwords)and 300 trás de estos métodos está íntimamente rela- AND cons_liviana > (select count(*) from information_schema. cionada con la forma en que las consultas son tables, information_schema.tables T1, infor- procesadas por el motor de bases de datos. Ge- En principio partamos de la base que pode- mation_schema T2) neralmente la optimización de queries se deja mos formar la consulta liviana para que sea en manos del DBA (DataBase Administrator) verdadera (por ejemplo diciéndole que el va- NOTA: Como ya se mencionó es posible reali- o incluso del propio motor de base de datos. lor ASCII de un campo es menor a 900) y zar las consultas sobre cualquiera de las tablas Sin embargo supongamos un caso simple en el con esto ya determinado forzaremos a que en de la db information_schema, las cuales son: cual logramos la simplificación de una query nuestra query se procesen las dos consultas, tables, columns, schemata, statistics, user_pri- a una consulta básica AND: además el tiempo de retardo que se apreciará vileges, schema_privileges, column_privileges, en la ejecución de la misma será el determina- table_privileges, carácter_ser, collation, colla- select field from db_table where cond1 do por la consulta pesada. Una vez que hemos tion_character_set_applicability, table_cons- AND cond2 registrado que el tiempo de ejecución de nues- traints, key_column_usage, routines, views, tra consulta pesada es apreciable podremos ir triggers, profiling. En esta consulta el tiempo de ejecución estará recorriendo con distintos valores la consulta ligado a los tiempos de cada condición cond1 liviana hasta obtener un resultado falso que *Microsost SQL Server y cond2. Supongamos que el tiempo de ejecu- ocasionará que el tiempo de ejecución de la En las bases de datos MS SQL Srv podremos ción de la consulta uno „cons1‰ es de 2 segun- query disminuya notablemente. Por ejemplo acceder a tablas que también vienen por defecto dos y el de la consulta dos es de 4 segundos. podremos preguntar en cada query si el valor comos ser sysusers, sysobjects o syscolumns. Según la lógica el menor tiempo asociado a del primer ascii de la contraseña es menor a la ejecución de la consulta será el obtenido X, y variaremos X desde 0 hasta 255, cuando En general podremos realizar este tipo de ata- en el caso de que la consulta uno sea falsa y obtengamos un valor verdadero sabremos que ques ante cualquier motor de base de datos, además se ejecute primera, ya que en caso de el ascii correspondiente será X-1. aunque no poseamos información acerca de que la consulta sea procesada de „derecha a iz- cuales son sus tablas por defecto con métodos quierda‰ el mínimo tiempo de ejecución será Construyendo consultas ya repasados en éste y en el anterior artículo de el propio de la consulta dos que como obser- pesadas la serie podremos detectar las tablas e inclusive vamos es mayor al tiempo de ejecución de la mucha más información. Realizando un análisis uno. En criterios como estos es donde entran Una forma sencilla de construir consultas pe- a las aplicaciones Web se detecta que es mayor la en juego los métodos de optimización de cada sadas es generarle a la base de datos una query tendencia a detectar vulnerabilidades de Blind motor y en particular jugará un rol principal que precise interactuar con distintas tablas, de SQL Injection, por lo cual es imprescindible el know-how del desarrollador que según su este modo se logrará que el tiempo en devol- comprender cómo funciona y saber prevenirlo. análisis deberá determinar (estadísticamente) vernos todos los datos solicitados sea elevado y cuál es la distribución más óptima de las con- podremos aprovecharnos de esto para realizar En el próximo artículo de esta serie analizare- sultas que se ejecutarán. ataques de TB SQLi. A continuación se pueden mos nuevos métodos de explotación de SQL In- ver algunos casos típicos de consultas pesadas jection, realizaremos un recorrido sobre algunas ¿Cómo utilizamos las para distintos motores de bases de datos: aplicaciones para lograr explotarlo con éxito y heavy queries para nues- fundamentalmente analizaremos los counter- tro provecho? *Microsoft Access measures necesarios para lograr mitigarlo. En MS Access podemos encontrarnos por de- Básicamente sabemos que en las técnicas de fecto con las tablas MSysAccessObjects (en las blind sql injection lo que haremos es pre- versiones 97 y 2000) y con la tabla MSysAc- guntar si el valor ASCII de un carácter de un cessStorage (en las versiones 2003 y 2007). campo que nosotros deseemos es mayor que Links de Interés & un determinado número (en general doy este http://test.dominio.com.ar/msaccess. Referencias ejemplo debido a que nos interesará saber la aspx?id=1 and (SELECT count(*) from http://elladodelmal.blogspot.com contraseña y el username, aunque también es MSysAccessStorage t1, MSysAccessStorage t2, Chema Alonso posible detectar otra información como ser si MSysAccessStorage t3, MSysAccessStorage t4, (more) Advanced SQL Injection una determinada tabla existe). Esa consulta la MSysAccessStorage t5, MSysAccessStorage t6) Chris Anley denominaremos de momento como „consulta > 0 and exists (select * from passwords) (Re) Playing with (Blind) SQL In- liviana‰ ya que será relativamente sencillo ge- jection José Palazón & Chema nerar otra consulta más pesada. No obstante * MySQL Alonso también será necesario lograr que esta consul- En MySQL contamos (desde las versions 5.x) Time Based Blind SQL Injection ta pesada logre generar un retardo apreciable con el conjunto de tablas de la base de datos with Heavy Queries Chema para de este modo poder detectarlo por ejem- de información information_schema, de este Alonso plo con una aplicación. Con esta teoría ya modo podemos seleccionar cualquiera de sus |18| NEX IT SPECIALIST WWW.REVISTANEX.COM