SlideShare une entreprise Scribd logo
1  sur  3
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii1 2d
 
Notas clase
Notas claseNotas clase
Notas clase1 2d
 
Html,php
Html,phpHtml,php
Html,phpsoftyed
 
permisos de ejecucion el sql
permisos de ejecucion el sql permisos de ejecucion el sql
permisos de ejecucion el sql Majo Tapia
 

Tendances (9)

Transac sq ll
Transac sq llTransac sq ll
Transac sq ll
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
Notas clase
Notas claseNotas clase
Notas clase
 
Html,php
Html,phpHtml,php
Html,php
 
Admon PG 1
Admon PG 1Admon PG 1
Admon PG 1
 
permisos de ejecucion el sql
permisos de ejecucion el sql permisos de ejecucion el sql
permisos de ejecucion el sql
 
Tablas de comandos
Tablas de comandosTablas de comandos
Tablas de comandos
 
Herrera marcelo bdii_T7
Herrera marcelo bdii_T7Herrera marcelo bdii_T7
Herrera marcelo bdii_T7
 

Similaire à Sql injection

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0José Moreno
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii1 2d
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sqljhom123
 
Instalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsInstalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsDaniel Huerta Cruz
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Antonio Ortiz
 
Notas clase
Notas claseNotas clase
Notas clase1 2d
 
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)betabeers
 
Presentacionbetabeers prevencion ante_ ataques_xss
Presentacionbetabeers prevencion ante_ ataques_xssPresentacionbetabeers prevencion ante_ ataques_xss
Presentacionbetabeers prevencion ante_ ataques_xssJosé María Canto Ortiz
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASPalexav8
 
Como crear usuarios y asignar permisos en postgre sql blog de alevsk
Como crear usuarios y asignar permisos en postgre sql   blog de alevskComo crear usuarios y asignar permisos en postgre sql   blog de alevsk
Como crear usuarios y asignar permisos en postgre sql blog de alevskantoniorua1
 

Similaire à Sql injection (20)

Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
Guia herramientas de bd
Guia herramientas de bdGuia herramientas de bd
Guia herramientas de bd
 
Guía herramientas de BD PHP
Guía herramientas de BD PHPGuía herramientas de BD PHP
Guía herramientas de BD PHP
 
Seguridad En Programación
Seguridad En ProgramaciónSeguridad En Programación
Seguridad En Programación
 
JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
My sql
My sqlMy sql
My sql
 
Jdbc
JdbcJdbc
Jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Instalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windowsInstalación de sgbd en diferentes plataformas de windows
Instalación de sgbd en diferentes plataformas de windows
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
 
Notas clase
Notas claseNotas clase
Notas clase
 
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
 
Presentacionbetabeers prevencion ante_ ataques_xss
Presentacionbetabeers prevencion ante_ ataques_xssPresentacionbetabeers prevencion ante_ ataques_xss
Presentacionbetabeers prevencion ante_ ataques_xss
 
Tema 5
Tema 5Tema 5
Tema 5
 
Charla OWASP
Charla OWASPCharla OWASP
Charla OWASP
 
Inyecciones SQL
Inyecciones SQLInyecciones SQL
Inyecciones SQL
 
Como crear usuarios y asignar permisos en postgre sql blog de alevsk
Como crear usuarios y asignar permisos en postgre sql   blog de alevskComo crear usuarios y asignar permisos en postgre sql   blog de alevsk
Como crear usuarios y asignar permisos en postgre sql blog de alevsk
 

Plus de Mauro Gomez Mejia (20)

Delegation
DelegationDelegation
Delegation
 
Container
ContainerContainer
Container
 
Interface
InterfaceInterface
Interface
 
Encapsulamiento
EncapsulamientoEncapsulamiento
Encapsulamiento
 
Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)Polimorfismo (Clases Abstractas)
Polimorfismo (Clases Abstractas)
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
2011 horizon-report
2011 horizon-report2011 horizon-report
2011 horizon-report
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
My batis
My batisMy batis
My batis
 
Orm
OrmOrm
Orm
 
MVC
MVCMVC
MVC
 
2010 horizon-report
2010 horizon-report2010 horizon-report
2010 horizon-report
 
Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con Hibernate
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
Jmerlin php
Jmerlin phpJmerlin php
Jmerlin php
 
Comunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto ParaleloComunicacion Java Envio De Datos Al Puerto Paralelo
Comunicacion Java Envio De Datos Al Puerto Paralelo
 
Cuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden ImparCuadrados Mágicos De Orden Impar
Cuadrados Mágicos De Orden Impar
 
Redes De Computadores
Redes De ComputadoresRedes De Computadores
Redes De Computadores
 
Java Mail
Java MailJava Mail
Java Mail
 

Dernier

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 

Dernier (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

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