WEB hacking/DVWA

[DVWA] - File Inclusion(파일 인클루전)공격 Low 단계

Roronoa 2022. 10. 15. 01:31
반응형

File Inclusion(파일 인클루전)

파일 인클루전 공격은 주로 PHP 애플리케이션을 대상으로 발생한다. PHP는 인클루드라는 기능을 제공하는데, 인클루드 기능은 include라는 함수를 이용하여 다른 파일을 소스코드에 직접 포함시킬 수 있도록 하는 기능이다.

이를 통해 공격자는 본인이 원하는 파일을 인클루드시킬 수 있다.

 

파일 인클루전 공격은 공격자가 인클루드할 수 있는 파일이 각각 호스트 내부의 파일인지 외부의 파일인지에 따라 로컬 파일 인클루전, 리모트 파일 인클루전으로 구분이 된다.

 

리모트 파일 인클루전(RFI) POC 코드

<?php
echo 'HACKED by RFI<br>';
system("cat /etc/passwd");
?>

이 코드는 간단하게 /etc/passwd 파일의 내용을 출력하도록 요청하는 system()함수를 호출한다.

 

[그림 1] 파일 인클루전 페이지

해당 URL 주소 창을 보면 ?page=include.php 이라는 부분이 있다.

page 파라미터로 지정된 include.php 파일이 인클루드되어 실습페이지를 표시하도록 구현이 되어있다.

 

[그림 2] file1.php 페이지

file1.php페이지에 접속을 하니 page=file1.php로 설정되어있다. 이는 file1.php를 인클루드하고 있다는 뜻이다.

file2와 file3도 마찬가지이다.

 

파일의 경로가 파라미터를 통해 전달되면 파일 인클루전 공격이나 디렉터리 트래버설 공격을 시도해볼 수 있다.

 

[그림 3] RFI 공격 성공

칼리 리눅스에 올려둔 POC코드인 bad.php 파일을 인클루드하여 실행하였다.

bad.php 파일의 내용을 수정하면 원하는 명령을 마음대로 사용할 수 있다.

 

로컬 파일 인클루전(LFI) 공격

../../../../../../../../../../../../etc/passwd

../을 이용하여 이전 디렉토리로 가는데 많이 이용하여 최상위 디렉토리인 root로 접근을 한고 root에서 /etc/passwd라는 경로를 주어 /etc/passwd 위치의 파일을 열도록 하겠다.

 

[그림 4] LFI 공격

공격에 성공을 하였다.

이러한 방법으로 호스트 내부의 파일에 접근이 가능하다.

 

대응방안

외부 사용자가 입력한 파일 이름을 인클루드에 사용하지 않는다. 어쩔 수 없이 파이르이 이름을 외부에서 입력 받아야 한다면 입력값을 검증해야 한다.

화이트리스트 검증을 하여, 인클루드가 필요한 파일만 허용하고 나머지 파일은 차단한다.

블랙리스트 검증을 할 경우 http://와 같은 프로토콜 문자열이나 ../와 같은 디렉터리 트레버설 공격을 위한 문자열을 차단한다.

반응형