문제 설명
File Download 취약점이 존재하는 웹 서비스입니다.
flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다.
주어진 사이트에 들어가보면, 자신의 메모를 작성하는 사이트임을 알 수 있다. Filename과 Content에 작성한 내용 그대로 나오는 것을 볼 수 있다.
flag.py를 다운받아야 하므로, 이번에는 Filename란에 flag.py를 입력해봤다. Content에는 아무렇게 써넣었다.
이렇게 다운받아야 하는 파일명인 flag.py를 입력했는데, 어떠한 변화도 일어나지 않았다.
그래서 주어진 파이썬 코드를 찾아봤다.
(여기서부터 헷갈리기 시작해서 조금 구글링의 도움을 받았다.)
filename에 '..'을 포함한 글자를 입력하면 bad characters,,라는 문구가 뜨도록 설정해둔 것을 확인할 수 있다.
또한 read_memo 함수를 보면 여기에는 '..'을 포함한 글자를 입력해도 문제가 없다.
파이썬 코드와 같이, filename에 ../flag.py를 입력하면 역시 bad characters,,라는 결과가 나온다. '..'을 포함했기 때문이다.
그래서 '..'을 포함해도 되는 read를 찾아야 한다. read는 웹의 URL에 있었다.
flag.py앞에 '../'를 붙여주면
다음과 같이 플래그 값을 구할 수 있다.
'../'을 포함해야 하는 이유
'../'을 파일명 앞에 입력하면 해당 파일의 상위 디렉토리로 이동할 수 있다.
*디렉토리 : 컴퓨팅에서 파일을 분류하기 위해 사용하는 이름 공간
어디서 힌트를 얻어야 하는가
1. 파이썬 코드에서 filename에 '..'을 입력하면 메모가 등록되지 않게 막아둔 것
2. 파일 다운로드를 하는 것이 문제였던 것
왜 URL에 파일 경로를 입력해야 하는가
URL의 구조를 살펴보면 알 수 있었다. URL의 구조 중 '경로'에서 파일명이나 확장자 등의 정보를 쓰는 것을 보면 URL의 구조와 파일 경로는 긴밀하게 얽혀있다는 것을 알 수 있다. 이는 파일 다운로드의 취약점과도 관련이 있다.
(보다 자세한 정보를 얻고 싶다면 'URL 디렉토리'를 키워드로 검색하는 것을 추천한다.)
이 문제의 경우, 메모를 등록했을 때 URL이 read?name='filename'의 형태로 나오는 것을 보고 파악해야 했던 것이다.
개인 공부 목적으로 작성된 글이며, 틀린 정보나 해석이 있을 수 있음.
문제 링크 https://dreamhack.io/wargame/challenges/37
'슈포스 > 워게임' 카테고리의 다른 글
[web]Dreamhack_Flying Chars (0) | 2024.10.31 |
---|---|
[misc]Dreamhack_64se64 (0) | 2024.10.08 |
[web]Dreamhack_Carve party (0) | 2024.10.08 |
[web]Dreamhack_cookie (1) | 2024.09.29 |
(1)Dreamhack_Dream Beginners 정리 (2) | 2024.09.25 |