UPLOAD TO XSS
能上传非法扩展文件 (或Apache服务器能上传名为.
的文件):
- 解析: 浏览器对静态文件解析的规则如下 (即解析优先级 响应Content-Type > 文件内容)
先根据响应中的Content-Type字段中的MIME值进行解析; 若响应无Content-Type,
则根据文件内容进行判断(对于二进制文件, 检测文件头; 对于html文件, 检测标签) - 如何访问静态文件 但响应无Content-Type:
- 对于大部分服务器(Apache Nginx等), 上传非法扩展的文件不会发送Content-Type
- 对于Apache, 若文件名为
.
, 即上传..合法扩展名
文件, 响应无Content-Type
- 前提: 可以上传非法扩展文件, 或Apache服务器能上传名为
.
的文件
这些情况可能使响应 无Content-Type字段(当然若为text/html是可以的) - 利用: 当满足前提时, 浏览器会检测文件内容来判断如何解析文件, 可上传内容为
<html>html内容</html>
的文件, 此时浏览器就会将其作为html进行解析 - 注: 通过文件内容判断时, 文件内容中 html标签外如果有内容就不能当作html进行解析, 所以当文件上传检测文件头时便无法利用
能上传非法扩展文件(特殊情况:Edge<=18/IE任意版本):
很难利用, 这些现在很少有人用了
- 原理: Edge<=18 / IE任意版本 检测文件如何解析的优先级为 文件后缀 > 文件内容 > 响应Content-Type, 所以可绕过 Content-Type (所以前提有变化)
- 前提: 可以上传非法扩展文件, 响应可有Content-Type
- 利用: 当满足前提时, 浏览器会检测文件内容来判断如何解析文件, 可上传内容为
<html>html内容</html>
的文件, 此时浏览器就会将其作为html进行解析 - 特性: 文件内容中 html标签外可有内容
- 复现: 旧版本的edge与ie很难下到了, 可以开启edge的ie模式进行尝试
其它
- 能上传html、htm文件: 直接插入xss攻击语句
- 能上传SVG、XML文件: 上传SVG, 内容为
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(1);"/>
或
<svg xmlns="http://www.w3.org/2000/svg"><script>alert(2)</script></svg>
<hack:script xmlns:hack="http://www.w3.org/2000/svg">alert(1);</hack:script>
链接可换为: http://www.w3.org/1999/xhtml - 能上传PDF文件: 使用工具直接插入xss攻击语句
工具: https://www.xunjiepdf.com/editor
注: 浏览器解析PDF是在沙箱环境中, 所以无法通过 PDFxss 获取cookie/造成csrf