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
디코드.