1. 极安网首页
  2. 网络安全技术

Location302跳转和CRLF场景下构造XSS漏洞攻击

最近日站时遇到了一个URL跳转,服务器直接将目标GET参数原样输出在Location:响应头中没做任何安全检查。

随后我发现该输出点还解析换行符和回车符,也就是存在CRLF

Location302跳转和CRLF场景下构造XSS漏洞攻击-极安网

然后我插入了多个换行符之后再插入一下HTML+JS语法,想借此构造反射XSS:

Location302跳转和CRLF场景下构造XSS漏洞攻击-极安网

但是问题来了,由于响应码是302,常用的浏览器如Chrome、IE、Firefox 不会解析HTTP响应正文,得想个办法绕过。

搜了下大佬们的文章,有了一个发现,其中Fortinet师傅描述了如何通过将Location响应头设置为以mailto://开头的URI来绕过302跳转以执行XSS。Bugcrowd论坛也有一些类似的讨论。大致思路都是通过给Location响应头插入一些特殊的协议来实现绕过。

基于此,我决定写个fuzz工具,我基于IANA(互联网号码分配机构)提供的协议列表,根据以下格式来测试是否能绕过302跳转:

  1. http://www.secvery.com/?redir=[URI_SCHEME]://demo.com%0A%0A[XSS_PAYLOAD]

最后发现只有如下两个协议能够绕过并且仅在Firefox浏览器上有效:

ws:// (WebSocket)
wss:// (Secure WebSocket)

Location302跳转和CRLF场景下构造XSS漏洞攻击-极安网

打开最新版本的Firefox(投稿时在最新版为v 82.0.2 测试成功)中的链接,可以看到在正确的域下执行了XSS,而没有被重定向:

Location302跳转和CRLF场景下构造XSS漏洞攻击-极安网

经过公开的讨论,后续发现如下:

Location: 空的Location响应头可以在Chrome上成功执行内容中的XSS代码。(投稿时在最新版 Chrome v86.0.4240.111测试成功)
Location: resource://URL 使用resource协议也可以在Firefox 81 上执行payload。(投稿时在最新版 Firefox v82.0.2测试成功)

本文转载:quentin(译文),不代表 极安网 立场,转载请注明出处:https://secvery.com/3617.html