728x90

File Download 공격

설명
서버에 존재하는 파일이 의도하지 않게 클라이언트로 다운로드 되는 취약점이다.
해커가 원하는 파일을 임의로 다운로드하거나 파일 내용을 노출시킬 수 있다.
 발생원인 애플리케이션 로직에서 파일을 클라이언트로 다운로드할 때 입력 값 검증을 하지 않을 경우 발생한다.
 위험성 공격자에게 권한이 없는 데이터를 획득할 수 있도록 하며, 시스템 정보 등 중요 파일을 획득할 수 있도록 한다.
 대응 ㅇ외부 입력값을 자원의 식별자로 사용하는 경우, 철저하게 검증한 후 사용한다.
ㅇ사용자별 사용 가능한 자원을 사전에 리스트로 정의하여 사용 범위를 제한한다.
ㅇ파일을 사용하는 경우, 파일명에 경로순회공격 위험이 있는 문자를 제거하는 필터를 이용한다.

 

공격자가 의도적인 공격을 방지하기 위해서는 웹사이트 게시판, 자료실 등에서 php 프로그램을 이용하여 파일을 다운로드 받은 페이지가 있는지 조사를 한다.

 

$file_id = $_REQUEST['file_id'];
if(strstr($file_id,"../") || strstr($file_id,"..\\")){
    echo "<script>alert('Access Denied!')</script>";
    exit;
}

 

와 같이 ../ 상위 폴더로 이동을 못하게 검사하여 처리하는 걸 추가한다.

JSP, CGI 기반인 경우에는 관련 코드를 추가하여 방지하도록 한다.

 

<?php
require_once '../sessionChk.php'// 세션 체크
 
if(isset($_GET['filename'])) {
    $filename = $_GET['filename'];
    if(strstr($filename,"../"|| strstr($filename,"..\\")){
        echo("<meta http-equiv='Refresh' content='0; URL=/error.php'>");;
        exit;
    }
 
else {
    $dir="../files/"
    $filename = "upload_form.xlsx";
 
    if (file_exists($dir.$filename)) {
         header("Content-Type: application/octet-stream");
         header("Content-Disposition: attachment;; filename=$filename");
         header("Content-Transfer-Encoding: binary"); 
         header("Content-Length: ".(string)(filesize($dir.$filename))); 
         header("Cache-Control: cache, must-revalidate"); 
         header("Pragma: no-cache"); 
         header("Expires: 0"); 
         $fp = fopen($dir.$filename"rb"); //rb 읽기전용 바이러니 타입
         if(!fpassthru($fp)) {
             fclose($fp);                        
         }
    } else {
        header("Location: /"); // web root 디렉토리로 이동
        exit;
    }
}
 
?>

 

'Web 프로그램 > Web Security' 카테고리의 다른 글

HTML Purifier 사용법 예시  (0) 2023.02.28
remote IP address  (0) 2021.03.24
파일 업로드 공격 방지  (0) 2019.06.21
Cross-Site Scripting (XSS) 방지  (0) 2019.06.20
SQL Injection 공격 방지  (1) 2019.06.19
블로그 이미지

Link2Me

,