Wins Security Information

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2018-12613] phpMyAdmin index.php target LFI
작성일 2021-02-10 조회 1732

 

phpmyadmin 이미지 검색결과

 

phpMyAdmin에 LFI(Local File Inclusion) 취약점이 존재합니다.

 

phpMyAdmin은 MySQL을 월드 와이드 웹 상에서 관리할 목적으로 PHP로 작성한 오픈 소스 도구입니다. 데이터베이스, 테이블, 필드, 열의 작성, 수정, 삭제 또는 SQL 실행, 사용자 및 사용 권한 관리 등의 다양한 작업을 수행할 수 있습니다.

 

해당 취약점은 index.php 경로의 target 파라미터를 제대로 검증하지 않아 발생합니다. 원격의 공격자는 해당 매개변수에 서버 내 임의 파일의 경로를 전송하여 공격할 수 있습니다.

 

 

 

취약점 설명

 

NVD - CVE-2018-12613

CVSS v2.0 Severity and Metrics:

Base Score: 6.5 MEDIUM

 

 

[그림1. NVD 내역]

 

 

 

취약점 분석

 

취약한 매개변수를 통해 전달된 값은 [그림 2] 구문을 통해 처리됩니다.

 

if문을 통해 target 인자가 공백인지, 문자열인지, index로 시작하는지, $target_blacklist 배열 안에 있는지를 검사한 후 Core.php의 checkPageValidity 함수에서 검증합니다.

 

$target_blacklist 배열은 [그림 3]과 같습니다.

 

 

 

[그림2. indexk.php의 target 처리 구문]

 

 

 

[그림 3. target_blacklist 배열]

 

 

 

Core.php는 libraries/classes 폴더에 존재하며 checkPageValidity 함수는 [그림 4]와 같습니다.

 

[그림 4. checkPageValidity 함수]

 

 

page 매개변수에는 target 매개변수의 입력값이 URL Decode 되어 전송되므로 db_dql[.]php%3f/[.][.]/~/etc/passwd 가 전달됩니다.

 

몇개의 if문을 거친 후 취약점은 [그림 5] 부분에서 발생하게 됩니다.

 

[그림 5. 취약점 발생 부분]

 

 

urldecode($page)가 실행되면서 $_page 변수에는 db_sql[.]php?/[.][.]/~/etc/passwd가 저장됩니다.

 

 

mb_substr 함수에 의해 ? 문자를 위치로 문자열이 분리되며, 결과적으로 471번 행에서 $_page 변수에는 db_sql[.]php 문자열이 남게되고 이는 [그림 6] $whitelist에 포함되기 때문에 해당 함수는 true를 반환하게 됩니다.

 

[그림 6. whitelist(중략)]

 

따라서 결과적으로 [그림 2]의 if 구문이 모두 참이 되며, include $_REQUEST['target'] 이 실행되어 LFI 취약점이 트리거됩니다.

 

 

공격 분석

 

CVE-2018-12613의 공격 패킷은 다음과 같습니다.

 

[그림7. 공격 패킷]

 

 

 

 

취약점 대응 방안

 

1. 최신 버전 사용

 

해당 벤더사에서 발표한 최신의 버전으로 업데이트한다.

 

https://www.phpmyadmin.net/

 

 

2. WINS Sniper 제품군 대응 방안

 

[5351] phpMyAdmin index.php target LFI

 

첨부파일 첨부파일이 없습니다.
태그 phpMyAdmin  LFI  CVE-2018-12613