웹/웹 보안

File Download 취약점

비니화이팅 2018. 7. 22. 11:41

File Download 취약점

이번에는 파일 다운로드 취약점에 대해서 살펴보도록 하겠습니다.

말 그대로 허용된 파일 외의 파일이 다운로드가 가능한 취약점입니다. 웹 애플리케이션에서 파일명을 필터링하지 못했을 경우 발생합니다.


파일 다운로드 취약점 패턴은 다음과 같습니다.

1. 다운로드 가능한 파일이 올려져 있다.

2. 해당 파일-우클릭-속성-주소에 상대경로와 패스명이 나온다. (이를 이용하여 파일 다운을 받을 수 있습니다.)

 

아래는 예시입니다.

보통 ../을 7개~10개정도 입력하면 대부분 커버가 가능합니다.

(http://server/link.php?file=../../../../../../../../etc/passwd)

(http://server/link.php?file=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd) -> URL인코딩

(http://server/link.php?file=Li4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZA==) -> BASE64인코딩


Tip이 있습니다.

윈도우는 대소문자를 구분하지 않지만, 리눅스는 대소문자를 구분합니다.
이것을 구분하여 이 서버가 윈도우 기반인지 리눅스 기반인지 알 수 있습니다.

대문자로 바꿔도 그대로 다운이 받아진다면 윈도우라고 쉽게 알 수 있습니다.

또한, jsp나 php이면 리눅스일 가능성이 높습니다.


실습해보도록 하겠습니다.

직접 구글에서 파일 다운로드 사이트를 검색하여 취약점을 찾아봅시다.
① 파일 다운로드 사이트 검색


② 파일 다운로드 여부 확인

검색된 사이트에서 직접 파일 다운로드가 가능한지 살펴봅니다.


③ 다운로드 경로를 복원

검색된 결과의 패턴은 아래와 같습니다. 보안상 캡처하지는 않았습니다.

홈페이지 명에서 우클릭-속성을 클릭하여 url을 복사합니다.

홈페이지 명

URL

설명 


이것을 디코딩합니다. 보안상 가렸습니다.


필요없는 부분은 지워 다운로드 경로를 복원합니다. 마찬가지로 보안상 가렸습니다.

이미 알고 있는 사이트라면 구글링을 하지 않고 직접 해당 사이트에 들어가 다운로드 파일 우클릭-속성으로 알아내어 동일한 방법으로 진행하시면 됩니다.

④ 파일 다운로드 취약점 점검

 실제로 다운로드가 되는지 확인해봅니다.

http://~~~~~/~~~/download.php?path=../../../../../../../../../../etc/passwd


 

대응책

아래의 코드처럼 특수문자 필터링을 합니다.

1
2
3
4
5
6
if(strstr($filename,"../")||strstr($filename,"..\\"))
{
echo "<script>alert('Access Denied!!')</script>";
echo "<script>location.href('/index.html')</script>";
exit();
}
cs


직접 적용해보니 필터링이 잘 되는 것을 확인할 수 있습니다.