
phpMyAdmin 5.2.3 - 높음 - 원격 - SQLi - central columns pmadb 쿼리 잔여물
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
분석 문서: https://abraxaslabs.tech/research/phpmyadmin-pmadb-central-sqli
분류: SQLi 도달 범위: 원격
phpMyAdmin 5.2.3 (태그 RELEASE_5_2_3, 커밋 962857e). Central columns는 제어 사용자 링크에서 POST extra와 attribute를 작은따옴표로 감싼 SQL 리터럴에 연결하여 col_extra를 기록합니다. 인접한 필드들은 escapeString을 거칩니다. 이 두 필드는 그렇지 않습니다.
로그인한 사용자가 field_attribute(또는 col_extra)에 따옴표를 넣고 multi_edit_central_column_save=1과 함께 index.php?route=/database/central-columns로 POST합니다. 그러면 getInsertQuery / updateOneColumn이 해당 문자열을 pma 제어 사용자로서 pma__central_columns에 대해 실행합니다. 그 계정은 구성 저장소 사용자이며, 로그인한 SQL 박스가 아닙니다.
CVE-2016-5703은 central columns의 데이터베이스 이름이었습니다. 이 extra 및 attribute 필드들은 그 버그가 아니었습니다.
| ID | 아직 CVE 없음 |
| 분류 | SQLi (pma__central_columns에 대한 제어 사용자) |
| 도달 범위 | 원격 (인증된 쿠키 로그인, pmadb central columns 활성화됨) |
| CWE | CWE-89 |
| CVSS | 높음: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| 제품 | phpMyAdmin |
| 영향받는 버전 | 5.2.3 태그 RELEASE_5_2_3 (962857e) |
| 인증 | 인증된 쿠키 로그인. pmadb central columns 활성화됨. |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:19210 전용 |
Central columns를 열 수 있는 로그인한 phpMyAdmin 사용자는 pma__central_columns에 대해 제어 사용자로서 SQL을 주입할 수 있습니다.
| 권한 | 메서드 / 경로 | 랩에서 입증됨 또는 추론됨 |
|---|---|---|
| 제어 사용자 INSERT/UPDATE 문자열 깨기 (pmadb SQL의 무결성) | field_attribute / col_extra에 따옴표를 넣고 multi_edit_central_column_save=1과 함께 POST index.php?route=/database/central-columns | 랩에서 입증됨. #1064 JSON 오류. 제어 사용자 오류에 증거 PMA-PMADB-CENTRAL-SQLI-WITNESS 표시 |
| 인접 필드를 인밴드로 유지 | 동일한 POST, field_name에 따옴표 | 랩에서 입증됨. 행이 neg'col로 저장됨. escapeString이 방어함 |
| 다른 사용자의 central-column 행 읽기 또는 덮어쓰기 | 동일한 싱크, 문자열이 닫히면 | 추론됨. 랩은 구문 오류에서 멈춤; 스택 쿼리 없음 |
| 제어 사용자로서 추가 문 실행 | 제어 mysqli 링크가 다중 쿼리를 허용하는 경우 동일한 싱크 | 추론됨. 기본 mysqli::query는 단일 문임. 여기서는 활성화되지 않음 |
다른 pmadb 테이블(북마크, 기록, pma__userconfig)에 도달 | 스택 쿼리 또는 INTO 방식 쓰기가 가능한 경우에만 | 추론됨. 이 랩의 제어 사용자는 phpmyadmin.* DML만 가짐 |
이 랩에서 차단된 것: 인증되지 않은 접근, 로그인한 appuser SQL 박스(appdb 전용), OS 셸, 스택 쿼리. pmadb / central columns가 꺼져 있으면 기능은 무효화됨(이는 FAIL이며, 이 잔여 취약점이 아님).
RELEASE_5_2_3에 대한 8개의 병렬 소스 탐색. CentralColumns.php의 인접 필드들은 escapeString 처리됩니다. extra와 attribute는 작은따옴표 리터럴로 implode됩니다. CVE-2016-5703은 데이터베이스 이름이었으며, 이 컬럼들이 아니었습니다.
잘못된 방향: field_name의 따옴표를 잔여 취약점으로 간주한 것(이는 neg'col로 저장됨; 그것이 부정 결과임); 일반 로그가 이스케이프되지 않은 증거를 보여줄 것이라 기대한 것(INSERT는 성공적인 쓰기 전에 #1064로 종료됨); pmadb 비활성화를 이 잔여 취약점으로 간주한 것(기능이 무효화됨).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
또는
cd lab
./run.sh
루프백 전용: http://127.0.0.1:19210. 이미지 phpmyadmin:5.2.3 및 mysql:8.0. Compose 프로젝트 phpmyadmin-pmadb-central-sqli. Witness PMA-PMADB-CENTRAL-SQLI-WITNESS.
SUCCESS phpmyadmin-pmadb-central-sqli how=live insert-syntax=yes field-name-escaped=yes general-log-unescaped=false error-has-witness=true PMA-PMADB-CENTRAL-SQLI-WITNESS
extra 및 attribute에 대한 escapeString / quoteString(..., CONNECT_CONTROL). auto_increment, UNSIGNED, BINARY, UNSIGNED ZEROFILL, on update CURRENT_TIMESTAMP를 허용 목록에 추가. phpMyAdmin 6.x의 designer JSON blob에 대한 quoteString은 이러한 종류의 pmadb concat에 대한 패치된 형태입니다.
962857e)libraries/classes/Database/CentralColumns.php getInsertQuery / updateOneColumnControllers/Database/CentralColumnsController.php POST multi_edit_central_column_saveGET|POST /database/central-columnsGNU Affero GPL v3.0. LICENSE를 참조하십시오. 루프백 실험실 전용. 보증 없음.