파일 다운로드 취약점이란?
파일 다운로드 기능이 존재하는 웹에서 파일 다운로드 시 파일의 경로 및 파일명을 파라미터로 받아 처리하는 경우 이를 적절히 필터링 하지 않으면 공격자가 이를 조작하여 허용되지 않은 파일을 다운 받을 수 있고 임의의 위치에 있는 파일을 열람하거나 다운받는 것을 가능케 하는 취약점.
파일 다운로드 발생원인.
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으로 읽어드리고 파일을 출력한다.
그래서 파일다운로드 취약점이 발생하는거임 ㅇㅇ
'웹 취약점 분석' 카테고리의 다른 글
검증되지 않은 리다이렉트- 페이스북 계정 해킹(시나리오 기반) (0) | 2019.11.03 |
---|---|
불충분한 인가-강제 게시글수정 (4) | 2019.10.04 |
불충분한 인증-회원가입 우회. (4) | 2019.10.04 |
Paramiter 변조 취약점(이론편). (0) | 2019.10.03 |
SQL Injection(취약한 컬럼수 찾기) (0) | 2019.10.02 |
댓글