ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BSidesSF 2020 CTF] recipes
    CTF Writeup 2020. 2. 26. 02:33

    [recipes] https://recipes-0abb43f9.challenges.bsidessf.net

     

    RecipeServ

    This is the super secure recipe storage service!

    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

    댓글

@Jo Grini's Blog