前言本章节将讲解SQL注入中的文件读写相关知识。文件读写功能与我们之前学习的高权限操作密切相关1. 文件读写的前提条件必须具备高权限root权限只有高权限用户才能进行文件读写操作。普通用户无法进行文件读写。特定配置项需授权即使是 root 用户如果没有开启相应的文件读写权限也无法操作。该权限可在配置文件中开启。2. 文件读写的作用读取功能可以获取用户信息账号、密码配置信息网站部署、敏感配置信息等写入功能常用于植入一句话木马作为后门远程操控服务器简化数据获取流程3. 配置文件权限设置常见配置文件位置Linux/etc/my.cnfWindowsmy.ini示例说明我的这个 txt 文件没有写权限。我们可以在 cmd 下查看当前配置show global variables like %secure%;很显然当前没有权限需要手动配置。回到 my.ini 文件添加如下配置项secure_file_priv保存后重启服务即可。权限配置说明secure_file_priv对文件读写没有限制secure_file_privNULL不能进行文件读写secure_file_privd:/phpstudy/mysql/data只能对该路径下文件进行读写权限表述空值拥有绝对的读写权限null没有读写权限即使是 root 也无法操作指定路径仅对该路径有读写权限4. 利用SQL语句查看权限可通过 SQL 语句直接查询当前文件读写权限示例流程登录 MySQL如mysql -u root -p执行查询语句观察返回值判断权限状态5. 文件读取操作演示使用函数load_file()路径可以是单引号、0x十六进制形式、char转换的字符形式⚠️ 注意路径中斜杠是 /不是 \通常与 union 语句配合查看如 config.php即 mysql 的密码、apache 配置文件等示例操作创建本地文件如D盘下 d.txt执行 SQL 语句union SELECT 1,LOAD_FILE(D:/d.txt),3;成功后可看到文件内容我这边再查一下靶场内置的另一个文件你会发现它不显示那我们查看一下网页源代码就可以看出来了你这边看完其实会发现我们读取这个文件其实并不难难的是怎么知道它的路径6. 路径获取技巧我先帮你提取并整理图片中的文字内容再补充相关背景说明2、知道网站绝对路径Windows 常见环境路径序号环境/软件常见路径1Phpstudyphpstudy/www2Phpstudyphpstudy/PHPTutorial/www3Xamppxampp/htdocs4Wampwamp/www5Appserappser/wwwLinux 常见环境路径序号路径1/var/mysql/data、/var/www/html路径获取常见方式报错显示inurl:edu.cn warning这边就有一些因为报错的路径名遗留文件工程文件啥的inurl.phpinfo.php你这边就可以看到很多的信息漏洞报错平台配置文件等 补充说明这些路径在SQL注入尤其是文件读写操作中非常关键绝对路径的作用在使用 load_file() 读取文件或 into outfile 写入文件时必须知道网站根目录的绝对路径才能精准定位到目标文件如config.php或写入一句话木马。Windows vs Linux 路径差异Windows 路径分隔符可以用 / 或 \但注入中更推荐用 / 避免转义问题Linux 路径固定用 /常见的Web根目录是 /var/www/htmlMySQL数据目录是 /var/mysql/data。路径获取技巧报错信息如PHP的include错误、SQL注入报错会直接泄露路径探针文件如phpinfo.php中 DOCUMENT_ROOT 字段可查看根目录配置文件如Apache/Nginx的虚拟主机配置中会记录站点路径。7. 文件写入操作演示常用写入函数INTO OUTFILEINTO DUMPFILE区别说明OUTFILE可写入多行支持格式输出DUMPFILE仅写入一行无格式写入示例构造写入语句SELECT 内容 INTO OUTFILE D:\\d.txt;注意事项路径需反斜杠语句末尾如有多余 SQL可用 -- 或 # 注释掉写入后目标文件内即有指定内容如一句话木马这边就不演示了其实就是在注入点上面写内容函数后面写位置