Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/abraxas/phpmyadmin-issuperuser
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLabs & Practice
GitHubabraxas/phpmyadmin-issuperuser

phpmyadmin-issuperuser

phpMyAdmin 5.2.3 - 높음 - 원격 - 잔여 - isSuperUser 검사 건너뜀

저장소 보기
78일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - phpmyadmin-issuperuser

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  phpmyadmin-issuperuser

분석 문서: https://abraxaslabs.tech/research/phpmyadmin-issuperuser

phpmyadmin-issuperuser

분류: 권한 잔여물 도달 범위: 원격

phpMyAdmin 5.2.3 (RELEASE_5_2_3 / 962857e) - phpMyAdmin

DatabaseInterface::isSuperUser()는 SUPER / SYSTEM_USER 검사가 아닙니다. 이는 SELECT 1 FROM mysql.user LIMIT 1입니다. mysql.user를 읽을 수 있는 모든 계정은 세션의 나머지 동안 슈퍼유저로 캐시됩니다. $cfg['AllowUserDropDatabase']의 기본값은 false입니다. DestroyController, SqlController, ImportController, 그리고 데이터베이스 페이지는 모두 해당 플래그를 우회하여 isSuperUser 지름길을 사용합니다.

새로운 MySQL 권한이 아닌 phpMyAdmin 정책 우회입니다. mysql.user에 대한 SELECT와 DROP 권한이 있고 SUPER가 없어도 PMA를 통해 Drop을 수행할 수 있습니다.

ID아직 CVE 없음
분류권한 잔여물
도달 범위원격 (MySQL 계정으로 인증된 쿠키 로그인)
CWECWE-863
CVSS중간: 6.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
제품phpMyAdmin
영향 받는 버전5.2.3 태그 RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
인증MySQL 계정으로 인증된 쿠키 로그인
라이선스GNU Affero GPL v3.0
실습 환경127.0.0.1 전용

공격자가 할 수 있는 일

mysql.user를 읽을 수 있고(일반적인 백업/모니터링 SELECT) SUPER 없이 DROP 권한을 가진 로그인된 MySQL 계정은 phpMyAdmin 슈퍼유저로 취급됩니다.

권한메서드 / 싱크정찰 / 무결성 / 가용성실습 환경 입증 또는 추론
$cfg['AllowUserDropDatabase']=false를 우회하고 데이터베이스 페이지에서 Drop 표시GET index.php?route=/server/databasesDrop UI 정찰실습 환경 입증. selectuser의 경우 bulkActionDropButton / selected_dbs[] 존재, plaindrop의 경우 부재
PMA destroy 핸들러를 통해 데이터베이스 삭제POST index.php?route=/server/databases/destroy selected_dbs[]=dropme ajax_request=true해당 데이터베이스의 무결성 / 가용성실습 환경 입증. JSON success:true, "1 database has been dropped successfully." dropme 사라짐
SQL 상자에서 DROP DATABASE 실행POST index.php?route=/sql sql_query=DROP DATABASE \dropme_sql``해당 데이터베이스의 무결성 / 가용성실습 환경 입증. 데이터베이스 사라짐. 부정 계정은 "DROP DATABASE statements are disabled." 메시지 수신
isSuperUser()로 제한된 다른 PMA 화면 잠금 해제권한, 복제, 상태, 사용자 그룹, 엔진, binlog, 변수해당 화면의 정찰 / 무결성호출 지점에서 추론. 실행하지 않음
mysql.user 읽기PMA가 SUPER 오라클로 사용하는 MySQL SELECTPMA가 SUPER로 오인하는 카탈로그 정찰실습 환경 입증. 해당 권한 부여가 잔여물이 SUPER로 오인하는 원인

이 실습 환경에서 배제된 것: 실제 MySQL SUPER (SHOW GRANTS는 USAGE + 테이블 DROP + mysql.user에 대한 SELECT로 유지됨). FILE, GRANT OPTION, shutdown, ALL PRIVILEGES는 부여되지 않음. DROP은 있지만 mysql.user에 대한 SELECT가 없는 계정은 여전히 PMA를 통해 drop할 수 없음. 이는 새로운 MySQL 권한이 아니며 RCE도 아님.

동일 핀: WebAuthn CustomServer 잔여물.

발견 방법

phpMyAdmin RELEASE_5_2_3을 고정했습니다. SUPER처럼 말하는 권한 게이트는 SUPER처럼 보여야 합니다. 이것은 카탈로그 SELECT처럼 보입니다:

$result = $this->tryQuery('SELECT 1 FROM mysql.user LIMIT 1');
$isSuperUser = false;
if ($result) {
    $isSuperUser = (bool) $result->numRows();
}
SessionCache::set('is_superuser', $isSuperUser);

AllowUserDropDatabase(기본값 false) 플래그를 처리하는 게이트:

  • Controllers/Server/DatabasesController.php is_drop_allowed
  • Controllers/Server/Databases/DestroyController.php (AJAX destroy)
  • Controllers/Sql/SqlController.php / Sql::hasNoRightsToDropDatabase
  • Controllers/Import/ImportController.php
  • Controllers/Database/OperationsController.php

이미 기록된 잘못된 방향: 실제 MySQL SUPER를 주장하는 것; DROP 전용 계정을 버그로 취급하는 것(그 계정은 음성 대조군임); 이를 RCE로 과장하는 것; 리버스 셸. 쇼에 불과함.

실습

python3 phpmyadmin-issuperuser-Abraxas-Labs.py
# or: cd lab && ./run.sh

오직 http://127.0.0.1:19270만 대상으로 합니다. 이미지 phpmyadmin:5.2.3 및 mysql:8.0. Compose 프로젝트 phpmyadmin-issuperuser. $cfg['AllowUserDropDatabase']=false. 실행 후 스택은 종료됩니다.

selectuser는 mysql.user에 대한 SELECT 권한과 dropme / dropme_sql에 대한 DROP 권한을 가지며, SUPER 권한은 없습니다. plaindrop은 nodropme에 대한 DROP 권한만 가집니다. Databases 페이지는 selectuser에 대해 Drop을 표시합니다. POST /server/databases/destroy는 dropme를 삭제합니다. DROP DATABASE dropme_sql을 사용한 POST /sql도 실행됩니다. plaindrop은 여전히 destroy로부터 Error JSON을, /sql로부터 "DROP DATABASE statements are disabled"를 받았습니다.

SUCCESS phpmyadmin-issuperuser drop-ui=yes destroy=ok sql-drop=ok grants-no-super=yes mysql.user-select=yes neg-drop-ui=no neg-destroy=denied PMA-ISSUPERUSER-WITNESS

수정 사항

INFORMATION_SCHEMA 또는 SHOW GRANTS를 통해 실제 SUPER / SYSTEM_USER를 테스트하세요. 해당 카탈로그가 실제로 필요한 UI를 위해 별도의 "mysql.user를 읽을 수 있음" 플래그를 유지하세요. 카탈로그 SELECT를 슈퍼유저로 캐시하지 마세요.

참고 자료

  • github.com/phpmyadmin/phpmyadmin 태그 RELEASE_5_2_3 (962857e4f63d42e38f11ff4d63f5e722018add76)
  • libraries/classes/DatabaseInterface.php isSuperUser()
  • 동일 고정 버전: PMA-5.2.3-WebAuthn-2FA
  • CWE-863

라이선스

GNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 실험실 전용입니다. 보증은 제공되지 않습니다.

도구 다운로드