Web缓存欺骗与punycode导致的0点击账户劫持
Web cache deception
什么是缓存,什么是Cache keys?
其实大家应该都知道缓存是为了加快访问而存在的,如一个学校官网,在你第一次访问时如果是会将页面存到缓存中,后面再缓存有效期的访问中都是从缓存服务器中给的响应。

而当一个页面被缓存时,你通过不同客户端访问也是可以得到相同的缓存内容的
Cache keys
Cache keys就是由于判断请求是否为重复相同请求的。一般是url路径加上一些请求标头
什么会被缓存
1.静态文件如.js .css .jpg .txt
2.静态目录,由开发者设定
3.固定缓存路径
为什么会产生这个漏洞以及漏洞目的
我们看上面的图片可以发现其存在缓存服务器和源服务器。
而这个两个服务器对应不同的web cache key,url路径的处理有可能是不同的,当这些产生差异的时候就容易产生漏洞
比如 源服务器会将; 当成分隔符直接忽略到后面的所有路径而缓存服务器不会。
而这个时候如果其缓存逻辑是我上述的1,即当路径会静态文件时就会产生缓存劫持
如果这个页面存在用户信息,比如其路径未userinfo
这时候当我们访问的是/userinfo;a.js时就会导致
缓存服务器将其识别为可缓存页面,而源服务器会将其识别为userinfo。

portswigger 缓存路径欺骗靶场2,路径分隔的差异导致的缓存
靶场
登陆后发现直接回显密钥且这个页面不可以缓存
先尝试再后面直接加上aaa查看器是否会强制转换路由
不会,那么接下来就是找这个服务的分隔符了,分隔符也就是类似于tomcat的;这种截断字符
将url编码和非编码都进行尝试
问好与分号是分隔符
后面加上;aa.js这样服务器就会将其认为是js静态文件。进行缓存而因为服务器会将;进行分隔,这导致应该不可缓存的页面被缓存。?经尝试不行
这样我们只要将这隔发给被攻击着就可以得到器缓存再服务器的密钥
编辑exp

被缓存
Puny-Code, 0-Click Account Takeover
什么是punycode其作用是什么
下面是我从某个域名注册网站截的图

在域名解析时,如果域名为非ascii字符就会将其编码成punycode进行解析,而邮件服务即smtp服务其实就是这个逻辑,即当smtp遇到类似user@gẩmil.com会将其解析为xn—user@gmil-gb7d.com
而有趣的来了,当mysql在解析user@gẩmil.com会将其与user@gamil.com划等号即这种IDN的ẩ与a在mysql环境是相同的
下面是忘记密码时一般服务器的流程

上面的导图当server 过分信任用户的注入直接将tonken发送给用户传入的邮箱就会导致账户劫持





