From: http://blog.chinaunix.net/uid-29141629-id-4383424.html
写在前面:本文旨在通过透彻分析Linux下MySQL的udf提权来提高大家的知识水平,以对这种类型的提权进行更好的防范,学了不要干违法的事情,否则后果自负。
Linux操作系统自从诞生后,其高效的处理能力和卓越的稳定性受到广大用户的亲睐,特别是服务器市场,Linux占有很大的份额。俗话说:树大招风。Linux在服务器领域的广泛应用使得Linux的安全也受到了前所未有的挑战。针对Linux的渗透与攻击手段也越来越多,渗透Linux最常见的手段就是MySQL udf提权。
众所周知,MySQL是一款免费的、开源的数据库服务器软件。其安全性也十分高,因此很多Linux厂商都将其内建在操作系统,特别是一些livecd或者liveDVD。由于MySQL在Linux上的广泛应用,使得MySQL也成为安全界重点研究的对象,udf是MySQL的一个共享库,通过udf创建能够执行系统命令的函数sys_exec、sys_eval,使得入侵者能够获得一般情况下无法获得的shell执行权限。这对于服务器来说是十分危险的。那么入侵者究竟是怎样获得这个权限的呢?换句话说是如何安装这个函数的呢?下面我们可以演示一下
操作系统:backtrack5 r2
平台:Apache+MySQL+PHP
安装这几个函数,必须用到lib_mysqludf_sys.so(windows是对应的dll文件),为方便大家,我就直接作为附件上传。lib_mysqludf_sys_0.rar下载之后,你可以选择通过源代码建构so文件,也可以直接复制so文件夹下的文件。
首先,开启bt5上的Apache服务和MySQL服务,键入"/etc/init.d/apache2 restart"开启Apache服务,MySQL服务可以通过开始菜单来启动,如下图所示:
其实,Apache也可以通过菜单启动,上图中的httpd的子菜单就可以启动,我比较习惯从命令行启动而已。
我们可以访问127.0.0.1来查看Apache是否启动成功,如下图:
没有问题,启动成功
然后,打开终端,键入"mysql -uroot -ptoor"命令连接数据库(注意,-u和-p参数后都不要带空格),如果连接成功,将会出现mysql的提示符
紧接着,上传lib_mysqludf_sys.so到/usr/lib/mysql/plugin,然后键入如下命令:
create function sys_eval returns string soname "lib_mysqludf_sys.so" (创建函数)
创建完成之后就可以通过select sys_eval("命令")执行,如下图
执行ls命令后的结果
看到这里,你也许会说,不过就是执行了一个ls命令吗?这有什么大不了呢?的确,一个ls命令确实没什么大不了。但是这使入侵者获得了一个执行shell的权限,这种权限可以执行任何可执行的文件,也就是说通过它可以为Linux安装后门如使用nc等,而这无异于将服务器拱手让给他人。一般说来,服务器会将PHP的sys_exec等函数禁用,但是udf方式绕过了这种限制,轻易获得了shell。
说完了攻,我们来说说防。可以通过升级MySQL的版本或者禁用udf功能来实现针对udf攻击的防御。