Web Cache 欺骗攻击
0x01 原理
缓存实现方式
实现缓存有多种方式,其中有种方式是,将一台服务器部署在客户端和web服务器之间作为缓存服务器,其表现形式如下:
CDN(Content Delivery Network)
负载均衡(Load balance)
反向代理(Reverse proxy)
缓存工作流程
当某个静态文件被第一次请求时,请求会直接穿透缓存服务器直接到达web服务器。在web服务器返回内容后,缓存服务器会根据接收到的文件的类型,根据缓存规则决定是否缓存。通常情况下,缓存服务器会根据URL尾部信息来选择,比如对公共文件(样式表CSS,脚本JS,文本文件txt等)进行缓存。
等客户端再次发起请求时,这些被缓存的内容将由缓存服务器直接向客户端返还。从而更快的响应用户的请求。
欺骗方法
当访问不存在的URL时,如http://www.example.com/home.php/non-existent.css
,浏览器发送get请求,依赖于使用的技术与配置,服务器返回了页面http://www.example.com/home.php
的内容,同时URL地址仍然是http://www.example.com/home.php/non-existent.css
,http头的内容也与直接访问http://www.example.com/home.php
相同,cacheing header、content-type(此处为text/html)也相同。
具体环节如下: 1. 浏览器请求http://www.example.com/home.php/no-existent.css
; 2. 服务器返回http://www.example.com/home.php
的内容(通常来说不会缓存该页面); 3. 响应经过代理服务器; 4. 代理识别该文件有css后缀; 5. 在缓存目录下,代理服务器创建目录home.php,将返回的内容作为non-existent.css保存。
0x02 攻击流程
攻击条件
1、当访问如“http://www.example.com/home.php/nonexistent.css” 之类的页面时,服务器需要返回对应的home.php的内容。
2、Web应用启用了Web缓存功能,并且会根据文件的扩展名来缓存,同时会忽略掉任何缓存头部。
3、受害者在访问恶意URL地址时必须已经过认证。
手动测试
发送
http://www.vuln.com/admin.php/no-existent.css
管理员(通常)查看,导致admin.php内容被缓存。
hacker访问
http://www.vuln.com/admin.php/no-existent.css
,获取敏感信息。
工具
0x03 案例
CTF
0x04 参考
Last updated