본문 바로가기
웹 취약점 분석

파일 다운로드 취약점

by 웹하는빡통 2019. 10. 4.

파일 다운로드 취약점이란? 

파일 다운로드 기능이 존재하는 웹에서 파일 다운로드 시 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 이를 적절히 필터링 하지 않으면 공격자가 이를 조작하여 허용되지 않은 파일을 다운 받을 수 있고 임의의 위치에 있는 파일을 열람하거나 다운받는 것을 가능케 하는 취약점.

 

 

파일 다운로드 발생원인.

 Download.jsp 페이지가 있다고 가정함. Download.jsp는 웹 서버의 upload폴더에 존재하는 파일의 이름을 file이라는 파라미터로 입력 받으면 그 파일을 다운로드하게 해주는 페이지이다.

" http://test.kr/Download.jsp?file=abc.txt "

이렇게 요청을 하면, test라는 웹 서버는 upload폴더 안의 abc.txt파일을 찾아 다운로드 시켜줌.

" hxxp://gsinfo.kr/Download.jsp?file=../../../../../../etc/passwd "

upload 폴더에서 6개의 상위 폴더에 있는 etc/passwd파일을 요청 upload 폴더에서 상위폴더로 계속 올라가게 되면 /(루트)폴더일 경우, 결론적으로 /etc/passwd를 요청하게 되고, 그 사용자는 서버의 시스템 파일을 획득하게 됩니다.

 

 

1. 파일 다운로드 취약점을 이용하여 Index.asp확장자 파일 다운받기.

1.확장자 파일 .jpg를 업로드 후 오른쪽마우스로 요소검사에 들어가 파일 다운로드 경로가 있는지 확인한다.

2. 파일 다운로드 경로가 있는 것을 파악 할 수 있다.

3. 파악한 파일 다운로드 경로를 URL주소에 넣어 /&filename=index.asp로 다운로드 할 파일이름으로 변경후 파일 다운로드를 시도 한다.

 

4. 그 결과 해당 index.asp 확장자 파일의 소스코드를 다운받았다.

 

 

2.소스코드 분석.

그러면 왜 이 사이트에서 파일 다운로드 취약점이 발생한 걸까?? 그 이유를 알기 위하여 소스코드 분석을 해보자.

 

1. upload_folder = "\upload\" upload파일이 저장됨.

 

2. path = trim(request("path"))

filename = trim(request("filename"))

해당 path(내 파일경로), filename(파일이름)에 대한 해당 URL 파일경로 요청값에 대한 검증이 제대로 이루지지 않은 상태에서 그대로 요청된다.

 

그 결과 검증되지않은 파일경로 요청값이 그대로 파일이 출력됨(파일다운로드)

 

결론: 파일다운로드 경로 URL\upload\경로를 삭제

why?

/down1.asp?path=\upload\&filename=abc.txt -> path=\&filename=index.asp로 변경시

objStream.LoadFromFile server.mappath(".") & path & filename으로 읽어드리게 되고 해당 파일을 출력한다.

why?

/upload/../../filename 사이에 ../../../삽입

objStream.LoadFromFile server.mappath(".") & upload_folder(upload파일이 저장됨) & filename으로 읽어드리고 파일을 출력한다.

 

그래서 파일다운로드 취약점이 발생하는거임 ㅇㅇ

 

댓글