SQL注入 文件读写
·
前言
本章节将讲解SQL注入中的文件读写相关知识。文件读写功能与我们之前学习的高权限操作密切相关
1. 文件读写的前提条件
- 必须具备高权限(root权限)
- 只有高权限用户才能进行文件读写操作。
- 普通用户无法进行文件读写。
- 特定配置项需授权
- 即使是 root 用户,如果没有开启相应的文件读写权限,也无法操作。
- 该权限可在配置文件中开启。
2. 文件读写的作用
- 读取功能:可以获取
- 用户信息(账号、密码)
- 配置信息(网站部署、敏感配置信息等)
- 写入功能:常用于
- 植入一句话木马,作为后门远程操控服务器
- 简化数据获取流程
3. 配置文件权限设置
常见配置文件位置
- Linux:/etc/my.cnf
- Windows:my.ini
示例说明
- 我的这个 txt 文件没有写权限。
- 我们可以在 cmd 下查看当前配置:
show global variables like '%secure%';
很显然当前没有权限,需要手动配置。
- 回到 my.ini 文件
- 添加如下配置项:
secure_file_priv=
- 保存后重启服务即可。
权限配置说明
- secure_file_priv=:对文件读写没有限制
- secure_file_priv=NULL:不能进行文件读写
- secure_file_priv=d:/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 常见环境路径
|
序号
|
环境/软件
|
常见路径
|
|
1
|
Phpstudy
|
phpstudy/www
|
|
2
|
Phpstudy
|
phpstudy/PHPTutorial/www
|
|
3
|
Xampp
|
xampp/htdocs
|
|
4
|
Wamp
|
wamp/www
|
|
5
|
Appser
|
appser/www
|
Linux 常见环境路径
|
序号
|
路径
|
|
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/html,MySQL数据目录是 /var/mysql/data。
- 路径获取技巧:
- 报错信息(如PHP的include错误、SQL注入报错)会直接泄露路径;
- 探针文件(如phpinfo.php)中 DOCUMENT_ROOT 字段可查看根目录;
- 配置文件(如Apache/Nginx的虚拟主机配置)中会记录站点路径。
7. 文件写入操作演示
常用写入函数
- INTO OUTFILE
- INTO DUMPFILE
区别说明
- OUTFILE:可写入多行,支持格式输出
- DUMPFILE:仅写入一行,无格式
写入示例
- 构造写入语句:
SELECT '内容' INTO OUTFILE 'D:\\d.txt';
- 注意事项
- 路径需反斜杠
- 语句末尾如有多余 SQL,可用 -- 或 # 注释掉
- 写入后,目标文件内即有指定内容(如一句话木马)
这边就不演示了,其实就是在注入点上面写内容,函数后面写位置
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)