Personal information:

A Coruña, Galicia, Spain

miércoles, 10 de febrero de 2010

Expresiones regulares en SQL Injection (MySQL)

Hace tiempo, leí en un paper del famoso Milw0rm en el que OzX explicaba un método mediante el cual reducíamos un pelín las consultas necesarias para extraer información, usando nuestas queridas expresiones regulares, y como no lo he visto comentado en ningun sitio más, una lucecita se me encendió, y por ello estoy aquí, con la intención de explicarlo lo mejor posible.

La forma de construirlas es la siguiente:

[+] SELECT * FROM table WHERE field REGEXP 'expression';

Sencillo, no?
Bien, ahora la complejidad de las expresiones es igual al límite de tu imaginación, como siempre ;).
Para guiarnos un poco, en el lugar de la expresión (expression) podríamos colocar una sentencia como la siguiente:

'(user|pass|login)'

Y encontraría la información necesitada, de existir, que contenga en el campo especificado alguna de esas 3 palabras; como vemos, podemos usar operadores booleanos, pero tambien tenemos otros caracteres, pudiendo llegar a construir expresiones más retorcidas:

'(us[ue]|log[io]n|adm)'

Con esto, conseguimos (como bien explica OzX) algo parecido a la anterior, solo que esta vez mantenemos la raíz de la palabra sin variar, y variamos las demás letras, ampliando el abanico de cadenas a buscar (usuario,users,logon,etc...).

Esto podría ser aplicado para que, por ejemplo nos buscase las tablas que contengan columnas con nombres "sospechosos":

SELECT group_concat(table_name) FROM information_schema.columns WHERE column_name REGEXP '.*((us[ue]|log[io]n|adm)).*';

Devolvería todas las tablas formadas con al menos una columna que contenga en su nombre alguna de las cadenas buscadas.

Esto todo esta muy bien cuando lo introducimos en nuestra shell o gestor favorito de BBDD, pero como lo aplicamos a una inyeccion sql?
Pues, para inyectar estas consultas, tenemos que pasarlas a hexadecimal, quitandole las ', quedando el ejemplo anterior como sigue, explotando una supuesta vulnerabilidad:

news.php?idnew=-1'+UNION+SELECT+ 1,group_concat(table_name),3+FROM+information_schema.columns+
WHERE+table_name+REGEXP+0x2e2a282875735b75655d7c6c6f675b696f5d6e7c61646d29292e2a--

Y ahí queda!

-H4ppyH4ck1n9-

No hay comentarios:

Publicar un comentario