EYEN

[드림핵 웹 해킹] STAGE 8: File Vulnerability- download 본문

Wargame/Web

[드림핵 웹 해킹] STAGE 8: File Vulnerability- download

EYEN 2022. 10. 31. 11:07
  1. 의미: 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드 하는 과정에서 발생하는 보안 취약점
  2. 조건: 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드 받을 수 있다.
  3. 공격: 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

이렇게 앞에 ../를 세개 이상 해줘야한다. 이유는 몰겠당..

  1. 예방: 다운로드 취약점을 막으려면 요청된 파일 이름을 basepath과 같은 함수를 통해 검증하거나 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 해야 한다.