利用MIME sniffing进行攻击

这是一个比较有意思的研究,就是一个网站的数据返回包中,如果没有设置content-type这个数据头的话,而且内容是可操控,那么我们就可以利用MIME让浏览器把文件当作网页来显示。

比如说,一个网站如果可以上传图片,只检查了文件名,我们可以在内容中插入一段html代码,内容可以是一个xss的payload,如果服务器在输出这个图片的时候,没有自动加上content-type,浏览器就会将其当作网页执行,然后出现弹窗。

但是现在问题在于服务器会自己自动加上content-type这个头

那么还有一种方式,apache有一种特性,就是文件名如果是只有.的话,那么就不会返回content-type这个头,那么我们的文件就可以成功当作网页读取了,具体如下。

上传文件,然后直接访问

这种方式,其实在现实环境下,基本上大多数的网站都存在着将文件名修改之后保存的操作,所以限制很大。

那么什么样的centent-type才会被浏览器解析为网站呢,

application/zip

application/json

application/octet-stream

text/html

text/json

text/plain

huli/blog

font/woff2

这些返回头都是可以解析为网页的。

想要关闭这种机制,我们只需要在返回包种新增一个数据头:

X-Content-Type-Options: nosniff

这样上面的就都不可以执行了。