OSS 的签名直传签名一般长这样
{
"accessid": "MlLTAI5Zt...",
"host": "https://oss-cn-shanghai.aliyuncs.com",
"policy": "eyJleHBpcmF0aW9uIjoiM....",
"signature": "TXKWgd+kz3Qy3bEOlZO+zPd4ZLY=",
"expire": 1743080451,
"callback": "ja1VybCeyJjYWxsYmFI6Im...",
}
解码一下上传策略 policy
{
"expiration": "2025-03-22T10:00:51Z",
"conditions": [
["starts-with", "$key", "image/2025/"],
["content-length-range", 0, 2048],
["in", "$content-type", ["image/png"]]
]
}
解码一下上传策略 policy
看一眼 content-type 你通过脚本 curl 啥的都行组装一个 form-data 表单 把一个 vme50.apk 塞给表单
-
key = image/2025/vme50.apk
-
file = binary content-type image/png 人工陪成 签名里面要求的就行
然后你文件就传上去了,你通过对方的 url+/image/2025/vme50.apk 就能访问了
就是你找个大站,只要用 oss 直传的 你传个 html 都可以,整点视频,都可以随便传。
讨论区:
1、micate
如果你允许用户上传文件且允许上传之后的文件公开访问,理论上就可以被利用为 图床、x 床,因为用户完全可以通过修改文件后缀、分割大文件的方式来滥用上传和访问; 可以通过限制 referer 的方式避免站外引用;或者设置 bucket 为私有 + 登录后可访问(临时签名 token )的方式来实施上传、访问限制。
2、my3157
客户端直接上传就是这样,签名的时候把 Content-MD5 加进去就可以了
3、night98
你这个本来就是上传策略写的有问题,正常应该就是写死具体上传路径比如前端请求的 abc.jpg ,你给他返回的就是只能上传到 images/2025/唯一标识-abc.jpg 这个路径,而不是通用前缀。至于他传上来的 abc.jpg 到底是图片还是视频文件本来就不重要。
4、lyxxxh2
content-type 验证确实没用。 之前自己站验证的 content-type,然我我 burpsite 抓下包。 改下 image/pn,php 木马就上传了。
脚本到 oss 就到呗,还整改,醉了。 传些木马到一些大站,举报他们网站有木马。
5、mcfog
正常设计收上传的桶应该是个隔离暂存的桶,传完自己 check 过没问题再挪到持久存储的正式的存储中。其他各种稀奇古怪的垃圾直接用短 TTL 全鲨了
6、varrily [ "eq", "$key", "upload/6yKip7EGqYB.jpg" ],
前端限制文件类型选择,后端随机文件名+限定扩展名,私有桶+签名访问。
但用户把一个 apk 改成 jpg 肯定是防不住的,也没什么影响。
7、fdrag0n
云上传后端不处理文件,所以理论上可以上传任何文件。
如果担心被盗刷流量可以考虑:限制外站引用+签名+限制返回 content-type 白名单+图片云端转码等方式来防止被拿去当盗版视频分片
原文始发于微信公众号(土拨鼠的安全屋):OSS 签名绕过上传任意文件到别人的网站
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论