Posts Tagged ‘mysql’
Ofuscando ataques SQLi
Hoy repasaremos algunas técnicas de ofuscación de ataques. ¿Para qué es necesario ofuscar los ataques? En caso de filtrado, IDSs o WAFS puede ser la única manera de realizar con éxito una intrusión. Adicionalmente con estas técnicas dificultamos el análisis de las actuaciones a posteriori, ya que los logs serán más trabajosos de seguir.
Repasaremos brevemente algunas de las técnicas más utilizadas en aplicativos web, centrándonos en ataques de tipo SQLi.
+ Aprovechando case sensitive
El filtrado más rudimentario es aquel basado en los caracteres utilizados. Normalmente las bases de datos son case-insensitive por lo que el resultado de las consultas, en el caso particular de ataques SQLi, no se verá afectado:
Payload normal: ' or es_admin=1 --
Payload ofuscado: ' oR eS_aDmIn=1 --
Parece muy simple y tonto, pero esta técnica aún funciona en determinados sitios.
+ Aprovechando comentarios inline
En algunas ocasiones los filtros están basados en una sucesión de “or” (|| en el código) con los tags de la lista negra comparados, por limpieza de código el desarrollador añade un espacio entre estas sentencias sin darse cuenta de que ese espacio compromete la seguridad de su filtro. Vemos un estracto del código de filtrado:
stristr($variable, 'INSERT') || stristr($variable, 'UNION') || .......
Gracias a los comentarios inline es posible evadir este filtrado, lo vemos a continuación:
Payload normal: ' or es_admin=1 --
Payload ofuscado: '/**/or/**/es_admin=1/**/--
Notese que al introducir comentarios inline nos evitamos tener que utilizar espacios en la sentencia.
+ Aprovechando ejecución dinámica de consultas
La ejecución dinámica de consultas es una característica de las BBDD que las permite recibir un string que contiene la consulta dentro de una función de la base de datos que ejecuta dicha consulta. Leído así uno no se entera de nada. La explicación es más simple, la base de datos recibe un string que aparentemente no es una consulta, pero que en ejecución se “transforma” en consulta.
Con un ejemplo mejor, pensemos en ORACLE, si introducimos la siguiente sentencía:
La ejecución dinámica de consultas es una característica de las BBDD que las permite recibir un string que contiene la consulta dentro de una función de la base de datos que ejecuta dicha consulta. Leído así uno no se entera de nada. La explicación es más simple, la base de datos recibe un string que aparentemente no es una consulta, pero que en ejecución se “transforma” en consulta.
Con un ejemplo mejor, pensemos en ORACLE, si introducimos la siguiente sentencía:
'IN'||'SERT'
Es un string que no contiene una consulta, es al ejecutarse dinámicamente cuando la base de datos realiza la concatenación que tiene como resultado una consulta. Como ya imaginaréis esta funcionalidad se utiliza para evadir filtros.
En MySQL: 'IN' 'SERT'
En MS-SQL: 'IN'+'SERT
‘Otra variante muy utilizada es el uso de la función CHAR. Esta función recibe un número y en ejecucion se “transforma” en el caracter ASCII correspondiente a dicha tabla, por ejemplo:
CHAR(73)+CHAR(78)+CHAR(83)+CHAR(69)+CHAR(82)+CHAR(84)
Equivale a INSERT. Hay que tener en cuenta que en ORACLE esta función se invoca con CHR en lugar de CHAR. Por otro lado esta es una de las muchas funciones que pueden utilizarse, hay muchas (SUBSTR, TRANSLATE, etc)
+ Aprovechando URL Encoding
Es uno de los métodos más conocidos, hay muchas herramientas automáticas que nos permiten traducir nuestras consultas a encoding URL, UTF-8, etc, dejo algunos enlaces útiles:
http://www.w3schools.com/TAGS/ref_urlencode.asp
https://www.owasp.org/index.php/Category:OWASP_CAL9000_Project
https://addons.mozilla.org/es-ES/firefox/addon/hackbar/
https://www.owasp.org/index.php/Category:OWASP_CAL9000_Project
https://addons.mozilla.org/es-ES/firefox/addon/hackbar/
+ Aprovechando Null Bytes
Esta técnica está enfocada a evadir WAFS. Los firewalls de aplicación tienden a estar programados en lenguajes nativos como C o C++. Es por ello que el uso de Null Bytes puede permitirnos evadir dichos dispositivos.
Para una definición formal de este tipo de ataques recomiendo la lectura de las siguientes referencias:
Esta técnica está enfocada a evadir WAFS. Los firewalls de aplicación tienden a estar programados en lenguajes nativos como C o C++. Es por ello que el uso de Null Bytes puede permitirnos evadir dichos dispositivos.
Para una definición formal de este tipo de ataques recomiendo la lectura de las siguientes referencias:
http://projects.webappsec.org/w/page/13246949/Null-Byte-Injection
http://hakipedia.com/index.php/Poison_Null_Byte
http://hakipedia.com/index.php/Poison_Null_Byte
A continuación un ejemplo de este tipo de ofuscación:
Payload normal: ' or es_admin=1 --
Payload ofuscado: ' or es_admin=1 --
+ Aprovechando anidación de expresiones
Algunos WAFS y filtros leen de izquierda a derecha y cuando encuentran una conincidencia con la lista negra la eliminan. El problema es cuando no lo realizan recursivamente, y podemos aprovecharnos de ello, veremos cómo:
Algunos WAFS y filtros leen de izquierda a derecha y cuando encuentran una conincidencia con la lista negra la eliminan. El problema es cuando no lo realizan recursivamente, y podemos aprovecharnos de ello, veremos cómo:
Payload normal: INSERT
Payload ofuscado: ININSERTSERT
Un WAF o filtro con este problema eliminaria el tag INSERT, dejando el IN que hay delante y el SERT que hay detrás juntos, formando para nuestra satisfacción una sentencia INSERT