CTF 북구 JWT

0x01로 문제 해결 방안

1, 우리가 처음 웹 사이트를 열고 힌트를 얻을 수있는 소스 코드를 볼 <!--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 구성.
여기에 사용되는 URL입니다 인코딩이나 디코딩 JWT를
그림 삽입 설명 여기 우리가 처음 원본을 입력 JWT String하고 Signing Key다음 수정 account한 후, JWT String변화가 일어날를 한 다음 위의 복사 JWT String대체 브라우저를 token. 당신은 플래그를 얻을 수 있습니다.

0x02로 요약

1, 때때로 우리는 소스 코드를 얻을 수없는 볼 수없는 Signing Key우리가 날려 버릴 수있는, 성공은 또한 도구 GitHub의 주소를 붙여 넣기, 행운에 따라 crack- JWT
구성 JWT 2 :

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

A의 중간 .연결, 때때로 우리는 필요 base64디코드.

게시 47 개 원래 기사 · 원 찬양 2 · 조회수 3147

추천

출처blog.csdn.net/a3320315/article/details/102810981