CTF bukgu jwt

0x01 解题思路

1、我们先打开网址,查看源码得到hint<!--hint:NNVTU23LGEZDG===-->,这儿直接想到base64解码,但是一直解不出来,后来试了试base32解码,成功!(思维太局限了)。
2、解码成功后得到账号和密码kk:kk123
3、我们登录进去得到提示
在这里插入图片描述
diary中提到了vim,我们首先想到的就是源码泄露,于是我们直接用dirsearch脚本扫,得到/src,下载.swp文件,然后用vim -r 恢复文件得到源码。

<?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 "账号或密码错误";
        }
    }
?>

从源码中我们可以看见cookie使用了jwt,同时我们得到了KEY = 'L3yx----++++----';然后构造jwt替换浏览器中的token。
我这儿使用的网址是Encode or Decode JWTs
在这里插入图片描述我们先输入原本的JWT StringSigning Key,然后修改account,此时JWT String就会发生改变,然后复制上面的JWT String替换浏览器中的token。就可以得到flag。

0x02 总结

1、有时候我们看不到源码就不能得到Signing Key,我们可以进行爆破,成功还得看运气,贴上工具github地址jwt-crack
2、jwt的组成:

  	Header(头部)
    Payload(负载)
    Signature(签名)

中间用.连接,有时候需要我们base64解码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值