• 109.网络安全渗透测试—[权限提升篇7]—[Windows Mysql UDF提权]


    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

    一、Windows Mysql Udf提权

    1、udf提权简介:

    (1)在mysql可以使用udf自定义函数进行提权,udf = user defined function 用户自定义函数。

    (2)对于自定义的函数,在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀微

    dll,c语言编写。

    (3)udf提权的位数,取决于操作系统位数,与mysql位数无关。

    2、udf提权的背景:

    ​ 我们通过文件上传+文件包含获得了一个webshell,但是此时的权限很低,与此同时还获得了靶机MySQL的连接数据。因此我们尝试udf提权,其实质就是以MySQL的身份执行系统命令

    3、udf插件目录的查询:

    ​ 可以使用语句查询plugin插件目录:show variables like "%plugin%"

    在这里插入图片描述

    4、udf提权报错的解决:

    (1)导出的时候报错:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement,这种是mysql默认设置是不允许导入导出。【在下面的实验过程中会提到解决方法】

    (2)导出的时候报错Can't create/write to file 'C:\phpStudy\PHPTutorial\MySQL\lib\plugin\moonudf.dll这种是没有权限导出,或者plugin目录没有创建。【在下面的实验过程中会提到解决方法】

    (3)导出无错,但是创建函数的时候报错:1126 - Can't open shared library 'udf.dll'(errno: 14001)【在下面的实验过程中会提到解决方法】

    5、漏洞利用过程:

    (1)实验环境:

    1.靶机环境:
    (1)虚拟机Windows2003【www.include.qwsn】【192.168.97.200】
    (2)脚本语言环境:php语言环境存在
    
    2.攻击机:
    (1)虚拟机Win7【192.168.97.130】
    (2)Firefox+Burpsuite+蚁剑+大马
    
    3.网络环境:
    (1)VMware搭建的NAT网络
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    (2)靶机连接:

    URL:http://www.include.qwsn/exp/include/include1/include2.php

    (3)实验过程:

    第一步: 访问靶机链接,上传图片马,然后文件包含,得到蚁剑的webshell
    在这里插入图片描述
    【以上过程略】,以下就是提权过程!!!

    第二步: 上传udf提权大马moon2.php到靶机

    在这里插入图片描述

    第三步: 浏览器访问该moon2.php大马

    在这里插入图片描述

    第四步: 导出udf,发现导出动态链接库失败,我们到靶机设置my.ini的secure-file-priv为空即可

    在这里插入图片描述

    解决方法:

    在这里插入图片描述

    第五步: 仍旧发现导出动态链接库失败,我们再到靶机创建一个plugin目录

    在这里插入图片描述

    注意: udf利用的其中一步,是要将我们的xxx.dll文件上传到mysql检索目录中,mysql各版本的检索目录有所不同,如下表所示:

    版本路径
    MySQL < 5.0导出路径随意
    5.0 <= MySQL< 5.1需要导出至目标服务器的系统目录(如:c:/windows/system32/或c:/winnt/system32)
    5.1 < MySQL必须导出到MySQL安装目录下的lib\plugin文件夹下

    解决方法:

    在这里插入图片描述

    在这里插入图片描述

    第六步: 再去导出udf动态链接库,发现成功导出。

    在这里插入图片描述

    第七步: 创建sys_eval函数,发现创建失败。

    在这里插入图片描述

    注意1: 在执行 create function sys_eval returns string soname ‘moonudf.dll’; 命令时出现 1126 - Can’t open shared library ‘udf.dll’(errno: 14001)的错误。我看网上有的解释是说是因为在MySQL安装目录下默认没有 …\lib\plugin 目录导致的。但是这里很明显不是这个错误,因为如果上一步将dll文件写到 lib\plugin 目录没报错的话,说明dll文件已经写到 lib\plugin 目录了,因此也就不存在这个错误。但是目前还没有找到解决版本。

    注意2: 网上还有的说:在执行 create function sys_eval returns string soname ‘udf.dll’; 命令时出现 1126 - Can’t open shared library 'udf.dll’的错误。这个错误是因为udf.dll是看mysql是32位还是64位,而不是看操作系统。mysql是64位用了32位的udf.dll就会报这个错。

     注意3: 我的MySQL与OS位数信息,如下图所示:
    在这里插入图片描述

    注意4: 但是真正的问题是,可能是这个脚本的问题,我们换一个旧的脚本,并且还是用32位提权,发现竟然成功了!!!
    【因此这里就印证了udf提权与MySQL位数无关,而是与操作系统位数有关;同时也发现可能是因为udf提权大马的原因,导致虽然动态链接库导出成功但是出现创建函数失败的现象!!!】

    第七步: 换一个udf提权大马,这次上传moon1.php文件,然后去导出udf,再去创建cmdshell函数,发现成功创建。

    上传moon1.php大马:

    在这里插入图片描述

    中间过程省略…

    创建函数cmdshell:

    在这里插入图片描述

    第八步: 利用创建的cmd函数执行系统命令whoami,成功回显结果。

    在这里插入图片描述

    第九步: 创建反弹shell函数backshell,发现成功创建。

    在这里插入图片描述

    第十步: 攻击机先开启侦听12345端口,然后再执行反弹Shell函数,发现成功反弹靶机的shell到攻击机的cmd中。

    执行反弹函数:

    在这里插入图片描述

    最开始的侦听,以及反弹成功后的执行系统命令:

    在这里插入图片描述

    第十一步: 利用反弹的shell,开启3389端口。

    在这里插入图片描述

    第十二步: 创建用户$darkmoon,并且加入到管理员组。

    在这里插入图片描述

    第十三步: 利用开启的3389端口,以及创建的用户$darkmoon/123456,远程登录靶机。

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    6、实验总结

    (1)udf提权的背景:需要Webshell+MySQL连接信息。

    (2)udf提权的实质:以MySQL的身份执行系统命令。

    (3)udf提权,需要将我们的xxx.dll动态链接库文件上传到mysql检索目录中,mysql各版本的检索目录有所不同,如下表所示:

    版本路径
    MySQL < 5.0导出路径随意
    5.0 <= MySQL< 5.1需要导出至目标服务器的系统目录(如:c:/windows/system32/或c:/winnt/system32)
    5.1 < MySQL必须导出到MySQL安装目录下的lib\plugin文件夹下

    (4)udf提权过程中常常遇到的三个报错,如下表所示:

    报错时间报错内容报错原因解决方法
    导出的时候报错The MySQL server is running with the --secure-file-priv option so it cannot execute this statementmysql默认设置是不允许导入导出事先在靶机的my.ini中设置字段secure-file_priv置空
    导出的时候报错Can't create/write to file 'C:\phpStudy\PHPTutorial\MySQL\lib\plugin\moonudf.dll没有权限导出,或者plugin目录没有创建(主要原因)事先在靶机的/lib目录下创建plugin目录
    导出时无错,但是创建函数的时候报错Can't open shared library 'udf.dll'导出的位数不匹配,或者udf提权的大马有问题导出其他位数的动态链接库,或者换一个udf提权大马。

    (5)不事先在靶机创建plugin目录,攻击者如何创建plugin目录的呢?

    利用NTFS ADS流来创建文件夹的方法:
    1、select @@basedir; //查找到mysql的目录
    2、select “It is dll” into dumpfile “C:\\phpStudy\\PHPTutorial\\MySQL\\lib::$INDEX_ALLOCATION”; //利用NTFS ADS创建lib目录
    3、select “It is dll” into dumpfile “C:\\phpStudy\\PHPTutorial\\MySQL\\lib\\plugin::$INDEX_ALLOCATION”; //利用NTFS ADS创建lib\plugin目录

    经测试,发现如下错误,有待解决。。。。。。。。。。。

    在这里插入图片描述

  • 相关阅读:
    Python tkinter - 第8章 单选按钮控件(Radiobutton)属性
    【算法训练-链表 五】【求和】:链表相加(逆序)、链表相加II(顺序)
    【Spring】面向切面编程详解(AOP)
    【算法小讲堂】#1 贪心算法
    活字格性能优化技巧(1)——如何利用数据库主键提升访问性能
    【自用总结】正项级数审敛法的总结
    电脑技巧:低配置的旧电脑也可以使用Win11系统了
    MyBatis 如何实现一个多对多的关联查询呢?
    Firefoo:Firebase Cloud Firestore——GUI工具
    Spring Boot概述
  • 原文地址:https://blog.csdn.net/qq_45555226/article/details/125620530