目录

  1. 1. 前言
  2. 2. jwt2struts

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

*CTF 2023

2023/7/29 CTF线上赛
  |     |   总文章阅读量:

前言

首先这个*是全角字符不会被hexo渲染

其次web总共只有一题

web手的末日.jpg(x

web ak了(大嘘

jwt2struts

hash长度扩展攻击+jwt+struts2

进入题目,f12发现hint

image-20230729143740431

访问/JWT_key.php

 <?php
highlight_file(__FILE__);
include "./secret_key.php";
include "./salt.php";
//$salt = XXXXXXXXXXXXXX // the salt include 14 characters
//md5($salt."adminroot")=e6ccbf12de9d33ec27a5bcfb6a3293df
@$username = urldecode($_POST["username"]);
@$password = urldecode($_POST["password"]);
if (!empty($_COOKIE["digest"])) {
    if ($username === "admin" && $password != "root") {
         if ($_COOKIE["digest"] === md5($salt.$username.$password)) {
            die ("The secret_key is ". $secret_key);
        }
        else {
            die ("Your cookies don't match up! STOP HACKING THIS SITE.");
        }
    }
    else {
        die ("no no no");
    }
}

逻辑很简单,username必须等于admin,password不能为root,cookie的值digest要等于md5($salt.$username.$password)

在password这里测试了一下,发现几种编码绕过判断的方法都不管用

那只能强行让md5的值相等,但是爆破$salt的话要爆破10的14次方次,明显不现实

所以这里得用hash长度扩展攻击

image-20230729144232433

\x得改为%

image-20230729144315428

拿到secret_key为sk-he00lctf3r

回到首页,拿到set-cookie中的access_token,去jwt.io解码

image-20230729144603055

带上key修改user为admin

image-20230729144754462

带上cookie来到/admiiiiiiiiiiin页面

image-20230729144812079

接下来是Struts部分

Struts2Scan脚本直接扫(f12发现对应的路由在/user.action下)

python Struts2Scan.py -u http://140.210.223.216:55557/admiiiiiiiiiiin/user.action

image-20230729150139303

几个漏洞试了一下,能命令执行的只有S2-016

python Struts2Scan.py -u http://140.210.223.216:55557/admiiiiiiiiiiin/user.action -n S2-016 --exec

在环境变量里面找到flag

image-20230729150537976

flag:

*CTF{7r0m_jwt_t0_struts2}