- 파일 인클루젼공격은 주로 PHP 애플리케이션을 대상으로 발생. (PHP에서는 Include라는 함수를 이용하여 다른 파일을
소스코드에 포함시킬수 있기때문. include도있지만, require함수도 있음.)
- 파일 인클루전 공격은 공격자가 Include할 수 있는 파일이 호스트내부의 파일인지 외부의 파일인지에 따라
LFI(Local File Inlcusion)과 RFI(Remote File Inclusion) 두 종류로 나뉨.
Low 레벨
- 각페이지의 요청이 상단 URL의 파라미터를 통해 지정되는 것이 문제.
- 파일의 경로가 파라미터를 통해 전달되면 File Inclusion공격이나 Directory Traversal(Path Traversal)공격 시도 가능.
- 웹 애플리케이션이 입력값 검증을 하지 않는다면, 원격서버 혹은 로컬서버 내의 악성코드를 실행시킬 수 있음.
RFI 실습.
예제1 쿠키 빼내기
- 테스트를 위해 공격자 KALI에서 PYTHON 서버를 열어줌.
- 정상적으로 공격자 KALI에서 서버가 열린것을 확인.
- 실습으로는 s_cookie.php와 reverse_connect.php를 사용할 것임.
- 공격자 서버에있는 악성스크립트 s_cookie.php 를 page파라미터에 삽입
- 악성스크립트 s_cookie.php는 쿠키를 출력하는 스크립트가 있음
- 정상적으로 외부의 파일(kali의 s_cookie.php)을 희생자측 페이지에 include를 성공.
예제2 Reverse_Connection시켜서 Window쉘 따오기.
- 예제 1번에서 악성 스크립트. reverse_connection.php 파일을 사용할 것임.
- reverse_connection.php는 시스템명령어를 수행하게하는 커맨드를 통해 netcat을 사용해 공격자 서버에게 Connect.
- -e옵션은 공격자에게 연결후, 강제적으로 cmd를 바운딩시킨다는 의미.
- 공격자측에서는 netcat으로 192.168.35.124서버에서 Listen하고있어야함.
- -s 옵션을 달아주지않으면 기본적으로 localhost에서 listen하기때문에 혼동이 옴.
- 희생자서버의 file inclusion탭에서 공격자 서버의 reverse_connect.php파일로 access하면
- 공격자측에서 윈도우의 CMD가 넘어온 것을 확인할 수 있음.
이렇게 실행된 CMD를 통해 시스템명령어를 어느정도 사용할수 있음.
- 비록 한글은 깨지지만, 쉘을 따낸것의 의미를 둘 수 있음
LFI
- LFI는 RFI와 다르게 호스트내부의 파일을 Include시켜주는것에서 차이점이 있음.
- 오픈소스로 개발된 애플리케이션은 디렉터리 구조가 알려져 있어서 취약점이 노출될 가능성이 있음.
- phpinfo.php는 보통 웹루트 디렉터리에 모두 존재하고있음. 따라서 희생자서버의 php파일정보를 볼 수 있다는 의미.
- 상대경로형태로 ../../를 반복하여 Path Traversal 공격을 수행.
- ../를 계속하여도 루트디렉터리를 벗어나지않기때문에 ../를 많이 써주어도 상관없음.
- Windows 는 ..\ 리눅스계열은 ../를 주의.
- 희생자 서버(window10)의 php정보를 확인.
- 이렇게 호스트 내부의 파일에 접근할 수 있음.
Medium 레벨
- Medium 레벨의 소스코드이다. http와 Secure http인 https를 공백문자""로 한번만 치환해주고있다.
- 또한, 윈도우와 리눅스계열의 상대경로 ../ ..\ 또한 공백문자로 한번만 치환해주고 있다.
- http나 https를 한번만 치환해주고 있기 때문에, 아래와같은 형태로 삽입해주면 우회할 수 있다.
- str_replace함수를 우회하여 Reverse_connection으로 윈도우의 쉘을 따낼수 있다.
High 레벨
- High 레벨의 대응방안이다.
- fnmatch함수를 통해서 파일에 file1혹은 file2, file3 이라는단어가 있는지 그리고 파일이 inlcude.php이 맞는지를 검사
하여 대응하고있다.
- 하지만 이러한 방법도. file 문자열을 입력해 fnmatch함수를 우회하여 LFI공격을 수행할 수 있다.
- file/ 키워드를 입력하고 Path Traversal 공격을 이용하여 LFI공격을 할 수 있다.
- 정상적으로 호스트서버 내부의 파일에 접근할 수 있다.
- High 레벨은 파일이름을 기반으로 필터링하고있으므로, RFI공격은 수행하기 어렵지만, File Upload 취약점과 같이 사용
하면 우회할 수 있다.
impossible 레벨
- impossible레벨 소스코드이다
- 아래와같이 화이트리스트 기반 필터링을 이용해, include.php, file1.php, file2.php, file3.php만 요청할수있다.
그렇기 때문에, RFI, LFI공격이 불가능하다.
'WebHacking > DVWA' 카테고리의 다른 글
[DVWA] Weak Session IDs (0) | 2022.01.21 |
---|---|
[DVWA] File Upload (0) | 2022.01.21 |
[DVWA] XSS (Stored) (0) | 2022.01.17 |
[DVWA] XSS (Reflected) (2) (0) | 2022.01.13 |
[DVWA] XSS (Reflected) (0) | 2022.01.13 |