5618sqlmap

下面是一份“扫描器登录:在 sqlmap / ZAP 中配置 Cookie 并成功访问登录后页面”的实战讲义。内容包含目标、原理、标准流程、命令/配置范式、验证与排错清单。默认以 DVWA 等教学靶场为例,务必仅在授权范围内使用。

一、目标与核心要点

  • 目标:让扫描器在“已登录会话”中工作,能够爬取/测试登录后页面,而不是被 302 重定向回登录页。
  • 会话载体:典型为 Cookie(例如 PHPSESSID、JSESSIONID);也可能伴随 CSRF Token、双重校验、SameSite 策略。
  • 两条主线:

    1. sqlmap:手动或脚本获取并携带 Cookie/Token,必要时自动刷新。
    2. ZAP:定义 Context + 认证(Form-based/HTTP)+ 会话管理 + 用户 + 指示器(logged-in/out),按“用户身份”爬取与扫描。

二、前置准备(两者通用)

  • 在浏览器或代理(Burp/ZAP)中完成一次“正常登录”,确认:

    • 登录 URL、方法(GET/POST)、参数名(例如 username、password、user_token)、响应 200/302。
    • 登录成功/失败页面上可用于识别的关键字(例如 “Logout”、“Login failed”)。
    • Set-Cookie 返回的会话名与值(例如 PHPSESSID=abcdef...)。
    • 是否存在 CSRF Token(页面隐藏字段/响应中动态生成,常见命名:csrf、token、user_token 等)。
  • 记录登录后目标“受保护页面”的 URL,用于验证与扫描入口。
  • 注意同一会话可能绑定 User-Agent/IP;批量/自动化时尽量保持一致。

三、sqlmap 讲义

  1. 最小可用:手动携带 Cookie
  • 步骤

    1. 通过登录流程获取 Cookie(浏览器开发者工具/代理/或 curl 保存 cookiejar)。
    2. 将 Cookie 直接交给 sqlmap。
  • 示例

  • 适用:登录后页面不要求每次请求都带新的 CSRF Token。
  1. 处理 CSRF Token 的页面
  • 目标:一些页面每次访问都要求携带新 Token(动态),需要 sqlmap 取 Token 再发起注入请求。
  • 常用选项(其一或组合)

    • --csrf-token=PARAM 指明 Token 参数名,sqlmap 会从目标页面响应中提取并复用
    • --csrf-url=URL 从该 URL 抓取页面以提取 Token(若与注入页面不同)
    • --cookie-jar=FILE 让 sqlmap 维护并更新 Cookie
    • --proxy=http://127.0.0.1:8080 调试时走代理观察流量
  • 示例(Token 名为 user_token)

    sqlmap -u "http://target/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" \
      --cookie="PHPSESSID=abcd1234; security=low" \
      --csrf-token=user_token \
      --csrf-url="http://target/dvwa/vulnerabilities/sqli/" \
      --level=2 --risk=2 --batch
  1. 会话保活与稳定性
  • 选项建议

    • --cookie-jar=cj.txt 持久化并自动更新 Cookie
    • --random-agent 或 --user-agent="..." 保持与登录时一致
    • --delay / --timeout 调整节奏,避免触发风控
    • --safe-url / --safe-post 用于在扫描间隙“心跳”保持会话
  • 观察点

    • 响应码 302/登录页关键字 → 会话失效或 Token 校验失败
    • 响应体长度突变 → 可能被重定向/拦截

四、OWASP ZAP 讲义(标准方式)

  1. 建立 Context(上下文)
  • Sites 树选中目标域 → 右键 “Include in Context” → 新建/选择 Context。
  • 在 Context 的 “Include in context”/“Exclude in context” 中精确限定范围(避免扫到无关域)。
  1. 会话管理与认证配置
  • Global Options → Anti CSRF Tokens:确认常见 token 名称(csrf、token、user_token)在列表内;如自定义名称,添加之。
  • Context → Session Management:选择 “Cookie-based Session Management”。
  • Context → Authentication:

    • 若为表单登录:选择 “Form-based Authentication”
    • Login URL:填写登录地址(例如 /login.php)
    • Login request POST Data(模板占位):例如

      username={%username%}&password={%password%}&user_token={%token%}

      ZAP 会尝试识别并填写 Anti-CSRF token;如无法自动识别,可结合 “Scripts → Authentication” 自定义登录脚本。

  • Logged in/out indicator:

    • Logged in indicator(正则):例如 Logout|Sign\s*out
    • Logged out indicator(正则):例如 Login|Sign\sin|Invalid\scredentials
      这两项用于让 ZAP 判断当前状态,并在失效时自动重登(脚本或内置机制)。
  1. 定义用户并赋凭据
  • Context → Users:添加一个 “User”,录入用户名/密码。
  • 启用 “Forced User Mode”,选择该用户(工具栏钥匙图标)。
  1. 爬取与扫描(以用户身份)
  • Spider(or AJAX Spider)as User:右键 Context 或具体节点 → Attack → Spider/AJAX Spider as User
  • Active Scan as User:右键 → Active Scan as User
  • 观测:查看 History/Alerts,确保请求返回 200 且未被 302 到登录页。
  1. 快速替代(一次性 Cookie)
  • 若时间紧,可将浏览器登录后的 Cookie 手动加到 ZAP(右键请求 → “Resend…” → 添加 Cookie 头),或在 Options → HTTP Sessions 中注入。但 Cookie 过期后会失效,推荐优先使用“表单认证 + 用户 + 指示器”的标准方法。

五、验证清单(建议逐项确认)

  • 访问一个“仅登录后可见”的 URL:

    • 在 ZAP 历史里返回 200 且页面包含“Logout”等标记;
    • 在 sqlmap 中访问该 URL,不出现 302 到登录页。
  • 对于存在 Token 的页面:

    • ZAP:能自动识别并提交 Token;或登录脚本能获取并填充 Token;
    • sqlmap:--csrf-token 自动提取成功;响应不再提示 Token 错误。
  • 会话保活:持续扫描 5–15 分钟不掉线;若掉线,ZAP 能重登,sqlmap 通过 cookie-jar 还能继续。

六、常见问题与排错(对症解决)

  • 一直 302 回登录页:

    • Cookie 失效/未携带;UA/IP 绑定变化;域名不一致(主域与子域 Cookie 作用域问题)。
    • CSRF Token 丢失/过期:在 sqlmap 指定 --csrf-token / --csrf-url;在 ZAP 加入 Anti-CSRF 名称或登录脚本。
  • 需要多因素/验证码:

    • 自动化难度高;建议在测试环境关闭或为测试用户豁免;必要时以真实浏览器驱动(ZAP HUD/selenium)并降低自动化程度。
  • SameSite=Strict 导致跨站请求不带 Cookie:

    • 合法测试环境中暂时调整 SameSite/Lax;或通过站内入口“内链爬取”触发。
  • 速率限制/风控:

    • ZAP 降低并发、延迟;sqlmap 使用 --delay、--timeout,配合 --proxy 观察。

七、速用范式(可直接改参复制)

  • sqlmap(无 Token)

    sqlmap -u "http://target/secure/item?id=1&Submit=Submit" \
      --cookie="SESSION=abc123; role=user" \
      --risk=2 --level=2 --batch --dbs
  • sqlmap(带 Token)

    sqlmap -u "http://target/secure/sqli?id=1&Submit=Submit" \
      --cookie="SESSION=abc123" \
      --csrf-token=authenticity_token \
      --csrf-url="http://target/secure/sqli" \
      --cookie-jar=cj.txt --proxy=http://127.0.0.1:8080 --batch
  • ZAP(表单认证要点)

    • Context → Authentication:

      • Login URL: http://target/login.php
      • Login Request Data: username={%username%}&password={%password%}&user_token={%token%}
    • Anti CSRF Tokens: 添加 user_token
    • Users: testuser / P@ssw0rd
    • Indicators: Logged in = Logout;Logged out = Login
    • 操作:Spider as User → Active Scan as User

八、交付与记录(考核/报告面)

  • 附:Cookie/Token 获取方法、关键配置截图(ZAP Context、Indicators、Users)、sqlmap 命令行与关键输出片段。
  • 说明:扫描范围与登陆用户权限、会话保活策略、Token 处理方式、遇到的异常与规避。
  • 结论:登录后资源覆盖率、发现的风险点、后续修复建议。

如需,我可以:

  • 针对你的靶站(DVWA 或课程 VM)提供一份“可直接导入的 ZAP Context JSON(含表单认证与用户)”;
  • 根据你的登录页参数,生成“sqlmap 一键命令”和“curl 登录脚本 + cookie-jar”两件套,帮助你快速开始。
~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:博客TypechoAutoUpload
文章标题:5618sqlmap
文章链接:https://www.fangshaonian.cn/archives/137/
最后编辑:2025 年 11 月 14 日 18:48 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 2 + 5 =
快来做第一个评论的人吧~