jueves, febrero 12, 2009

Serialized SQL Injection: La previa

Hace ya unos meses, justo cuando iba a enviar el CFP para la ShmooCon 2009, Dani Kachakil me habló de una técnica que se le había ocurrido para extraer muchos datos en un sólo campo en bases de datos SQL Server utilizando la sintaxis For XML.

La idea es realizar una inyección con UNION en uno de los campos calzarle toda una consulta con datos serializados en XML, algo así como:

http://www.server.com/app.ppp?id=1 union select 1,2,3,(select * from sysusers for xml raw)

La idea molaba mucho, así que Dani y yo decidimos ponerla en el guión de la ShmooCon para presentarla añadiendo algo de trabajo. El trabajo que hicimos fue aplicar la misma idéa, es decir, Serializar en XML para otras dos bases de datos, es decir, para MySQL y para Oracle.

Para MySQL Palako decidió utilizar Concat y Group_concat y construir una "black and green tool" que más tarde migró a su versión para Mac en Cocoa. Para Oracle Alex decidió utilizar XMLForest, XMLElement y SYS_XMLAgg.

El día antes de que dieramos la charla Dani envió el paper a bugtrag dónde le dijeron que ya alguna gente conocía esto incluso Alexander Kornbrust comentó que él hacía algo parecido en oracle para extraer muchos datos en un mensaje de error simple.

or 1= utl_inaddr.get_host_name((select xmltransform(sys_xmlagg(sys_xmlgen(username)),xmltype(’< ?xml version=”1.0″?> ;
‘)).getstringval() listagg from all_users))–

Warning: ociexecute(): OCIStmtExecute: ORA-29257: host CUSTCOM_PROD;WEBTOOL;WEBDB;NELLDB;ERDB;B2B;BI;PM;SH;IX;OE;HR;SCOTT;MGMT_VIEW;MDDATA;SYSMAN;MDSYS;SI_INFORMTN_SCHEMA;ORDPLUGINS;ORDSYS;OLAPSYS;ANONYMOUS;XDB;CTXSYS;EXFSYS;WMSYS;DBSNMP;TSMSYS;DIP;OUTLN;SYSTEM;SYS; unknown ORA-06512: at “SYS.UTL_INADDR”, line 4 ORA-06512: at “SYS.UTL_INADDR”, line 35


Nosotros lo contamos de esta forma:


Al final, entre el paper de Dani, la respuesta de Alexander, la presentación que hicimos en la ShmooCon, la herramienta de Dani para SQL Server, el libro que publica Alexander en breve sobre SQL Injection, la black and green tool y la de Cocoa que está acabando Palako y la POC que hicimos nosotros para los tres motores de bases de datos, parece que el Serialized SQL Injection se ha puesto muy de moda estos días.

Saludos Malignos!

6 comentarios:

nicou dijo...

It always boils down to the one golden rule: sanitize input, doesn't it?

Anónimo dijo...

yes we can!
(me imagino la escena... X-D)

enhorabuena, una presentación muy buena, un completo recorrido por las principales técnicas de SQL-Inj.

digna de conservar, tanto como para bajársela, pero... no está activada la opción de descarga.

podría activarse? ;)

Anónimo dijo...

joder, precisamente anoche pensaba en cómo podría devolver toda una serie de datos en un solo campo en oracle.
bendita serialización :_

muy buena la presentación por cierto, sería un buen cheat sheet para tener a mano siempre :D

Anónimo dijo...

Que bueno, ya tenía ganas de ver la inyección de "The doctor", muy ingenioso.

Sólo hay una cosa que no entiendo, ¿Qué coño pinta Raul en esto? :-)

P.D.: ¿Vais a liberar la FOCA después de la Black Hat?

rehizner dijo...

miguel, con un addon de firefox se pueden descargar esas presentaciones.

ramado dijo...

Excepcional, solo le veo un problema, el resultado de la consulta estará condicionado al tamaño de la variable del CGI que recoja la consulta, ya que al final el resultado del Transact debe albergarse en una variable String con un tamaño limitado. En este caso , ¿cómo limitas este tamaño de los resultados para que no "casque" y muestre la info requerida?

Saludos.

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares