JWT와 관련된 20점짜리 웹해킹 문제
JWT는 JSON Web Token 의 약자로
선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 표준을 말한다.
웹에서 사용자 인증을 할때 사용한다.
이번 문제의 목표는 admin 권한으로 접근하는 것이다.
문제페이지에 접근하면 이렇게 로그인 창이 뜬다.
일단 기능을 좀 살펴보기 위해
아래쪽에 있는 Login as Guest! 버튼을 눌러
Guest 계정으로 로그인을 해보았다.
로그인을 하면 이렇게
Welcome guest to this website! :) 라는 문구가 뜬다.
문제페이지의 쿠키값을 확인해봤다.
jwt 라는 이름의 쿠키에 base64로 인코딩된 값이 들어있는게 보인다.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Imd1ZXN0In0.OnuZnYMdetcg7AWGV6WURn8CFSfas6AQej4V9M13nsk
자세히보면 하나의 인코딩된 값이 아니라 중간에 . 으로 구분된 3개의 덩어리로 이루어진 것을 볼 수 있다.
이렇게 되어있는것이 JWT 의 특징이다.
참고로 쿠키값을 확인한 저 프로그램은 크롬 확장프로그램 중 하나로
https://chrome.google.com/webstore/search/editthiscookie?hl=ko 이곳에서 설치할 수 있다.
CyberChef(https://gchq.github.io/CyberChef) 에서 Base64로 한번 디코딩 해보았다.
그랬더니 첫번째 필드와 두번째 필드에
각각 {"typ":"JWT","alg":"HS256"} / {"username":"guest"} 라는 데이터가 저장되어 있는것이 보였다.
참고로 HS256은 암호화 방식으로 SHA-256을 사용하겠다는 의미이다.
세번째 필드에서 지정된 암호화 방식을 이용해 JWT를 검증한다.
HS256 부분을 none으로,
guest 부분을 admin 으로 바꿔본다.
CyberChef에서 To Base64 를 고른 뒤에
Input으로 {"typ":"JWT","alg":"none"} / {"username":"admin"} 을 입력해준다.
아래쪽에 출력된 eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0= 와 eyJ1c2VybmFtZSI6ImFkbWluIn0= 를 따로 저장해준다.
문제페이지로 돌아와서
EditThisCookie를 이용해 쿠키값 수정한다.
아까 기억해뒀던
eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0= 는 맨 앞에,
eyJ1c2VybmFtZSI6ImFkbWluIn0= 는 두번째에 넣어준다.
알고리즘을 none 으로 설정했기 때문에 세번째 필드는 필요없다.
새로고침을 하면 플래그를 찾을 수 있다.
'워게임 > Root Me' 카테고리의 다른 글
[Root Me] PE DotNet - 0 protection - 리버싱 / IDA (53) | 2022.07.10 |
---|---|
[Root Me] Directory traversal - 웹해킹 (31) | 2022.07.09 |
[Root Me] ELF C++ - 0 protection - 리버싱 / IDA / GDB (64) | 2022.06.30 |
[Root Me] Flash - Authentication - 웹해킹 / FFDEC (56) | 2022.06.28 |
[Root Me] Insecure Code Management - 웹해킹/ Directory Listing / git (42) | 2022.06.25 |