김승현

[PicoGym] picoCTF JAuth 풀이 본문

Web/PicoGym

[PicoGym] picoCTF JAuth 풀이

kshind 2023. 5. 23. 16:44

이번 문제는 설명이 긴데 그냥 다른 툴이나 그런 걸 그대로 가져다 써서 취약점이 발견되는 경우도 많고 뭐 그냥 admin으로 로그인 하라는 내용이고 test/Test123!로 임시 로그인 해볼 수 있다고 한다.

접속해보자.

접속하면 이런 로그인창이 뜬다. test/Test123!로 로그인 해보자.

testing page에 접속은 했지만 아무것도 볼 순 없다고 한다. cookie 값도 확인 해보자.

토큰이라는 이름으로 쿠키 값이 하나 있다.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoxNjg0ODI0MDIxNjg1LCJhZ2VudCI6Ik1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjEyNyBTYWZhcmkvNTM3LjM2Iiwicm9sZSI6InVzZXIiLCJpYXQiOjE2ODQ4MjQwMjJ9.jIaO1kFiaM82QqwJGm7LAD8xRJDHsinE-JTLnhotFug

잘 보면 두 개의 점이 찍혀있다. 이런 식으로 된 거는 jwt라는 json web token이 있다. 해독 사이트에 가보자.

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io


오른쪽을 보면 role이 일단 user로 되어있다. 헤더의 alg를 none으로, role을 admin으로 바꾸고 시그니쳐를 삭제해주자

이렇게 바꿔줬다. 여기서 디코더 내용을 바꾸면 인코딩 내용이 바뀔 수도 있는데 이때는 그냥 base64로 인코딩해서

값을 넣어줘도 된다. 인코딩된 값을 쿠키에 넣어보자.

아래는 입력한 쿠키 값이다. (원래 점 두 개를 이용해서 헤더, 페이로드, 시그니쳐 세 개의 파트로 나눠지기 때문에

none을 이용해서 시그니쳐를 무시한다고 해도 payload[보라색] 끝에 .을 붙여줘야 된다)

더보기

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdXRoIjoxNjg0ODI3NTkwNjY5LCJhZ2VudCI6Ik1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC4wLjAgU2FmYXJpLzUzNy4zNiIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTY4NDgyNzU5MX0.

이렇게 넣고 f5(새로고침)을 하면

까먹고 끝에 .을 안 넣어서 계속 flag가 안 나와서 당황했다ㅎㅎ....