前言
在挖某src的时候发现的一个比较有意思的案例,通过一系列简单的操作,可以遍历全桶的文件。
发现点
在找资产的过程中发现了一个物流相关的小程序,发现一个可以上传的功能点。
进入添加货物添加,里面有个图片上传,是上传到桶里。
请求中隐去无关参数,关键参数是good_image,里面是一个key(图片的“路径”)。
然后再去获取这个对应的货物详情,发现返回的图片地址已经在后台给你签了名了。
直觉告诉我,这里有个问题,可以继续深入。
深入
既然后台会去给我传入的图片签名,那么可以测试的点来了,我如果输入的图片不是真实的key,直接是根目录呢?
再获取一下对应的详情,惊喜来了,根目录直接签名了。
直接访问已经能列出桶里面的文件了。
可以直接根据里面的key,再重复修改上面的good_image,让后台进行签名,来读取桶里的任意文件。
为了获取更多的文件,这里用到桶的两个参数。不同的厂商的可能有区别,这里是阿里的。
一个参数是max-keys,它定义了在一次请求内OSS返回文件和文件夹最大的数目,默认值是100,最大可以设成1000。当一个文件夹内有超过1000个文件时,可以利用另一个参数——marker。这个参数告诉OSS从指定的文件开始,按照字典序查其后面的文件。
直接看实例。
总结
这里只是关于桶的一个比较少见的玩法。常见的桶的玩法也就那么几种,要么遍历,要么劫持,要么密钥泄露,要么上传问题。
碰到的时候,一定要细细的测,再不济一个中危还是有的。