[Dreamhack] file-download-1

ahzero·2023년 5월 25일
0

Web Hacking

목록 보기
6/6


풀이일 : 2023/05/25

문제 접속 링크에 접속하면 Home 페이지에 지금까지 업로드 한 메모를 확인할 수 있고, Upload My Memo 페이지로 이동하면 새로운 메모를 업로드할 수 있다.

이번에는 문제의 소스 코드를 함께 살펴보자.
문제의 소스코드는 app.py 파일에는 세 가지의 페이지가 존재하는 것을 확인할 수 있다.

첫 번째는 Home 페이지

업로드된 메모 파일들의 리스트를 화면에 보여준다.

두 번째는 upload 페이지

사용자로부터 filename과 content를 받아오는 것을 확인할 수 있다.
만약 filename에서 '..'이라는 문자열이 나오면 'bad characters,,'라는 결과를 화면에 출력한다.
filename에 문제가 없는 경우 content를 UPLOAD_DIR에 write하는 것을 확인할 수 있다.


-> 파일명에 '..'가 포함되면 'bad characters,,'가 출력된다.

마지막으로 read 페이지가 있다.

filename을 받아 해당되는 파일을 UPLOAD_DIR에서 찾아 읽는 방식이다. 파일이 존재하지 않는 경우 에러 메시지를 출력한다. 이 때 주목해야 할 점은 read를 위해 파일을 다운 받을 때에는 filename을 필터링 하지 않는다는 점이다.

이전에 업로드 한 read?flag.py라는 제목의 메모를 읽어보자.

메모의 이름을 클릭하면 메모의 내용과 함께 read 페이지에 파일명이 전달되는 방식을 확인할 수 있다.

http://host3.dreamhack.games:23251/read?name=read?flag.py

/read?name=파일명 의 방식이다.

문제에서 플래그는 flag.py에 존재한다는 것을 알 수 있다. 위의 방식을 이용하여 직접적으로 flag.py에 접근해 보자.

UPLOAD_DIR에는 flag.py가 없다.

그렇다면 상위 디렉토리에 접근해 본다.

flag.py 다운로드에 성공하였다!
플래그는 DH{uploading_webshell_in_python_program_is_my_dream}

0개의 댓글