关于mysql注入时,无法读取写入文件或者读取文件为null的原因分析

问题情景

我在进行MySQL注入时,发现无法使用load_file()和into file()等文件操作的函数。如果使用会一直报错。或者返回的值为null。

问题背景

MySQL5.7版本

phpstudy集群环境

原因分析

由于这种操控文件的函数可能会让攻击者利用从而对系统造成极大的破坏,所以MySQL通常是默认禁止使用这类函数的。如果想要使用,则需要手动配置。

判断是否MySQL禁用

用数据库,或者是注入点输入

show variables like '%secure%';

从返回值的secure_file_priv中观察

如果是null说明禁用,可以通过下面方法开启

如果有路径,则文件只能在指定的路径中进行修改.

解决过程分为几个方面

1.手动配置一个叫my.ini的文件,位置在phpstudy_pro\Extensions\MySQL5.7.26。

打开之后加上一句

后面的‘’内为可以进行文件操作的范围,可以写绝对路径,或者空着或者我这样

空着代表可以全区域进行文件操作-----------很危险

‘/’代表只能在本盘进行操作

修改后重启MySQL就可以使用了

2.进行文件读取和写入时,我们直接复制的路径通常是用\,但是\可能会编译成空格等,所以把\全部换成/

3.如果小皮安装在了c盘,可能是没有管理员权限写不进去。(我把他从c盘搬了出来,没放回去实验,所以本条仅供参考)

4.数据库用户权限问题,有的数据库用户没这个权限,一般root绝对有权限

总结

通过以上方法,再检查自己的语句是否正确,基本上就可以解决相应的问题了。

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java读取CSV文件的数据并写入MySQL可以通过以下步骤完成: 1. 首先,你需要使用Java中的FileReader类来读取CSV文件。可以使用CSVReader或者BufferedReader来逐行读取CSV文件的内容。 2. 在读取CSV文件的同,你可以使用StringTokenizer或者split方法将每一行数据拆分成字段,以便后续写入MySQL中。 3. 接下来,你需要使用Java中的JDBC(Java Database Connectivity)来连接MySQL数据库。在连接数据库之前,你需要下载并添加数据库驱动程序(JDBC驱动)到你的Java项目中。 4. 一旦连接到MySQL数据库,你可以使用PreparedStatement准备SQL语句,并使用setString或者setInt等方法设置参数的值,将数据插入到MySQL数据库中。 5. 最后,你可以通过执行PreparedStatement的executeUpdate方法来执行SQL插入语句,并将CSV文件中的数据写入MySQL数据库表中。 以下是一个简单的示例代码,用于读取CSV文件并将数据写入MySQL数据库: import java.io.BufferedReader; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class CSVtoMySQLExample { public static void main(String[] args) { String csvFilePath = "path_to_csv_file.csv"; String jdbcURL = "jdbc:mysql://localhost:3306/db_name"; String username = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(jdbcURL, username, password); BufferedReader br = new BufferedReader(new FileReader(csvFilePath))) { String line; while ((line = br.readLine()) != null) { String[] data = line.split(","); String sql = "INSERT INTO table_name (column1, column2, column3) VALUES (?, ?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, data[0]); statement.setString(2, data[1]); statement.setString(3, data[2]); statement.executeUpdate(); } System.out.println("Data imported successfully!"); } catch (Exception e) { e.printStackTrace(); } } } 请注意,以上代码仅作为示例,你需要根据你的实际情况修改数据库连接信息、CSV文件路径以及插入数据的SQL语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岭敲键盘的荒漠猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值