[SK shieldus Rookies 19기][애플리케이션 보안] 파일 업로드 취약점

Sungwuk·2024년 3월 31일
0

파일 업로드 취약점이란?

서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드가능하고, 이 파일을 공격자가 웹으로 직접 실행시킬 수 있는 경우, 시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점이다.

보안대책

  • 업로드 파일의 크기와 개수를 제한
  • 파일의 종류를 제한
  • 업로드 파일을 외부에서 접근할 수 없는 경로에 저장
  • 업로드 파일의 이름을 외부에서 알 수 없는 형태로 변경해서 알 수 없는 경로에 저장
  • 업로드 파일의 실행 속성을 제거하고 저장

예제

비박스 Unrestricted File Upload

simple-backdoor.php 업로드, 브라우저에서 php 파일 읽기 가능

하지만 보안등급을 high로 설정하면 화이트리스트 정책이 적용되어 php 파일 업로드 불가


다운로드 파일 경로 노출 취약점

case "2" :            
                       
         	$file_error = file_upload_check_2($_FILES["file"], array("jpg","png"));
            
            if(!$file_error)
            {
              //move_uploaded_file($_FILES["file"]["tmp_name"], "images/" . $_FILES["file"]["name"]);
                
                move_uploaded_file($_FILES["file"]["tmp_name"], "/data/images/" . $_FILES["file"]["name"]);
  				//외부에서 접근할 수 없는 경로에 파일을 저장하도록 수정
            }            
            
            break;

/*생략*/




 <?php

    if(isset($_POST["form"]))
    {

        if(!$file_error)
        {
        	//기존 코드
        	//echo "The image has been uploaded <a href=\"images/" . $_FILES["file"]["name"] . "\" target=\"_blank\">here</a>.";

            echo "The image has been uploaded <a href=\"/data/images/" . $_FILES["file"]["name"] . "\" target=\"_blank\">here</a>.";

	    echo "<img src=\"/data/images/" . $_FILES["file"]["name"] . "\">";
        
       /* 업로드된 파일에 대한 링크(<a>)와 출력(<img>)을 저장된 경로로 수정 
			   주소를 통해서 접근할 수 없으므로 링크도 출력도 되지 않음*/

        }		
        else
        {

            echo "<font color=\"red\">" . $file_error . "</font>";        

        }

    }

    ?>  

if(isset($_POST["form"]))
    {

        if(!$file_error)
        {

/*
            echo "The image has been uploaded <a href=\"/data/images/" . $_FILES["file"]["name"] . "\" target=\"_blank\">here</a>.";

	    echo "<img src=\"/data/images/" . $_FILES["file"]["name"] . "\">";
*/
            echo "The image has been uploaded <a href=\"download.php?file=" . $_FILES["file"]["name"] . "\" target=\"_blank\">here</a>.";

	    echo "<img src=\"download.php?file=" . $_FILES["file"]["name"] . "\">";
				//좌측하단 링크로 인한 웹 루트 경로 가리지

        }

        else
        {

            echo "<font color=\"red\">" . $file_error . "</font>";        

        }

    }

profile
https://github.com/John-Jung

0개의 댓글

관련 채용 정보