Remote File Downloading (RFD) En MySQL
Ciertas veces cuando estamos auditando la base de datos de un servidor web, podemos notar que no encontramos mucha información (solo en algunos casos) solo acerca de almacenamiento y logs de usuarios o secciones del servidor, esto es debido a que muchos de los programadores almacenan y registran datos en ficheros o archivos locales del servidor web tales como la conexión al MySQL, datos generales acerca del funcionamiento de procesos en páginas del sitio, etc.
Para ello, existen varios métodos para la extracción de información en ficheros, pero en está ocasión veremos algo acerca de "RFD" o "Remote file downloading" lo cúal es útil para extraer la source de archivos, en dónde, extraeremos la información mediante funciones de gestores de bases de datos tales como MySQL, Oracle, etc.
1.- ¿Qué es RFD?
RFD vendría siendo un proceso mediante el cúal un atacante sería capaz de descargar ficheros o sources de archivos que se encuentran en un servidor web, tales como la index/página principal, página de contactos, o hasta ficheros con información que puedan corromper toda la seguridad del sitio web.
Un método para ejecutar un proceso de RFD sería mediante gestores de bases de datos, tales como MySQL o oracle, en la que usamos funciones para leer o descargar archivos del servidor web. Pero en este caso, lo veremos con MySQL ya que no estoy muy especializado que se diga con otros gestores.
- MySQL:
En MySQL existe una función la cúal permite el contenido o source de un archivo en un servidor web, pero para poder ejecutar la función es necesario que el usuario MySQL tenga un cierto privilegio, llamado "FILE".
La función se llama "load_file()", por lo tanto, la debemos ingresar en la columna vulnerable, por ejemplo (Union based):
UB (Union based):
"UNION SELECT 1,load_file(0xnombredearchivohex),3,4,5,6 #".
Ese se ejecuta en una SQLi de tipo Union Based.
Blind Boolean Based:
En una Blind Boolean Based, como sabemos, obtenemos los resultados basándonos en valores booleanos, ya sea "true or false" o "verdadero y falso". Por lo tanto, obtendremos uno de los dos resultados.
"and ascii(substring(load_file(0xarchivoenhexadecimal), 1,1)=97"
En este caso, le estoy preguntando al servidor si el primer carácter de la source del archivo codificado en hexadecimal comienza con la letra "a", Este me respondera con un valor true or false.
Autor: M5f3r0