UDF提权

概念:

MySql提供了一个让使用者自行添加新的函数的功能,这种用户自行扩展函数的功能就较UDF。

 

当我们拿到webshell后,由于中间件例如,apache允许的使用使用了较低的权限,可能仅仅是个网络服务的权限,然后我们就需要进行提权,而有时候目标机器补丁较全,各种系统提权姿势都失效的情况下,可以将对象转义到数据库服务上,在Windows下,在较低版本的mysql(<5.6)安装时默认是系统权限。还有就是很多人图方便,例如使用了各种集成环境,未做安全设置,直接用root账户进行配置站点,就可以考虑用UDF进行提权。

不同版本的区别:

MySql < 4.1:

              允许用户将任何的DLL文件里面的函数注册到MySql里。

MySql 4.1-5.0:

              对用来注册的DLL文件的位置进行了限制,通常我们选择 UDF导出到系统目录

              C:/windows/system32/来跳过限制。

MySql >=5.1:

              这些DLL只能被放在MySql的plugin目录下。

 

操作步骤:

1.上传具有MySql提权功能的大马:

2.首先先确认MySql版本:

这里的前提是,我们需要先知道数据库的账号密码,这个通常webshell翻阅站点下的配置文件即可找到。进行连接后,执行:

select version();

符合MySql>=5.1的情况。

3.查看plugin目录名称:

show variables like ‘plugin%’;

4.查询目录的绝对路径:

select @@plugin_dir;

5.修改大马的内容,这个路径一般在大马的代码中,因为会进行提权的时候需要根据版本指定dll写入的路径,对代码中的路径进行修改即可。或者如果是页面上就可以指定的也就不需要改大马的代码了。

6.安装DLL:

前提:

这里要执行成功的前提是允许mysqld在指定目录或任意目录的导入导出权限。

原因:

secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。

secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。

secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。

secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。

查看 secure_file_priv 的值,默认为NULL,表示限制不能导入导出。

当允许进行操作时:

因为 secure_file_priv 参数是只读参数,不能使用set global命令修改。只能是修改my.cnf或my.ini,然后在结尾处加上secure_file_priv='' 然后再重启mysql。

 

当不为NULL时,可以安装DLL后门成功:

注意:

这里有个坑,如果你是用phpstudy进行复现的,这里虽然上面读取出来的路径是有plugin目录的,但是实际上去访问的时候会发现一开始并不存在plugin目录,这里就需要自己手动创建了。

接下来就可以进行执行命令了

然后我们和系统中mysql的执行角色进行比对:

现在就已经将权限提升到和mysql的运行权限一致了。

 

最后,总的来说,UDF提权就是利用MySql允许扩展自定义函数的特性,将webshell的权限变成和mysql运行权限一致,所以就有个前提,mysql得是以高权限进行运行的,至少得比中间件权限高,才有用这个方法进行提权的必要。

欢迎分享转发。

喜欢的话动动手指点个“关注”和“在看”吧~

(信安随笔)

 

posted @ 2020-02-07 19:56  rebootORZ  阅读(124)  评论(0)    收藏  举报