bugku jwt

查看页面源码,发现了注释,<!–hint:NNVTU23LGEZDG===–>
很像是base64,但是不是,解密结果为未知字符。又去注了半天,没有跑出密码,后来看了大佬的wp才发现是base32,无语,思维定型了,开始的时候想着试试base32,自己把自己否定了,我tcl了。
注释内容base32解密后是kk:kkk123,猜测是账户和密码,登陆成功

信息上要用L3yx的身份登陆,扫描这个ip,发现了src
得到了.swp的源码,用vim -r还原文件,得到源码
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>在线日记本</title>
<form action="" method="POST">
<p>username: <input type="text" name="username" /></p>
<p>password: <input type="password" name="password" /></p>
<input type="submit" value="login" />
</form>
<!--hint:NNVTU23LGEZDG===-->
</html>
<?php
error_reporting(0);
require_once 'src/JWT.php';
const KEY = 'L3yx----++++----';
function loginkk()
{
$time = time();
$token = [
'iss'=>'L3yx',
'iat'=>$time,
'exp'=>$time+5,
'account'=>'kk'
];
$jwt = \Firebase\JWT\JWT::encode($token,KEY);
setcookie("token",$jwt);
header("location:user.php");
}
if(isset($_POST['username']) && isset($_POST['password']) && $_POST['username']!='' && $_POST['password']!='')
{
if($_POST['username']=='kk' && $_POST['password']=='kk123')
{
loginkk();
}
else
{
echo "账号或密码错误";
}
}
?>
看到了jwt
ctf中JWT
抓包,从cookie中获取信息

发现了token,我们在源码中得到了const KEY = ‘L3yx----+++±—’,构造L3yx的token,伪造成L3yx登陆,得到flag
可以构造的地址
构造地址1
将account:改为L3yx,上面的jwt会变化(地址翻墙会很快反应,不翻墙会一直卡)
构造地址2
将得到的token替换掉原有的,得到flag

进阶情况
需要爆破密钥key值,参见链接,待更新
参考链接
https://blog.youkuaiyun.com/a3320315/article/details/102810981
未学习链接
https://github.com/brendan-rius/c-jwt-cracker
1731

被折叠的 条评论
为什么被折叠?



