본문 바로가기

Kali Linux

Kali Linux - DVWA실습 (File Inclusion)

File Inclusion?

  • 파일 인클루전은 PHP로 구현된 웹 서버의 취약점을 공격하는 기법으로 PHP의 include 기능을 악용하는 방식이다.
  • PHP는 incude의 파라미터로 넘어온 PHP파일을 현재 웹 페이지에 삽입할 수 있다.
  • 공격자는 악의적인 PHP파일을 생성하여 공격대상 웹 페이지에 include의 파라미터로 넘겨 공격을 수행하거나 현재 시스템의 로컬 파일에 접근한다.

File Inclusion 공격 종류

  • Local File Inclusion (LFI)
  • 이미 같은 시스템 내에 존재하는 파일을 include시키는 방식이다.
    • Remote FIle Inclusion (RFI)
  • 외부에 있는 파일을 원격으로 include시키는 방식이다.

DVWA를 이용한 File Inclusion 공격 (Low Level Security) - RFI방식

  • 공격을 위한 간단한 PHP파일 작성
  • 웹에서 접근 가능하도록 /opt/lampp/htdocs에 생성
    • DVWA file inclusion탭의 첫 번째 파일 Open
    • 사용자의 이름과 IP를 출력하는 간단한 웹 페이지이다.
    • include로 앞서 작성한 PHP파일을 삽입
    • 작성한 PHP파일에 삽입된 것을 확인
    • *include를 위한 PHP파일 수정 *
    • php의 system명령어를 통해 cat /etc/passwd을 수행하도록 하였다.
    • 공격이 성공된 모습

DVWA를 이용한 File Inclusion 공격 (Low Level Security) - LFI방식

  • 로컬 시스템의 파일에 접근하는 방식이다.

DVWA의 Medium Level Security

  • 단순한 RFI 공격에 실패한 모습
    • 소스코드
  • 앞서 CSRF의 대응방법에서 보았던 거와 거의 동일한 방식이다.
  • 문제가 될 수 있는 문자를 공백으로 치환하는 방식이다.
  • http, https 등을 막아 다른 RFI공격에 대응하고, ../, ..\등으로 path Traversal공격에 대응한다.
    • 우회방법
  • http:/를 공백으로 치환하고 있다. http:/ 사이에 http:/를 삽입한다면 http:/를 공백으로 치환 후에도 http:/가 된다.
    ex) hthttp:/tp:/에서 http:/를 공백으로 치환하면 http:/가 남게 된다.
  • 문제가 될 수 있는 문자를 한 번만 치환하는 것이 문제이다.
    • 우회결과
    • Path Traversal?
  • 임의로 디렉토리 경로를 조작하여 권한 외의 파일에 접근 가능한 취약점이다.
  • ../ : 상위 디렉토리로 이동
  • ../를 충분히 입력하여 최상위 디렉토리로 이동하여, 최상위 디렉토리에서 /etc/passwd에 접근할 수 있다.

DVWA의 High Level Security

  • Medium단계의 우회 방법이 불가능한 모습
    • 소스코드
  • fnmatch함수를 통해 파라미터의 이름이 file로 시작하지 않거나 include.php가 아닌 경우 에러를 발생시킨다.
    • 위 대응 방법으로 RFI공격에 대해서는 대응이 되었다.
    • 우회방법
  • file을 디렉토리로 하여 상위 디렉토리로(../) 충분히 이동한 뒤 /etc/passwd파일을 include시켰다.
  • 즉, Path Traversal공격에는 대응하지 못했다.

DVWA의 Impossible Level Security

  • High단계의 우회 방법이 불가능한 모습
    • 소스코드
  • 꼭 필요한 파일만 include될 수 있도록 완전히 정적으로 파일을 지정하였다.