파일 업로드 취약점 대응 방안

파일 업로드 취약점은 업로드 한 파일을 서버가 실행 하기 때문에 위험 하다.

이를 방지하기 위한 방법은 아래와 같다.

  1. 업로드 파일의 확장자를 화이트리스트 기반으로 제한
    php가 동작하는 서버에서 .php를 업로드 하여 실행 하게 될 시 웹 셸을 업로드 할 가능성이 많다. 이를 방지하기 위해 특정 확장자를 제외한 파일들을 업로드가 불가능하도록 코드를 작성한다.
  2. 파일 명 및 경로의 노출제한
    파일을 실행하기 위해서는 서버에서의 파일 위치와 파일명을 알고 있어야한다. 이를 공격자가 알 수 없게하기 위해 업로드 한 파일명 및 경로를 DB에 저장하고 파일명은 난독화 하여 서버에 저장한다. 파일을 다운로드 시 게시판의 key를 통해 파일이 저장된 경로와 파일명을가져와 다운로드 할 수 있도록한다.
  3. NAS의 활용
    php가 설치되지 않은 NAS에 파일을 업로드 하는 방식으로 구현이 되어 있다면 .php파일을 읽더라도 실행을 할 수 없다.

File include 취약점 (LFI, RFI)

일반적으로 개발 시 공통적으로 사용하는 부분을 따로 개발하고 requre, import 와 같은 구문을 사용하여 해당 코드들을 재사용한다. 이를 이용한 공격 기법이 File include 취약점 이다.

 

홈페이지가 한국어, 영어 등 다른 언어로 작성된 php가 있다고 가정한다.

Ex) ko.php: 한국어 Navigation bar( Navigation bar는 상단 혹은 좌우측들에 있는 목록을 말한다.)

en.php: 영어 Navigation bar

nav bar의 예시

이를 request의 파라미터로 파일 명을 받게 된다면 File Include 취약점이 존재 할 수 있다.

 

fileIncludeTest.php

<?php
include($_GET['page']);
echo "wow";
?>

위와 같은 구문으로 작성된 페이지가 있다면 ip:port/ fileIncludeTest .php?page=../../../../../etc/passwd로 요청을 하게 된다면 

passwd 파일을 불러올 수 있다.

서버 로컬 파일을 include한다면 Local File Include(LFI), 외부의 파일을 include한다면 Remote File Include(RFI)라고 한다. 

'웹 해킹 코스 > 내용 정리' 카테고리의 다른 글

14주차 (파일 업로드 취약점 & 웹 셸)  (0) 2024.02.13
13주차 Dos 공격 및 CSRF의 대처방법  (0) 2024.02.05
12주차 CSRF  (0) 2024.02.01
12주차 CSRF  (1) 2024.01.21
11차 HTML의 DOM 접근  (0) 2024.01.15

+ Recent posts