보안개구리
[게시판 실습] - 파일 다운로드 (1) 파일 다운로드 시 지정된 경로 우회 가능 본문
[설 명]
공격자는 파일 다운로드 시 애플리케이션의 파라미터 값을 조작하여 웹 사이트의 중요한 파일(DB 커넥션 파일, 애플리케이션 파일 등) 또는 웹 서버 루트에 있는 중요한 설정 파일(passwd, shadow 등)을 다운받을 수 있다. 또한 cgi, jsp, php 등 파일 다운로드 기능을 제공해 주는 애플리케이션에서 입력되는 경로를 검증하지 않는 경우 임의의 문자(../.. 등)나 주요 파일명의 입력을 통해 웹 서버의 홈 디렉터리를 벗어나서 임의의 위치에 있는 파일을 열람하거나 다운로드하는 것이 가능하다. 파일 다운로드 시 허용된 경로 외 다른 경로의 파일 접근을 방지하여 공격자가 임의의 위치에 있는 파일을 ㅇ려람하거나 다운로드하는 것을 불가능하도록 하여야 한다.
[점검 내용]
웹 사이트에서 파일 다운로드 시 허용된 경로 외 다은 경로의 파일 접근이 가능한지 여부 점검
[점검 기준]
다운로드 파일이 저장된 디렉터리 이외에 접근이 가능한 경우 취약
[대응 방법]
* 다운로드 파일 이름을 DB에 저장하고 다운로드 수행 시 요청 파일 이름과 비교하여 적절한지 확인하여 사용자가 조작할 수 있는 변수를 제거함
* 다운로드 애플리케이션 소스 파일을 수정하여 파일을 다운받을 수 있는 디렉터리를 특정 디렉터리로 한정하고 이 외의 다른 디렉터리에서는 파일을 다운로드할 수 없도록 설정해야 함
* PHP를 사용하는 경우 php.ini 에서 magic_quotes_gpc를 on으로 설정하여 .\./와 같은 역 슬러시 문자 입력 시 치환되도록 설정
* 파일 다운로드의 절대 경로 설정 및 DocBase의 상위경로 또는 타 드라이브로 설정을 변경함
* 다운로드 경로 정보를 자바스크립트나 js 소스에서 확인할 수 없게 제한하며, 웹 서버 서블릿 내부 또는 별도의 설정 파일에서 관리
* 다운로드를 제공하는 페이지의 유효 세션 체크 로직 필수 점검
[진단 과정]
1) 'hacker' 계정으로 로그인 후 게시판 메뉴로 이동합니다.
2) 게시판 메뉴 이동 후 게시글 작성 시 임의의 파일을 업로드 후 게시글을 저장합니다.
3) 작성된 게시글을 조회 후 첨부된 파일을 다운로드합니다. 파일 다운로드 시 프록시를 통하여 요청값을 확인합니다.
4) 프록시 도구를 통하여 요청값 확인 시 2개의 파라미터 값을 전송하는 것을 확인할 수 있는데 realFileName은 실제 저장공간에 저장된 파일명을 말하며, originalFileName은 업로드 시 파일명을 말합니다.
즉 cat.jpg라는 파일을 업로드할 경우 cat.jpg라는 파일명은 originalFileName이 되고 똑같은 파일명이 여러 개 업로드될 경우 중복을 방지하기 위하여 realFileName이라는 것을 만들어 저장공간에 저장을 합니다.
5) 따라서 파일 다운로드 취약점을 실습 시 디렉터리 위치를 변경하기 위해서는 originalFileName이 아닌 realFileName 파라미터를 대상으로 실습을 진행해야 합니다. realFileName 파라미터 값에 ../index.jsp를 입력하여 index.jsp 파일 다운로드를 시도합니다. 디렉터리 이동 및 index.jsp 페이지가 정상적으로 다운로드됨을 확인하였습니다.
6) 또한 절대경로 입력을 통하여 C드라이브 내 콘솔 히스토리 파일 다운로드 시 파워쉘 히스토리 내역도 다운로드가 가능함을 확인하였습니다.
7) 소스코드내 디렉터리 이동 문자(.../ \\ /)를 입력 시 잘못된 파일 경로입니다 라는 메시지가 출력되도록 검증 로직을 추가하였고 파일 다운로드 가능한 디렉터리는 upload로 한정했습니다.
8) 소스코드 수정 후 다시 파일 다운로드 시도 시 이전과는 달리 잘못된 파일 경로라는 메시지가 출력되며 파일 다운로드에 실패한 것을 확인하였습니다. 인코딩하여 요청 시에도 역시 파일 다운로드가 불가능함을 확인하였습니다.
'웹 진단 > 게시판 실습' 카테고리의 다른 글
[게시판 실습] - SQL Injection (2) 데이터 조회 공격(Union-Based SQL Injection) (0) | 2024.08.16 |
---|---|
[게시판 실습] - 파일 업로드 (1) 웹쉘 파일 업로드 확인 (1) | 2024.06.16 |
[게시판 실습] - 불충분한 인가 (2) 삭제된 게시글 조회 가능 (0) | 2024.06.10 |
[게시판 실습] - 불충분한 인가 (1) 관리자 페이지 접속 시 검증 로직 미흡 (0) | 2024.06.10 |
[게시판 실습] - 불충분한 인증 (2) 타인의 게시글 수정 및 삭제 가능 (0) | 2024.06.10 |