0x00
一般在服务器返回Content-type: text/plain的时候,浏览器都不会去解析其中的代码。
但是IE在这方面有了个小Bug导致有可能绕过这个限制。
0x01 神秘的.eml文件
.eml文件,按字面上来看就是一个email格式。实际上它是OutLook的Email格式。
在这里,我们给出一个.eml文件范例
TEST.EML
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable
=3Cscript=3Ealert=28document.domain=29=3C=2fscript=3E
当我们在IE中打开这样的链接
http://127.0.0.1/test.eml
他会弹窗让你下载。
但是,当我们设置Apache的.htaccess文件如下时
AddType message/rfc822 .eml
再次打开链接,会发现,IE将其直接渲染了,并且成功弹窗!
这是因为IE识别Content-Type将邮件内容直接渲染。
0x02 Bypass text/plain
有了上面的基础之后,我们可以尝试利用IE这个小bug来绕过Content-Type的限制。
例如我们可以将邮件内容换为一个指向text/plain的iframe,这样当我们访问邮件链接时,会发现成功执行text/plain页面的内容,并且是在目标域下。
这样就能成功XSS了。