Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

삽질블로그

[Kali_LINUX] File Inclusion Attack | DVWA | Website Hacking Attacks 본문

카테고리 없음

[Kali_LINUX] File Inclusion Attack | DVWA | Website Hacking Attacks

삽질장인 2020. 8. 26. 20:28

※ 본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.

File Inclusion 이란

  • PHP 기반 웹어플리케이션에서 사용자에게 파일을 올리거나 업로드 시킬수 있게 할때 주로 발생하는 취약점이며  RFI(Remot File inclusion) 와 LFI(Local File inclusion) 로 나뉘어져 있습니다. 
  • RFI 는 " 원격파일실행 " 으로 다른 외부 서버에 있는 파일 위치의 URI 가 PHP 함수인 " include(once) 와 require(once) 같은 함수에 URL 변수값이 전달되는지를 검사하지 못할때 발생합니다. 즉 해당 취약점이 존재할경우원격으로 외부에 있는 악의적인 파일을 강제로 include 시킬수 있게됩니다.
  • LFI 는 " 내부파일실행 " 으로 PHP 계정이 액세스한 파일이 PHP 함수인 include() 또는 require_once 에 파라미터로 들어갈때 발생합니다. RFI 와는 다르게 웹서버 시스템에 원래 존재하고 있던 파일에 기반으로 include 합니다.

① LOW

(사진 1) 공격 폼

RFI(Remote File inclusion) 먼저 진행해보도록 하겠습니다. php 파일 하나를 만들어서 자신의 웹서버에 올려두고 대상 서버에 include 를 하게될시 출력될 문구를 간단하게 적어두도록 하겠습니다. 

(사진 2) 생성할 php파일

(사진 2) 자신의 웹 서버 경로인 /var/www/html 경로에 악성파일로 사용될 bad.php 를 올려두고 원격지에 있는 대상 사이트에 include 시키며 system 명령어 호출을 통해 다양한 정보 획득을 시도 할 수가있습니다.

(사진 3) 공격 위치

(사진 3) LOW 레벨의 URL을 보면 page=include.php 라고 되어있는데 이것은 지금 우리가 보고있는 DVWA 의 File inclusion 화면이 " include.php " 파일을 include 하여 이러한 전체 페이지를 보여주고 있는것 입니다. 페이지에 있는 file.php / file2.php / file3.php 한개씩 클릭해보면 우리의 ID 와 IP 를 출력해주는 프로그램이 실행되것과 동시에 URL에 include 된 .php 파일명도 같이 있는것을 확인할수가 있습니다. 

(사진 4) 공격 성공

(사진 4) 를 보시면 좌측 상단에 " RFI success " 라는 문구와 함께 자신의 웹서버에 있는 bad.php 파일을 외부에서 성공적으로 호출 하였습니다. 이제 bad.php 파일을 조금 수정해 시스템명령어를 삽입하면 대상 시스템의 정보를 획득할수가 있습니다.

(사진 5) 시스템 명령어 삽입

(사진 5) 밑에 줄에 system('cat /etc/passwd'); 를 삽입하여 현재 사용중인 계정들 및 권한을 확인해보겠습니다.

(사진 6) 성공

(사진 6) 성공적으로 도출된것을 확인할수가 있습니다. 이외에도 다양한 명령들을 삽입하여 사용할수가 있습니다.

 

(사진 7) LFI 기법 사용

(사진 7) 이번에는 LFI(Local File inclusion) 기법을 사용한 공격입니다. RFI 기법과는 다르게 시스템에 이미 존재하는 파일만 접근할수 있어서 파급효과는 조금적다고 볼수있지만, /etc/passwd 같은 주요파일에는 접근 할 수 있으니 위혐적이라고 보시면 되겠습니다. 보통 ../../../../ 같은 식으로 해당 서버의 최상위 디렉토리로 넘어가서 접근을 하게됩니다.(윈도우는 역슬레시) 이렇게 상위 디렉토리로 넘어가는 것을 " Path Traversal " 이라고 합니다. 패스 트래버설은 File inclusion 뿐만 아니라 File download 기법에도 사용되며 허용되지 않는 곳으로 접근할 가능성이 있는 방법입니다.

 


② Medium

(사진 8) 소스코드

LOW 레벨에서 했던방식의공격은 통하지 않습니다. 소스코드를 확인해보면 Input Validation 값에 " http:// https:// " 를 통해 원격지호출 을 막고 그밑에 " ../ 과 ..\ " 을 통해 Path Traversal 공격을 필터링 하고 있는것을 확인할수가 있습니다.  

하지만 이러한 필터링을 " 한번씩 " 만 검증을 하기 때문에 중간에 한번더 붙여넣어주면 우회가 가능해집니다.

 

(사진 9) RFI 우회 성공

(사진 9) 만약 RFI 방식으로 공격을 시도한다면 " hthttp://tp:// " 처럼 중간에 한번더 끼워넣어주면 htttp:// 를 한번 필터링하고 나머지 가 붙어서 그대로 실행됩니다.

(사진 10) LFI 우회 성공

(사진 10) Path Traversal 을 성공적으로 하기위해 ../ 를 한번씩 더 작성해주면(..//..//..//) 필터링을 우회할수 있습니다. 디렉토리를 횡단하는 연산자로 ..\ 을 입력하셔도 상관 없습니다. 우회하게된다면 ..\\..\\..\\ 가 되겠지요

 


③ High 

Medium 단계에서 사용했던 우회 기법을 사용해본결과 에러메시지가 도출된것을 확인할수가 있습니다. 소스코드를 확인해보도록 하겠습니다.

(사진 11) 소스코드

(사진 11) fnmatch( "file* ", 을 통해 검증을 하고 있습니다. 즉 파일이름이 file1 , file2, 등 file 로 시작하는지 검사하고 include.php 가 아니면 에러를 발생시키도록 하고 있습니다. 우선 LFI 기법을 통해 우회를 해보도록 하겠습니다.

(사진 12) LFI 우회

(사진 12) 간단합니다. 파일명이 file 로 시작하는지 검사하기 때문에 맨앞에 file 입력해주고 Path Traversal 을 통하여 최상단 디렉토리로 넘어가 시스템 명령어를 호출 해주시면 성공적으로 시스템에 현재 사용중인 계정 목록들을 확인할수가 있습니다.

 

※ High 레벨의 RFI 기법은 현재 file 말고는 허용을 하지 않기때문에 추후 " File Upload " 취약점을 다룰때 함께 사용해원격으로 호출할수있도록 하겠습니다.

 


◆ 대응방안

(사진 13) Impossible 소스코드

High 레벨에서 사용했던 기법들은 모두 에러가 나게됩니다. 제일 좋은 방법은 include.php 나 각각의 화면을 엑시스 해주는 file 들이 사용자를 통해 전달되지 않도록 하는것이 제일 좋으나 그렇지 않다면 (사진 13처럼) " 화이트리스트 " 기반으로 허용하는 include.php 와 file 명이 명확하게 검증해야 합니다. 즉 해당서버에 필요한 파일이 있으면 소스코드단에 명시해두고 그외에 파일은 에러메시지를 도출시킬수 있도록 해야합니다.

 

 

끝으로 RFI 즉 " 원격파일실행 " 의 경우 굉장히 보기 드문 취약점 입니다. 파급효과가 큰 File Upload 취약점보다도 나오기 힘든 추세이기도 하죠 왜냐하면 최근의 php 파일의 경우 외부파일에 접근하는것이 기본적으로 비활성화 되어 있기 때문입니다. 그렇기때문에 LFI 같은 대상 서버 에 존재하는 파일을 이용하는 공격에대해 좀더 관심을 가질필요가 있겠습니다.

Comments