【Web安全】浅谈缓存XSS漏洞
缓存XSS漏洞即为通过利用CDN of WAF缓存记录使被攻击者接受到存在XSS payload的缓存文件。
通常这些服务充当流量负载平衡和反向代理,并储存经常检索的文件,以此减少Web服务器的延迟。
工具介绍
本文中利用缓存XSS漏洞所使用的是curl,在开始之前我先简单介绍一下curl及使用方法。
curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。对于网页处理流程和数据检索自动化,curl有很强的处理能力。
文中使用的命令:
-iH
-i/–include 输出时包括protocol头信息
-H/–header <line> 自定义头信息传递给服务器
使用方法:
curl -iH "你想包含的header信息" 目标地址
利用方法
文中使用的程序,代码为:
<?phpecho json_encode(getallheaders());//php7.3才可正常运行
或者可以使用已经搭好的靶场,正常的响应:
方法:
curl -iH "test:<svg onload=alert(xss)>" https://brutelogic.com.br/lab/header.php?xxx(此处自己修改)
可以看见x-sucuri-cache值为MISS,多发送几次payload直到x-sucuri-cache变为HIT。
验证是否成功缓存(响应中存在payload即为缓存成功):
curl -i https://brutelogic.com.br/lab/header.php?同上
使用浏览器访问:
本文是借鉴了国外文章:XSS via HTTP Headers,链接:https://brutelogic.com.br/blog/xss-via-http-headers/
目前只是简单的复现了一下,对该漏洞的影响范围并不是很清楚。根据cdn缓存的工作原理,这个漏洞应该是可以影响到访问这个页面的用户,但是该靶场复现时却只能在本机成功,不清楚是靶场的设置还是cdn缓存本来就是这样。