ctfshow JWT 专题


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.keyurl/private.key 下载公钥私钥,将cookie里的 jwt 放到 jwt.io ,再将公钥私钥填进去,修改 user 为 admin 即可

image-20210925213400612

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


文章作者: yq1ng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yq1ng !
评论
 上一篇
ctfshow SSRF专题 ctfshow SSRF专题
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请
下一篇 
纵横杯2020 web wp 纵横杯2020 web wp
WankkoRee师傅、Mr.水函师傅带飞我,这次比赛学到不少东西,先放个排名,膜拜师傅们第一次ak web,后援团的大师傅们的思路都很骚,多多学习,今天被引号闭合搞了两次,以后注意,phar的闭合与cms的闭合 easyci hel
2020-12-26
  目录