文章总结: 本文介绍了利用缓存服务器与源服务器对URL分隔符解析差异的Web缓存欺骗攻击。核心在于找出源服务器识别但缓存服务器忽略的分隔符,或反之。攻击者可在动态路径后添加静态扩展名,使源服务器返回的敏感数据被缓存为静态文件,导致信息泄露。文章提供了使用BurpIntruder测试分隔符和构建攻击载荷的详细步骤。 综合评分: 89 文章分类: WEB安全,渗透测试,漏洞分析,实战经验,漏洞POC
“缓存欺骗第三章第五节”如何利用分隔符差异进一步判断系统的缓存规则
原创
升斗安全XiuXiu
升斗安全
2025年12月21日 16:16 广东
【文章说明】
- 目的:本文内容仅为网络安全技术研究与教育目的而创作。
- 红线:严禁将本文知识用于任何未授权的非法活动。使用者必须遵守《网络安全法》等相关法律。
- 责任:任何对本文技术的滥用所引发的后果自负,与本公众号及作者无关。
- 免责:内容仅供参考,作者不对其准确性、完整性作任何担保。
阅读即代表您同意以上条款。
在熟悉前面章节的内容后您或许可以利用分隔符差异,向缓存服务器所识别但源服务器不处理的路径添加静态扩展。具体操作时,您需要找出被源服务器用作分隔符但缓存服务器不处理的字符。
首先,识别源服务器用作分隔符的字符。操作时可在目标端点URL中添加任意字符串作为测试起点。例如,将 /settings/users/list 修改为 /settings/users/listaaa。后续测试分隔符时,可将此响应作为参照基准。
注意
若测试响应与原始响应完全一致,说明请求已被重定向,此时需更换其他端点进行测试。
接下来,在原路径与任意字符串之间插入可能的分隔符进行测试,例如:/settings/users/list;aaa:
若响应与基准响应(即原始路径响应)一致,说明 ; 被源服务器识别为分隔符,此时源服务器将路径解析为 /settings/users/list。
若响应与添加任意字符串后的路径(/settings/users/listaaa)响应一致,说明 ; 未被源服务器识别为分隔符,此时源服务器将路径完整解析为 /settings/users/list;aaa
确认源服务器使用的分隔符后,需测试这些分隔符是否也被缓存服务器识别。测试时可在路径末尾添加静态扩展名进行验证。如果响应被缓存,说明以下两种情况之一成立:
- 缓存服务器未将该字符识别为分隔符,因此将带有静态扩展名的完整URL路径作为缓存键;
- 存在缓存规则将特定扩展名(如.js)结尾的请求响应存入缓存。
建议测试所有ASCII字符及常见扩展名,例如.css、.ico、.exe等。实验指南中提供了潜在分隔符列表供参考(参见Web缓存欺骗实验的分隔符列表)。您可以使用Burp Intruder快速测试这些字符。为确保Burp Intruder不自动编码分隔符,请在载荷侧边栏的”Payload encoding”设置中关闭自动字符编码功能。
那么,你就可以构建一个利用静态扩展缓存规则的攻击载荷。例如,考虑这个载荷:/settings/users/list;aaa.js。假设源服务器将 ; 视为分隔符:
- 缓存服务器将路径理解为:/settings/users/list;aaa.js
- 源服务器将路径理解为:/settings/users/list
- 源服务器返回动态的个人资料信息,而这些信息却被存储在了缓存中。
由于分隔符的使用通常在每个服务器内部是保持一致的,因此你通常可以将此攻击应用于许多不同的端点。
注意
有些分隔符可能会在受害者浏览器将请求转发给缓存之前就被其处理。这意味着有些分隔符无法在攻击中直接使用。例如,浏览器会对 {、}、<、> 等字符进行URL编码,并使用 # 来截断路径。
如果缓存服务器或源服务器会解码这些字符,那么在攻击中或许可以使用它们的编码版本。
接下来将继续输出有关因“分隔符差异”诱发缓存欺骗漏洞的实际场景,直接上实操,感兴趣的小伙伴们别忘了点赞、分享、关注了~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:升斗安全 升斗安全XiuXiu《
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论