当前位置: 首页 > news >正文

合肥国际网站建设正规平台北京建设银行支行查询官方网站

合肥国际网站建设正规平台,北京建设银行支行查询官方网站,外贸网站建设原则,物流信息网站建设前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…

前言

  在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。

作者更新了CTFHub系列,希望小伙伴们多多支持。

作者的CTFHub技能树汇总:

CTFHub技能树Web汇总-CSDN博客

基础知识

看完文章,在最底下就有flag。

这篇文章写的不错,本来还想总结一下JSON Web Token,但这篇其实已经把用到的知识都讲了,弄懂这篇就够了。

敏感信息泄露

JWT 的头部和有效载荷这两部分的数据是以明文形式传输的,如果其中包含了敏感信息的话,就会发生敏感信息泄露。试着找出FLAG。格式为 flag{}。

是一个登录框,随便输入,登录

在存储里看到token了

用base64解密一下,可以看到我们账号密码直接显示了,这就是敏感信息泄露

FLAG也直接显示了,注意要复制正确,别把FL处的“}“也复制了

(这个解法并不是很好,一会我们有别的方法)

注意:

Header Payload 串型化的算法是 Base64URL

JWT 作为一个令牌(token),有些场合可能会放到 URL里(比如 api.example.com/?token=xxx)。Base64 有三个字符+、/和=,在 URL 里面有特殊含义,所以要被替换掉:=被省略、+替换成-,/替换成_ 。

这里最好还是用专门的jwt解密网站:https://jwt.io/

看着会更清楚

还是尝试登录,输入两个admin,复制token

用专门的网站解密

这个看着就清爽很多

然后把flag拼接起来即可

无签名

一些JWT库也支持none算法,即不使用签名算法。当alg字段为空时,后端将不执行签名验证。尝试找到 flag。

还是登录,然后拿到token解密

根据题目的提示

应该是将alg字段设置为none,这样后端将不执行签名验证。

同时我们将role改为admin试试

注意去掉=

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0

eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiJ9

然后用.连接起来,再然后别忘了最后还得加个.用来连接签名(虽然签名为空)

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJhZG1pbiIsInJvbGUiOiJhZG1pbiJ9.

弱密钥

如果JWT采用对称加密算法,并且密钥的强度较弱的话,攻击者可以直接通过蛮力攻击方式来破解密钥。尝试获取flag

这里很明显是要我们去进行JWT的弱密钥爆破

这里作者用的是c-jwt-cracker

GitHub - brendan-rius/c-jwt-cracker: JWT brute force cracker written in C

由于在kali上一直配不好,遂在docker里使用。

先从上面链接里下载zip文件,然后解压缩,放入kali中(作者的kali里已经安装docker了,没有安装的可以去找个教程),然后在该文件夹里打开终端(这里作者给文件夹改了个名),按照github里的指令执行:

具体的命令github里面都有,直接复制即可,只需要构建镜像、运行这两步

安装完成后,我们运行一下,把CTFHub上的JWT复制一下,替换github上给的实例,进行爆破

出结果了,作者的密钥是qrni

然后我们输入密钥,在线网站会显示签名已验证

然后我们把role改为admin

复制JWT

将role是admin的JWT写入cookie,然后刷新

出flag

修改签名算法

有些JWT库支持多种密码算法进行签名、验签。若目标使用非对称密码算法时,有时攻击者可以获取到公钥,此时可通过修改JWT头部的签名算法,将非对称密码算法改为对称密码算法,从而达到攻击者目的。

是一个登录框及源码

<?php
require __DIR__ . '/vendor/autoload.php';
use \Firebase\JWT\JWT;class JWTHelper {public static function encode($payload=array(), $key='', $alg='HS256') {return JWT::encode($payload, $key, $alg);}public static function decode($token, $key, $alg='HS256') {try{$header = JWTHelper::getHeader($token);$algs = array_merge(array($header->alg, $alg));return JWT::decode($token, $key, $algs);} catch(Exception $e){return false;}}public static function getHeader($jwt) {$tks = explode('.', $jwt);list($headb64, $bodyb64, $cryptob64) = $tks;$header = JWT::jsonDecode(JWT::urlsafeB64Decode($headb64));return $header;}
}$FLAG = getenv("FLAG");
$PRIVATE_KEY = file_get_contents("/privatekey.pem");
$PUBLIC_KEY = file_get_contents("./publickey.pem");if ($_SERVER['REQUEST_METHOD'] === 'POST') {if (!empty($_POST['username']) && !empty($_POST['password'])) {$token = "";if($_POST['username'] === 'admin' && $_POST['password'] === $FLAG){$jwt_payload = array('username' => $_POST['username'],'role'=> 'admin',);$token = JWTHelper::encode($jwt_payload, $PRIVATE_KEY, 'RS256');} else {$jwt_payload = array('username' => $_POST['username'],'role'=> 'guest',);$token = JWTHelper::encode($jwt_payload, $PRIVATE_KEY, 'RS256');}@setcookie("token", $token, time()+1800);header("Location: /index.php");exit();} else {@setcookie("token", "");header("Location: /index.php");exit();}
} else {if(!empty($_COOKIE['token']) && JWTHelper::decode($_COOKIE['token'], $PUBLIC_KEY) != false) {$obj = JWTHelper::decode($_COOKIE['token'], $PUBLIC_KEY);if ($obj->role === 'admin') {echo $FLAG;}} else {show_source(__FILE__);}
}
?>

这里输入admin及admin,登录

打印出了我们的JWT

看一下,加密方式是RS256,role是guest

读一下源码,这里发现要读出flag需要几个条件。

请求方式不是POST(这个简单,随便刷新一下就是GET,就不是POST),

cookie不为空且可以HS256解密(需要换加密方式,头部的alg字段也得由RS256改为HS256),

role要是admin(需要由guest修改为admin)

综上,我们编辑一下JWT的Header(头部)和Payload(负载)

{"typ":"JWT","alg":"HS256"}{"username":"admin","role":"admin"}

Base64编码一下

注意JWT是Base64URL。我们要去掉=,然后别忘了在头部和负载之间加上.

最后的结果是(大家可以直接复制):

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIn0.

把它打印出来的JWT的Header(头部)和Payload(负载)改为我们刚编辑的

然后用jwt_tool工具修改,这里要注意在jwt_tool文件夹下将给我们的公钥写入publickey.pem

jwt_tool工具生成JWT后按F12写入cookie中

然后再刷新(不要点Login,这是POST方法,POST方法不会输出flag)

http://www.yayakq.cn/news/245173/

相关文章:

  • seo站长网怎么下载wordpress 共存
  • 海口网站建设费用移动端网站如何开发
  • 新手自学做网站多久个人简历网站开发
  • 台州seo网站建设费用网站前台功能模块设计
  • 做catia数据的网站icon psd下载网站
  • 史志部门建设网站 说明制作网页时一般需要兼容哪些浏览器
  • 网站开发的未来展望做旅游网站的yi
  • 网站建设的话术推广之家
  • 淘宝上做网站的信得过吗服装设计网站大全
  • 成都科技网站建设电网站建设公司有哪些
  • 网站需要的栏目WordPress首页放图片
  • 网站建设管理制度实施方案自己做个网站怎么赚钱
  • 做网站卖产品微信公众号官网登录
  • 高邮市建设网站河南郑州网站关键词排名助手
  • 做网站兼容ie个人网站的建设与管理
  • dede 网站名称不显示实训网站建设的心得总结
  • 网站建设制系统如何安装wordpress
  • 牡丹江网站建设定制开发苏州网站建设自助建站模板
  • 温岭公司做网站湛江网站制作工具
  • 机械加工网站哪个好visualstudio 做网站
  • 网站美术视觉效果布局设计聊城做网站推广公司
  • 怎么把自己做的网站阿里巴巴吧做网站
  • 网页设计与网站开发试卷视频网站外链怎么做
  • 南京建设工程信息网站wordpress提示不安全
  • android 旅游网站开发成都网络优化网站建设
  • 建设网站公司兴田德润在哪里建设银行个人网上银行网页
  • 有没有做网站近期的新闻热点
  • 旅游网站设计asp火蝠电商代运营值得相信吗
  • 铜陵市网站建设广州哪里有做网站推广
  • 云南营销型网站建设百度登录入口官网