网络攻击技术

Web 缓存欺骗

Web 缓存欺骗(Web Cache Deception)是一种新的 Web 攻击向量,在 2017 年第一次被 Omer Gil 提出(阅读原文)。它的漏洞原理和 RPO (Relative Path Overwrite)相对路径覆盖漏洞较为类似,根因都在于浏览器和网络服务器对相同 URL 请求的解析不一致(宽字节、00 截断也是)。通过“欺骗”用户访问一个不存在的静态页面,从而使敏感页面保存在缓存中,从而窃取用户敏感信息,通常是用户个人信息、业务敏感数据等,如果响应的主体中包含了用户的会话标识符、CSRF 令牌可进一步可导致 ATO。

原理: https://cloud.tencent.com/developer/article/1516385

如果代理服务器设置为缓存静态文件,忽略这类文件的 caching header 时,对于 url 地址 http://www.example.com/myaccount/包含用户账户信息 。攻击流程如下:

1)诱使用户通过浏览器请求不存在的 css 文件: http://www.example.com/myaccount/no-existent.css ;

2)由于服务器无法解析 css 文件,只能解析到 myaccount/,所以返回 myaccount/的内容。

3)此时响应经过反向代理服务器 Nginx;

4)代理识别该文件有 css 后缀,在缓存目录下,代理服务器创建目录 myaccount,将返回的内容作为 non-existent. css 保存;

5)攻击者请求相同链接,将得到缓存中的内容,即 myaccount 的敏感内容。

漏洞挖掘:

在挖掘 web cache 漏洞的时候首先要确定 web 系统架设了 CDN,负载均衡器或反向代理等缓存设备,其次观察返回头是否设置缓存控制头 Cache Control:no-cache,max-age=0,private,no-store,若未设置则很大可能存在此漏洞。

当然即使存在缓存标头也要尝试下,即使缺少缓存头,也不代表一定会获得缓存信息攻击。除此之外:

此漏洞存在需要满足两个条件:

1)Web 缓存功能设置为通过 URL 的扩展名来判断是否进行缓存文件,且忽略任何缓存头。

2)当访问类似http://www.example.com/home.php/non-existent.css不存在的页面,返回 home. php 的内容而不是“页面不存在”。

3)诱使访问 URL 时,受害者必须已经经过身份验证。

附带一个自动挖掘工具: https://github.com/arbazkiraak/web-cache-deception-checker

Web 缓存投毒

Web缓存中毒(Web Cache Poisonning)和缓存欺骗通常被混淆,它的攻击方式是通过X-Forwarded-Host头,发送导致有害响应的请求,该响应将保存在缓存中并提供给其他用户,其他用户访问到此页面时将不是正常页面,而是被攻击者“中毒”之后的的页面,产生的危害通常是XSS,也可能导致信息泄露。

参考: https://cloud.tencent.com/developer/article/1516385

http 请求走私

SSL 劫持

SSL 中间人劫持即攻击者首先通过 ARP 欺骗、DNS 劫持甚至网关劫持等等,将客户端的访问重定向到攻击者的机器,让客户端机器与攻击者机器建立 HTTPS 连接(使用伪造证书),而攻击者机器再跟服务端连接。

这种情况由于证书是伪造的,所以证书认证会失败,浏览器会提示,如果不点继续是不会被劫持的,而一般用户由于安全意识比较淡薄,都会心甘情愿的上钩。

参考: https://www.freebuf.com/column/205786.html

SSL 剥离攻击

SSL 剥离攻击(也称为 SSL 降级或 HTTP 降级攻击)是一种网络攻击,黑客将 Web 连接从更安全的 HTTPS 降级到安全性较低的 HTTP。这使得所有通信都未加密,并为中间人攻击奠定了基础,其中黑客坐在对话中间侦听或拦截信息。SSL 剥离可能会导致安全风险,例如黑客窃听私人信息,甚至在合法用户不知情的情况下更改数据或通信。

实验参考

https://blog.csdn.net/liu914589417/article/details/124585676