EYEN
[드림핵 웹 해킹] STAGE 8: File Vulnerability- download 본문
- 의미: 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드 하는 과정에서 발생하는 보안 취약점
- 조건: 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드 받을 수 있다.
- 공격: Path Traversal 취약점과 함께 사용됨. 서버 파일 시스템에 존재하는 임의 파일을 다운로드하여 민감 정보가 포함된 파일, 예를 들어 데이터베이스 백업본, 외부 API 서버의 비밀키 등이 포함된 설정 파일등을 탈취할 수 있음
- Path Traversal 취약점
‘웹 서비스는 이용자가 업로드한 파일을 다운로드 받거나 이미지를 불러올 때 특정 디렉토리에 있는 파일만 접근하도록 해야한다.’ 를 우회하여 임의 디렉토리에 있는 파일을 다운로드 받을 수 있는 취약점을 말한다.
- 파일 다운로드 취약점이 자주 발생하는 URL 패턴
<https://vulnerable-web.dreamhack.io/download/?filename=notes.txt>
<https://vulnerable-web.dreamhack.io/download/?filename=../../../../../../etc/passwd>
<https://vulnerable-web.dreamhack.io/images.php?fn=6ed0dd02806fa89e233b84f4.png>
+File Download Vulnerability 실습
실습 서버 코드
# ...
Secret = os.environ("Secret")
# ...
@app.route("/download")
def download():
filename = request.args.get("filename")
content = open("./uploads/" + filename, "rb").read()
return content
# ...
환경 변수로부터 가지고 오는 Secret 값을 파일 다운로드 취약점을 이용해 획득하기
프로세스의 환경 변수는 /proc/[pid]/environ, /proc/self/environ에서 확인할 수 있다.
만약 이용자가 프로세스를 호출하기 전에 환경 변수를 bash의 명령어로 설정했다면, .bash_history에서도 이를 볼 수 있다.
../../../../home/dreamhack/.bash_history
이렇게 앞에 ../를 세개 이상 해줘야한다. 이유는 몰겠당..
- 예방: 다운로드 취약점을 막으려면 요청된 파일 이름을 basepath과 같은 함수를 통해 검증하거나 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 해야 한다.
'Wargame > Web' 카테고리의 다른 글
웹 1234 (0) | 2023.01.28 |
---|---|
[드림핵 웹 해킹] STAGE 8: File Vulnerability- upload (0) | 2022.10.31 |
[드림핵 웹 해킹] STAGE 7 : COMMAND INJECTION (0) | 2022.10.31 |
[드림핵 웹해킹] STAGE 6 : NO SQL INJECTION(Blind SQL Injection) (0) | 2022.10.31 |
[드림핵 웹해킹] STAGE 6 : SQL INJECTION (0) | 2022.10.31 |