-
[BSidesSF 2020 CTF] recipesCTF Writeup 2020. 2. 26. 02:33
[recipes] https://recipes-0abb43f9.challenges.bsidessf.net
Boudin Bakery 의 레시피를 얻어야 한다.
회원가입 후 로그인하면 레시피를 등록할 수 있다.
image를 URL을 통해 입력한다. (SSRF가 가능할 것 같다.)
우선, 일반적인 .jpg의 URL을 입력해주었지만, 아래와 같은 에러가 발생하였다.
이미지 업로드하는 것을 포기하고, 이것저것 살펴보다 쿠키 값을 보았다.
Base64로 인코딩되어 있고, 중간에 .이 찍혀있는 것을 보아 JWT로 추측할 수 있다.
Base64 Decoding 하여 아래와 같은 값을 얻었다.
{"alg":"HS256","typ":"JWT"}{"exp":1582651472,"iat":1582647872,"iss":"recipebot","nbf":1582647872,"sub":"52026a60-cb84-4857-8960-7b08f538530a"}ɭ:g"&VQؒwa
JWT (JSON Web Token) 는 토큰 기반 인증 방식이다.
(공부하고 구현해보아야 겠다.)[Reference] https://velopert.com/2389
JWT를 잘 알지 못해 JWT auth bypass에 대해 찾아보니,
header의 alg의 값을 "none"으로 변경 후 signature를 삭제하는 방법이 있었다.
[Reference] https://medium.com/swlh/hacking-json-web-tokens-jwts-9122efe91e4a
Boudin Bakery의 레시피를 얻기 위해서는 Boudin Bakery의 sub 값이 필요하다.
해당 값을 찾아내기 위해 페이지 코드를 보다 숨겨진 /users 페이지를 발견하였다.
/users로 접근해보면 접근이 거부되면서, 친절하게 서버의 주소와 포트를 알려준다.
레시피 등록 폼의 URL을 이용한 image 업로드 기능을 이용하면 될 것 같다.
URL이 .jpg 또는 .png이어야 하기 때문에 아래와 같이 입력하였다.
업로드 후 레시피를 확인해 보았더니,
이미지가 Base64 로 인코딩 된 문자열이다.
해당 문자열을 디코딩하여 /users 페이지의 소스 코드를 얻었다.
코드에서 나의 아이디를 검색하여 JWT의 sub 값이 동일한 것을 확인한 후
boudin을 검색하여 두 개의 의심스러운 아이디를 찾았다.
아래와 같이 auth_token 값을 변경하였다.
{"alg":"none","typ":"JWT"}
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0=
{"exp":1582654290,"iat":1582650690,"iss":"recipebot","nbf":1582650690,"sub":"6180f0c8-778b-442f-a5ab-10e18bef4c2d"}
eyJleHAiOjE1ODI2NTQyOTAsImlhdCI6MTU4MjY1MDY5MCwiaXNzIjoicmVjaXBlYm90IiwibmJmIjoxNTgyNj
UwNjkwLCJzdWIiOiI2MTgwZjBjOC03NzhiLTQ0MmYtYTVhYi0xMGUxOGJlZjRjMmQifQ==
eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0=.eyJleHAiOjE1ODI2NTQyOTAsImlhdCI6MTU4MjY1MDY5MCwi
aXNzIjoicmVjaXBlYm90IiwibmJmIjoxNTgyNjUwNjkwLCJzdWIiOiI2MTgwZjBjOC03NzhiLTQ0MmYtYTV
hYi0xMGUxOGJlZjRjMmQifQ==.변경 후 새로고침하면,
boudin_bakery로 인증되어 내가 등록한 적 없는 4개의 레시피를 얻을 수 있다.
그 중 Flag Bread 레시피를 보면 flag가 있다.
'CTF Writeup' 카테고리의 다른 글
[BSidesSF 2020 CTF] had-a-bad-day (0) 2020.02.25 [Pragyan CTF] Kimi no Na Wa (0) 2020.02.24 [Pragyan CTF] Pandora (0) 2020.02.24 댓글