Mysql数据库提权:浅谈UDF的安全问题利用

一直比较关注服务器安全问题,最近和一个朋友探讨mysql的利用UDF提权问题。我们攻陷一个网站的时候拿到root密码,有时候不仅仅看看数据库,还可以做其他事情,甚至服务器提权哦。

譬如, 执行一条sql语句查看/etc/passwd文件的内容:

1.jpg - 大小: 144.99 KB - 尺寸: 748 x 625 - 点击打开新窗口浏览全图

这里主要是用到了load_file()函数,当然这个函数是可以被禁用的。以上可以轻松看到/etc/passwd文件的信息和ip地址,当然其他的文件内容都可以被看到。

由于load_file()函数只能实现类似系统命令cat的查看文件功能,但是想执行系统命令的功能,那么只能用UDF了,也就是User defined Function,用户定义函数。

查看mysql的plugin,plugin_dir的路径为/usr/lib/mysql/plugin

2.jpg - 大小: 18.86 KB - 尺寸: 346 x 124 - 点击打开新窗口浏览全图

如果像我遇到这个数据库服务器一样,plugin_dir的路径为空也无所谓了。

3.jpg - 大小: 5.77 KB - 尺寸: 335 x 49 - 点击打开新窗口浏览全图

执行以下sql语句,把udf.txt里面的十六进制的文件内容导出到/usr/lib/mysqludf.so

4.jpg - 大小: 8.76 KB - 尺寸: 640 x 45 - 点击打开新窗口浏览全图

查看下这个udf库所支持的函数

5.jpg - 大小: 45.43 KB - 尺寸: 371 x 676 - 点击打开新窗口浏览全图

创建函数并且查看是否创建成功,可以看到一个名叫sys_eval的UDF创建成功了。

6.jpg - 大小: 21.12 KB - 尺寸: 557 x 169 - 点击打开新窗口浏览全图

最后利用UDF执行更高权限的功能

7.jpg - 大小: 51.49 KB - 尺寸: 838 x 218 - 点击打开新窗口浏览全图

剩下的就用这个UDF获得系统权限吧,提示可以用nc反弹,在自己的主机上执行nc -vv -l -p 12345,在数据库上执行一下sql语句

8.jpg - 大小: 15.39 KB - 尺寸: 407 x 131 - 点击打开新窗口浏览全图


就可以成功反弹出linux shell了,再往下就。不过UDF的利用也有局限性,需要有mysql库的操作权限,在mysql库下必须有func表;在skipgranttables开启的情况下,UDF会被禁止。

PS:mysqludf.so是我已有的一个库文件,利用它生成了udf.txt,执行以下sql语句即可

mysql> select hex(load_file('/usr/lib/mysqludf.so')) into outfile '/tmp/udf.txt';
Query OK, 1 row affected (0.04 sec)




关键词: 网络安全 , mysql提权

上一篇: Linux性能监测工具dstat介绍和使用教程
下一篇: Linux(Centos)系统中iptables防火墙设置学习教程

目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):