html 上传文件_对OSS文件上传的一次研究

背景

    在一次应急中发现OSS由于上传文件控制不严,被黑产利用,上传可执行html文件,进行引流,诱骗等操作,导致域名被微信封禁,影响业务。以下图片为当时黑产引流页面,由此引出此次对oss文件上传问题的以下研究。

60dae7c3bdbeaea327bc48cb750a0632.png

Oss文件上传漏洞危害

  • 可上传html文件,用于钓鱼、引流等,最终会导致域名被微信封禁,使得业务不可用
  • 存储型xss漏洞
  • 若文件上传后未进行随机名,可导致静态文件被覆盖,严重可导致网站主页被覆盖或静态html加入暗链引流等,带来严重影响

相关概念介绍

阿里云Oss:阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 Content-Type:HTTP请求头,请求报文中实体头部用于指示资源的MIME类型 media type ;在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。

危险的Content-Type

由于oss上传默认接收用户上传Content-Type值,且可为任意值,所以本次研究对象就是Content-Type
  • text/html
        该类型为html文件头,上传该类文件,会直接以html方式进行解析,无论文件后缀为何,注:不能使用完全匹配进行黑名单操作,可被增加编码绕过(如:Content-Type:text/html;charset:utf-8;)
  • */* 
        该类型为任意类型,会根据文件内容进行匹配,上传文件内容中存在html标签,文件将会被浏览器当做html文件来解析。注:必须有html标签,否则将不会被解析为html文件     测试代码如下:
<html><img src=x onerror=alert(2)>html
  • 不带/,随便一个请求头

    测试代码:

    <img src=x onerror=alert(1)>

38d0d3b7834220db5729cef78798666a.png

  • application/xml;application/xhtml+xml ;text/xml看上去人畜无害的xml,也能用来作恶。上述类型为XHTML文件类型,是更严谨更纯净的 HTML 版本。
        测试代码:
<html xmlns="http://www.w3.org/1999/xhtml"><script type="text/javascript">  alert(1);script> html>

    执行效果如下图

c593bf3593f4621929797429c7ac546b.png

  • image/svg+xml

    该类型为SVG文件格式,svg是使用 XML 来描述二维图形和绘图程序的语言。由于是基于XML解释,所以之前的XHTML的代码同样可以使用。以下为另一种标准svg代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns"><script>alert(1);script>svg>
MSEdge/IE浏览器特性接下来为神奇的微软系浏览器    application/postscript    application/octet-stream    application/javascript    text/webviewhtml    text/scriptlet以上标签在该浏览器都会以html格式解析文件 解决方案理想状态:    不接收前端content-type值,接口分类专用,后端设置content-type非理想状态:
  • 白名单Content-Type(缺点:由于业务复杂,白名单收集不全,导致业务不可用)
  • 黑名单Content-Type(缺点:由于各种类型复杂,可能存在漏网之鱼)
  • 文件随机命名,可避免文件覆盖问题
  • 对不信任文件设置Content-Disposition:attachment,该文件头告诉浏览器使用下载方式处理文件

到家集团安全部,愿与你共同成长

6bf1f5aa01f52b41c5763f2b3adeaf51.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值