https://dreamhack.io/lecture/roadmaps/1
[ Web STAGE 8: File Vulnerability ]
[ File Upload Vulnerability ]
: 공격자의 파일을 웹 서비스의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점
: 파일 시스템 상 임의 경로에 원하는 파일을 업로드하거나 악성 확장자를 갖는 파일을 업로드할 수 있을 때 발생
: 원하는 시스템 커맨드를 실행하는 원격 코드 실행 취약점 유발 가능
: 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생
: 파일 이름에 이용자가 입력한 문자열을 그대로 사용하거나, 이용자의 이메일, 닉네임 등을 포함시키는 등
소스 코드 패턴이 취약점의 원인
→ Path Traversal / 악성 파일 업로드
1. Path Traversal
: 파일 업로드를 허용하는 대개의 서비스는 보안을 위해 특정 디렉터리에만 업로드 허용
: 위와 같은 제한이 없다면 악의적인 이용자가 웹 서버의 소스 코드나 서버에 있는 중요 시스템 파일을 덮어쓸 위험이 있음
: Path Traversal 취약점 à 업로드에 존재하는 이러한 제약을 우회하여 임의 디렉토리에 파일을 업로드할 수 있는 취약점
2. 악성 파일 업로드
: 이용자가 파일을 업로드할 때, 이를 제대로 검사하지 않아서 발생하는 취약점
1) 웹 셸
- 웹 서버는 .php, .jsp, .asp와 같은 확장자의 파일을 common gateway Interface(CGI)를 실행하고, 그 결과를 이용자에게 반환함
2) 악의적인 웹 리소스
- 웹 브라우저는 파일의 확장자나 응답의 Content-Type에 따라 요청을 다양하게 처리함
→ 요청한 파일의 확장자가 .html이거나, 반환된 Content-Type 헤더가 text/html일 경우
: 응답은 HTML 엔진으로 처리
→ 파일의 확장자가 .png, .jpg 등의 이미지 확장자이거나, Content-Type이 image/png일 경우
: 응답은 이미지로 렌더링
- 만일 공격자가 서버에 exploit.html을 업로드하고, 이에 접근하는 URL이 https://dreamhack.io/uploads/exploit.html이라면, 브라우저는 이를 HTML로 해석함
이때 exploit.html에 악의적인 스크립트를 삽입하면, cross-site-scripting(xss) 공격으로 이어질 수 있음
[ File Download Vulnerability ]
: 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드하는 과정에서 발생하는 보안 취약점
: 이용자가 다운로드할 파일의 이름을 임의로 정할 수 있을 때 발생
: 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드할 수 있음
: 설정 파일, 패스워드 파일, 데이터 베이스 백업 본 등을 다운로드 하여 민감한 정보를 탈취할 수 있고 2차 공격 수행
가능
→ 대응 방안
: 웹 서비스는 이용자가 업로드한 파일을 다운로드 받거나 이미지를 불러올 때 특정 디렉터리에 있는 파일만
접근하도록 해야 함
* 파일 다운로드 취약점이 자주 발생하는 URL 패턴
1) https://vulnerable-web.dreamhack.io/download/?filename=notes.txt
2) https://vulnerable-web.dreamhack.io/download/?filename=../../../../../../etc/passwd
3) https://vulnerable-web.dreamhack.io/images.php?fn=6ed0dd02806fa89e233b84f4.png
[ 실습 ]
실습은 위의 코드에서 secret 값을 읽는 것이다!
이건 디렉터리~
지금 app/src/uploads/upload.txt의 위치게 있고
이걸 /proc/self/environ으로 이동해서 secret 값을 알아내야 한다.
이렇게 해주면 melon이라는 값을 얻을 수 있다!
→ 결론
[업로드 취약점을 막기 위한 방법]
1) 개발자가 업로드 디렉터리를 웹 서버에서 직접 접근할 수 없도록 개발
2) 업로드 디렉터리에서는 CGI가 실행되지 않도록 하기
3) 업로드된 파일 이름을 그대로 사용하지 않고 basepath와 같은 함수를 사용하여 파일 이름을 검증 후 사용
4) 허용할 확장자를 명시해 그 외의 확장자는 업로드될 수 없도록 하기
[다운로드 취약점을 막기 위한 방법]
1) 요청된 파일 이름을 basepath와 같은 함수를 통해 검증
2) 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 하기
'Webhacking > 개념' 카테고리의 다른 글
[Web] Dreamhack STAGE 7 (0) | 2022.08.27 |
---|---|
[Web] Dreamhack STAGE 6 (0) | 2022.08.27 |
[Web] Dreamhack STAGE 5 (0) | 2022.08.26 |
[Web] Dreamhack STAGE 4 (0) | 2022.08.25 |
[Web] Dreamhack STAGE 1 ~ 3 (0) | 2022.08.15 |