UDF提权已经不是什么新鲜技术了,不过前段时间在搭靶场的时候又重温了一遍这个东西,期间遇到了个别之前没有注意过的“难题”今天跟大家分享一下。
无问社区
01
事件开始
首先关注一下这个版本问题,大多数人会把mysql5.1带入写到文章里面,但实际上这个年代用5.1版本mysql的人已经是万里挑一的概率了,所以这次也是针对5.1以上版本来讲的。
因为我们的mysql在导入我们的udf文件的时候是从mysql安装目录下的lib/plugin目录进行导入的,这点可以从mysql的变量中看到。
默认这个目录是不存在的,所以我们需要有权限去新建目录。
对于udf.dll文件其实在sqlmap中已经是自带了。
无问社区
02
发现问题
然后这里就来坑了,这个udf文件是分为32位和64位的。
这里的32和64并不是指你操作系统的位数,而是mysql数据库的位数,如果这个搞错了,我们在导入文件的时候是会报错的,网上给出的很多的16进制的udf数据,我试了几个都会报错。
查看数据库的位数也简单,使用mysql -V,可以看到我这里是32位的数据库,所以在选择dll文件的时候需要选择32位的。
选择了udf文件,并且又创建了目录,在写入的时候其实也就很简单了。因为文件没办法直接上传,也不能直接复制内容,所以我这里是用hex(load_file(‘udf path’))将文件转为16进制的数据。
写入的时候只需要select 0x16进制数据 intodump file ’dll上传目录的绝对路径’在sqlmap的udf.dll中定义的执行命令的函数是sys_eval使用如下命令来导入dll文件中的函数
create function sys_eval returns string soname 'udf文件名'
然后执行即可。
END
原文始发于微信公众号(白帽子社区团队):mysql UDF提权踩坑经验分享
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论