Toc
0 results found
白帽酱
GeekPwn 2020 云上挑战赛 cosplay! writeup
2020/07/14 CTF WRITEUP

学生党 业余挖洞 只会点web

第一次写writeup,不大会写,请多关照。

看到这个题目cosplay! 就先看了眼这道题 居然拿到了个一血 0.0

尝试上传文件

发现是通过COS(腾讯的对象云储存)上传文件

var Bucket = ‘933kpwn-1253882285’;
var Region = ‘ap-shanghai’;

var cos = new COS({
getAuthorization: function (options, callback) {
var url = '/GetTempKey?path=/upload';
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function (e) {
try {
var data = JSON.parse(e.target.responseText);
var credentials = data.Credentials;
} catch (e) {
}
if (!data || !credentials) return console.error('credentials invalid');
callback({
TmpSecretId: credentials.TmpSecretId,
TmpSecretKey: credentials.TmpSecretKey,
XCosSecurityToken: credentials.Token,
ExpiredTime: data.ExpiredTime,
});
};
xhr.send();
}
});

分析源码发现
这个页面是在本地利用从服务器获取的临时密钥给上传参数签名的
一般上传用的普通密钥 而且是在后端给请求做签名
但是临时密钥如果存在权限控制不当(临时密钥生成的时候可以限制操作方法和范围) 也可以在密钥有效期内完全控制储存桶(这道题就是这种情况)

访问 /GetTempKey?path=/ 取得临时密钥和令牌(临时密钥生成的时候可以限制操作路径)

根据腾讯COS的文档 使用临时密钥和令牌访问储存桶
为了方便这里使用腾讯云官方提供的PHP SDK 来操作储存桶


临时密钥没有操作限制 成功获取储存桶内所有的对象键列表


发现 Flag键名为 f1L9@/flag.txt



读取f1L9@/flag.txt 拿到 flag

本文作者:白帽酱
版权声明:本文首发于白帽酱的博客,转载请注明出处!