En auditorías donde nos encontramos ante bases de
datos NOSQL como puede ser Mongo DB uno de los problemas con los que nos
solemos encontrar al igual que con bases de datos SQL es el filtrado de
los parámetros enviados, este filtrado con la idea de combatir
inyecciones se suele centrar en el remplazo o escapado de caracteres
como las comillas simples o las dobles y las backslash, pero como
veremos en este artículo a veces cuando nos encontramos ante ciertas
situaciones es posible sin necesidad de escapar los caracteres entre los
que se encuentra enjaulado el parámetro existe posibilidad de obtener
todos los resultados de una colección.
En el
ejemplo siguiente, si se estuviesen filtrando caracteres como las
comillas simples o las dobles y las backslash no podríamos inyectar otra
instrucción
{ "ip" : " Parámetro_enviado_por_GET "}
Sin
embargo si nos encontrásemos con un escenario como el siguiente que aun
no siendo tan común es posible, no sería necesario escapar los
caracteres anteriormente mencionados para poder armar una buena en la
auditoría por ejemplo listando todos los resultados de la colección.
{ "ip" : { $regex: ' Parámetro_enviado_por_GET ', $options: 'i' }}
Y
es que como veremos a continuación, basta con añadir dos caracteres que
raramente son tenidos en cuenta a la hora de filtrar los datos de
entrada a la aplicación
Así
de sencillo dos puntos o cualquier otro carácter y un asterisco y como
se aprecia nos devuelven todos los resultados de la colección, en este
caso 50, así que ya sabéis chavales añadid un caracter cualquiera y un
asterisco a vuestros diccionarios de inyecciones que os pueden dar una
grata sorpresa en vuestras auditorías, a mí me la dio, ya que me
devolvieron todos los usuarios y sus datos de la colección ordenaditos
en una tabla, que más se puede pedir.
Fuente: http://code-disaster.blogspot.com/2014/09/tip-para-inyecciones-en-mongo-db.html
Documentación de apoyo: http://whk.elhacker.net/index.php?topic=2863.0
No hay comentarios:
Publicar un comentario