파일 업로드 취약점 대응 방안
파일 업로드 취약점은 업로드 한 파일을 서버가 실행 하기 때문에 위험 하다.
이를 방지하기 위한 방법은 아래와 같다.
- 업로드 파일의 확장자를 화이트리스트 기반으로 제한
php가 동작하는 서버에서 .php를 업로드 하여 실행 하게 될 시 웹 셸을 업로드 할 가능성이 많다. 이를 방지하기 위해 특정 확장자를 제외한 파일들을 업로드가 불가능하도록 코드를 작성한다. - 파일 명 및 경로의 노출제한
파일을 실행하기 위해서는 서버에서의 파일 위치와 파일명을 알고 있어야한다. 이를 공격자가 알 수 없게하기 위해 업로드 한 파일명 및 경로를 DB에 저장하고 파일명은 난독화 하여 서버에 저장한다. 파일을 다운로드 시 게시판의 key를 통해 파일이 저장된 경로와 파일명을가져와 다운로드 할 수 있도록한다. - NAS의 활용
php가 설치되지 않은 NAS에 파일을 업로드 하는 방식으로 구현이 되어 있다면 .php파일을 읽더라도 실행을 할 수 없다.
File include 취약점 (LFI, RFI)
일반적으로 개발 시 공통적으로 사용하는 부분을 따로 개발하고 requre, import 와 같은 구문을 사용하여 해당 코드들을 재사용한다. 이를 이용한 공격 기법이 File include 취약점 이다.
홈페이지가 한국어, 영어 등 다른 언어로 작성된 php가 있다고 가정한다.
Ex) ko.php: 한국어 Navigation bar( Navigation bar는 상단 혹은 좌우측들에 있는 목록을 말한다.)
en.php: 영어 Navigation bar
이를 request의 파라미터로 파일 명을 받게 된다면 File Include 취약점이 존재 할 수 있다.
fileIncludeTest.php
<?php
include($_GET['page']);
echo "wow";
?>
위와 같은 구문으로 작성된 페이지가 있다면 ip:port/ fileIncludeTest .php?page=../../../../../etc/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 |