MySQL File priv to SSRF/RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Este es un resumen de las técnicas de MySQL/MariaDB/Percona de https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/.
En la exploración de la exfiltración de datos SQL Out of Band, la función LOAD_FILE()
se emplea comúnmente para iniciar solicitudes de red. Sin embargo, esta función está limitada por el sistema operativo en el que opera y las configuraciones de inicio de la base de datos.
La variable global secure_file_priv
, si no está configurada, por defecto es /var/lib/mysql-files/
, limitando el acceso a archivos a este directorio a menos que se establezca como una cadena vacía (""
). Este ajuste requiere modificaciones en el archivo de configuración de la base de datos o en los parámetros de inicio.
Dado que secure_file_priv
está deshabilitado (""
), y asumiendo que se otorgan los permisos necesarios de archivo y file_priv
, se pueden leer archivos fuera del directorio designado. Sin embargo, la capacidad de estas funciones para realizar llamadas de red depende en gran medida del sistema operativo. En sistemas Windows, las llamadas de red a rutas UNC son factibles debido a la comprensión de las convenciones de nomenclatura UNC por parte del sistema operativo, lo que puede llevar a la exfiltración de hashes NTLMv2.
Este método SSRF está limitado al puerto TCP 445 y no permite la modificación del número de puerto, aunque se puede utilizar para acceder a recursos compartidos con plenos privilegios de lectura y, como se demostró en investigaciones anteriores, para robar hashes para una explotación posterior.
Las bases de datos MySQL ofrecen el uso de Funciones Definidas por el Usuario (UDF) a partir de archivos de bibliotecas externas. Si estas bibliotecas son accesibles dentro de directorios específicos o del $PATH
del sistema, se pueden invocar desde MySQL.
Esta técnica permite la ejecución de solicitudes de red/HTTP a través de una UDF, siempre que se cumplan varias condiciones, incluyendo acceso de escritura al @@plugin_dir
, file_priv
configurado en Y
, y secure_file_priv
deshabilitado.
Por ejemplo, la biblioteca lib_mysqludf_sys
u otras bibliotecas UDF que permiten solicitudes HTTP pueden ser cargadas para realizar SSRF. Las bibliotecas deben ser transferidas al servidor, lo que se puede lograr mediante la codificación en hex o base64 del contenido de la biblioteca y luego escribiéndolo en el directorio apropiado.
El proceso varía si el @@plugin_dir
no es escribible, especialmente para versiones de MySQL superiores a v5.0.67
. En tales casos, se deben utilizar rutas alternativas que sean escribibles.
La automatización de estos procesos puede ser facilitada por herramientas como SQLMap, que soporta inyección de UDF, y para inyecciones SQL ciegas, se pueden utilizar técnicas de redirección de salida o de contrabando de solicitudes DNS.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)