File Inclusion(파일 인클루전)
파일 인클루전 공격은 주로 PHP 애플리케이션을 대상으로 발생한다. PHP는 인클루드라는 기능을 제공하는데, 인클루드 기능은 include라는 함수를 이용하여 다른 파일을 소스코드에 직접 포함시킬 수 있도록 하는 기능이다.
이를 통해 공격자는 본인이 원하는 파일을 인클루드시킬 수 있다.
파일 인클루전 공격은 공격자가 인클루드할 수 있는 파일이 각각 호스트 내부의 파일인지 외부의 파일인지에 따라 로컬 파일 인클루전, 리모트 파일 인클루전으로 구분이 된다.
리모트 파일 인클루전(RFI) POC 코드
<?php
echo 'HACKED by RFI<br>';
system("cat /etc/passwd");
?>
이 코드는 간단하게 /etc/passwd 파일의 내용을 출력하도록 요청하는 system()함수를 호출한다.
해당 URL 주소 창을 보면 ?page=include.php 이라는 부분이 있다.
page 파라미터로 지정된 include.php 파일이 인클루드되어 실습페이지를 표시하도록 구현이 되어있다.
file1.php페이지에 접속을 하니 page=file1.php로 설정되어있다. 이는 file1.php를 인클루드하고 있다는 뜻이다.
file2와 file3도 마찬가지이다.
파일의 경로가 파라미터를 통해 전달되면 파일 인클루전 공격이나 디렉터리 트래버설 공격을 시도해볼 수 있다.
칼리 리눅스에 올려둔 POC코드인 bad.php 파일을 인클루드하여 실행하였다.
bad.php 파일의 내용을 수정하면 원하는 명령을 마음대로 사용할 수 있다.
로컬 파일 인클루전(LFI) 공격
../../../../../../../../../../../../etc/passwd
../을 이용하여 이전 디렉토리로 가는데 많이 이용하여 최상위 디렉토리인 root로 접근을 한고 root에서 /etc/passwd라는 경로를 주어 /etc/passwd 위치의 파일을 열도록 하겠다.
공격에 성공을 하였다.
이러한 방법으로 호스트 내부의 파일에 접근이 가능하다.
대응방안
외부 사용자가 입력한 파일 이름을 인클루드에 사용하지 않는다. 어쩔 수 없이 파이르이 이름을 외부에서 입력 받아야 한다면 입력값을 검증해야 한다.
화이트리스트 검증을 하여, 인클루드가 필요한 파일만 허용하고 나머지 파일은 차단한다.
블랙리스트 검증을 할 경우 http://와 같은 프로토콜 문자열이나 ../와 같은 디렉터리 트레버설 공격을 위한 문자열을 차단한다.
'WEB hacking > DVWA' 카테고리의 다른 글
[DVWA] - File Upload(파일업로드) Low 단계 (0) | 2022.10.16 |
---|---|
[DVWA] - Cross Site Request Forgery (CSRF) Low 단계 (0) | 2022.10.14 |
[DVWA] - Stored Cross Site Scripting (XSS) Low 단계 (0) | 2022.10.13 |
[DVWA] - Insecure CAPTCHA 설정 (0) | 2022.10.12 |
[DVWA] - Reflected Cross Site Scripting (XSS) Low 단계 (0) | 2022.10.11 |