我们最近测试了一个使用ASP.NET无Cookie会话的Web应用。这意味着会话令牌会作为URL的一部分,如下例所示:
|
|
其中会话令牌的格式为(S(LongRandomToken))
,LongRandomToken
是由字母数字组成的长随机字符串,用于替代传统的会话Cookie。
这种实现方式在使用Burp Suite测试时会导致站点地图混乱,因为变化的令牌会使应用看起来存在无限多的内容路径。例如,原本只有一个登录页面的站点地图会因令牌值变化而显示为多个不同路径。
解决方案
我们采用双Burp实例的方案:
-
代理链配置:
- 浏览器使用Burp1作为代理
- Burp1使用Burp2作为上游代理
- Burp2监听8090端口并连接目标服务器
-
匹配替换规则:
- Burp1规则:将令牌从URL路径提取并转为查询参数
1 2
匹配: (.*)/(S\(.*?\)\)/([^ ]*)(.*) 替换: $1/$3\?zzzz=$2$4
- Burp2规则:将查询参数还原为原始路径格式
1 2
匹配: (\w* /)(.*)\?zzzz=([^ ]*)(.*) 替换: $1$3/$2$4
- Burp1规则:将令牌从URL路径提取并转为查询参数
-
会话处理:
- 配置Burp宏来自动捕获302响应中的令牌
- 通过虚构参数
aaaa
传递令牌值 - 在上游代理中二次重写URL格式
技术挑战
- 无命名参数的令牌处理需要虚构临时参数
- URL编码问题需通过代理层解决
- 扫描过程中会产生额外流量并轻微污染站点地图
该方案虽然存在短期令牌有效性等局限,但相比在单一会话中手动操作,显著提高了针对特定功能扫描的效率。