5618sqlmap
本文最后由方少年更新于2025 年 11 月 14 日,已超过16天没有更新。如果文章内容或图片资源失效,请留言反馈,将会及时处理,谢谢!
下面是一份“扫描器登录:在 sqlmap / ZAP 中配置 Cookie 并成功访问登录后页面”的实战讲义。内容包含目标、原理、标准流程、命令/配置范式、验证与排错清单。默认以 DVWA 等教学靶场为例,务必仅在授权范围内使用。
一、目标与核心要点
- 目标:让扫描器在“已登录会话”中工作,能够爬取/测试登录后页面,而不是被 302 重定向回登录页。
- 会话载体:典型为 Cookie(例如 PHPSESSID、JSESSIONID);也可能伴随 CSRF Token、双重校验、SameSite 策略。
两条主线:
- sqlmap:手动或脚本获取并携带 Cookie/Token,必要时自动刷新。
- 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 讲义
- 最小可用:手动携带 Cookie
步骤
- 通过登录流程获取 Cookie(浏览器开发者工具/代理/或 curl 保存 cookiejar)。
- 将 Cookie 直接交给 sqlmap。
示例
- 假设已登录后可访问:
http://target/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit 常见命令
sqlmap -u "http://target/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" \ --cookie="PHPSESSID=abcd1234; security=low" \ --level=2 --risk=2 --batch --dbs
- 假设已登录后可访问:
- 适用:登录后页面不要求每次请求都带新的 CSRF Token。
- 处理 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
- 会话保活与稳定性
选项建议
- --cookie-jar=cj.txt 持久化并自动更新 Cookie
- --random-agent 或 --user-agent="..." 保持与登录时一致
- --delay / --timeout 调整节奏,避免触发风控
- --safe-url / --safe-post 用于在扫描间隙“心跳”保持会话
观察点
- 响应码 302/登录页关键字 → 会话失效或 Token 校验失败
- 响应体长度突变 → 可能被重定向/拦截
四、OWASP ZAP 讲义(标准方式)
- 建立 Context(上下文)
- Sites 树选中目标域 → 右键 “Include in Context” → 新建/选择 Context。
- 在 Context 的 “Include in context”/“Exclude in context” 中精确限定范围(避免扫到无关域)。
- 会话管理与认证配置
- 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 判断当前状态,并在失效时自动重登(脚本或内置机制)。
- 定义用户并赋凭据
- Context → Users:添加一个 “User”,录入用户名/密码。
- 启用 “Forced User Mode”,选择该用户(工具栏钥匙图标)。
- 爬取与扫描(以用户身份)
- 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 到登录页。
- 快速替代(一次性 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 --dbssqlmap(带 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 --batchZAP(表单认证要点)
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”两件套,帮助你快速开始。
文章标题:5618sqlmap
文章链接:https://www.fangshaonian.cn/archives/137/
最后编辑:2025 年 11 月 14 日 18:48 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)