bugkuctf jwt

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值,参见链接,待更新

爆破key

参考链接
https://blog.youkuaiyun.com/a3320315/article/details/102810981
未学习链接
https://github.com/brendan-rius/c-jwt-cracker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值