SEGURIDAD




Los ataques de SQL Injection perduran en nuestros días debido a dos
 factores principales: la falta de conci...
el caso de que el bit Â@bitÊ del byte Â@byteÊ en
Utilizando MSDASQL:                               http://test.dominio.com...
retardos en el Server y, gracias a esto, lograr   estamos en condiciones de analizar una Time        tablas para realizar ...
Upcoming SlideShare
Loading in …5
×

Sql injection

0 views

Published on

Sql injection

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
0
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
75
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sql injection

  1. 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. 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. 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

×