Search

파일 다운로드 이론

카테고리
[이론] 웹 공격위협
상태
완료
게시일
2024/04/26
태그
웹, 웹 해킹, 파일 다운로드

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

다운로드 권한이 없는 파일에 대해서 다운로드가 가능한 취약점
다운로드 권한이 없는파일 - 웹 서버 내부 설정파일(민감정보가 포함된 파일) - 웹 페이지 소스코드 (asp, jsp, php 등) - OS 파일

이 취약점은 어떤 부분에서 존재하는가?

다운로드 받을 수 있는 기능이 존재하는 웹 페이지
ex) 리눅스 웹 서버의 기본 디렉터리 : /var/www/html/
리눅스의 중요한 설정파일 -> /etc/shadow -> /etc/passwd <br> 웹 서비스의 파일 다운로드 기능 권한 : 웹 서버 권한 -> /etc/shadow (400) -r-------- (웹 서버가 접근할 수 없음) -> /etc/passwd (644) -rw-r--r-- (웹서버가 접근할 수 있는 권한이 존재)

파일 다운로드 취약점이 존재한다면 기본 디렉터리에서 벗어나 /etc/passwd와 같은 설정파일을 다운로드 받을 수 있다

CF) Spring/전자정부 Framework 인 경우에는 웹서버 내부 민감정보 파일의 경로 및 파일명이 동일

/WEB-INF/web.xml
/server.xml

파일 다운로드 취약점은 왜 발생하는가?

다운로드 경로가 상대경로로 되어있는 경우 ../ 를 사용하여 타고 넘어갈 수 있다
경로 순회 문자 (.. / \\)를 필터링하고 있지 않으며, 다운로드 기능을 가진 웹 페이지 제작 시, 첨부파일의 경로를 상대경로로 지정해둔 경우 파일 다운로드 취약점이 발생할 수 있음
점검 시 사용하는 경로 순회 문자 -> ../ ..\ <br> 필터링이 걸려있는 경우 -> 인코딩해서 사용 --> %2E%2E%2F (../), %2E%2E%5C (..\\)

실제 공격

다운로드 실행 시 보통 파일명, 해당 파일의 위치가 함께 파라미터 값으로 전송됨
→ 파일명 = [abc.txt]&경로 = (upload_file) → 해당 파라미터 값을 웹서버가 넘으면 웹서버는 다음과 같이 파일을 찾음 /기본 디렉터리/~ ~/upload_file/[abc.txt] -> 이 위에 있는 파일을 사용자에게 전송
파일명에 경로순회 문자를 같이 넣어서 전송, 원래 지정위치를 벗어나 다른경로에 있는 파일을 다운로드 받을 수 있다
→ 파일명 = [../../../../abc.txt]&경로 = (upload_file) → 해당 파라미터 값을 웹서버가 넘으면 웹서버는 다음과 같이 파일을 찾음<br> /기본 디렉터리/~ ~/upload_file/[../../../../abc.txt] → upload_file 보다 상위에 위치한 디렉터리의 파일을 사용자가 다운로드

왜 위험할까?

⇒ /demoshop/shop_board/~ ~ ~/upload_file/webshell.jpeg.asp ⇒ /demoshop/shop_board/upload_file/~ ~ ~/webshell.jpeg.asp
위와 같은 경로로 파일이 업로드 되었을 때 해당 경로를 유추하는 것은 불가 (공격 불가)
그러나 경로 순회문자를 여러번 사용하면 원하는 디렉터리로 이동 가능
실제 upload_file의 위치가 다음과 같을 때
/demoshop/shop_board/~ ~ ~/@@@/###/$$$/upload_file/webshell.jpeg.asp 해당 위치에 다운로드 취약점이 존재한다면 ⇒ 파일명 = [../../../../../../../../../../../../../../etc/passwd]&경로 = (upload_file) 위와 같이 경로 순회문자를 여러번 사용하여 최상위 디렉터리로 이동한 후 원하는 위치로 이동하여 다운로드 시도 +) 웹 페이스 소스코드 자체를 다운로드하려는 시도도 많다
게시글에서 다운로드를 하기위해 첨부파일을 클릭했을 때 전송되는 Request를 Burp suite 로 잡아보면 다음과 같은 경로가 노출
나중에 확인해서 적어야함 → shop_download.asp 해당 소스코드 파일을 다운로드 할 수 있다면 다운로드와 관련된 로직을 전부 알아낼 수 있음
공격 시도 ⇒ 파일명 = [shop_download.asp]&경로 = (upload_file) ⇒ 파일명 = [../shop_download.asp]&경로 = (upload_file) ⇒ 파일명 = [../../shop_download.asp]&경로 = (upload_file)

파일 다운로드 취약점 실습

대응방안

경로 순회 문자 필터링(.. / \\)
replace(); → replace는 우회 가능 (..../) → 따라서 .. , / 이런식으로 나눠서 replace 하는것이 좋다