
phpMyAdmin 5.2.3 - 높음 - 원격 - SQLi - central columns pmadb 쿼리 잔여물
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-pmadb-central-sqli
Class: SQLi Reach: Remote
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). Central columns는 POST extra와 attribute를 control-user 링크에서 단일 인용부호 SQL 리터럴로 연결하여 col_extra를 기록합니다. 인접 필드는 escapeString을 거칩니다. 이 두 필드는 그렇지 않습니다.
로그인한 사용자가 multi_edit_central_column_save=1과 함께 field_attribute(또는 col_extra)에 인용부호를 넣어 index.php?route=/database/central-columns를 POST합니다. 그러면 getInsertQuery / updateOneColumn이 해당 문자열을 pma control user로서 pma__central_columns에 대해 실행합니다. 이 계정은 구성 저장소 사용자이며, 로그인한 SQL 박스가 아닙니다.
CVE-2016-5703은 central columns의 데이터베이스 이름이었습니다. 이 extra 및 attribute 필드는 그 버그가 아니었습니다.
| ID | 아직 CVE 없음 |
| Class | SQLi (pma__central_columns에 대한 control-user) |
| Reach | Remote (인증된 쿠키 로그인, pmadb central columns 활성화) |
| CWE | CWE-89 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Product | phpMyAdmin |
| Affected | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Auth | 인증된 쿠키 로그인. pmadb central columns 활성화. |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1:19210 전용 |
Central columns를 열 수 있는 로그인한 phpMyAdmin 사용자는 pma__central_columns에 대해 control user로서 SQL을 주입할 수 있습니다.
| Privilege | Method / path | Lab-proven or inferred |
|---|---|---|
| control-user INSERT/UPDATE 문자열 깨기 (pmadb SQL의 무결성) | POST index.php?route=/database/central-columns multi_edit_central_column_save=1과 field_attribute / col_extra에 인용부호 | Lab-proven. #1064 JSON 오류. control-user 오류에서 PMA-PMADB-CENTRAL-SQLI-WITNESS 확인 |
| 인접 필드를 in-band로 유지 | 동일 POST, field_name에 인용부호 | Lab-proven. 행이 neg'col로 저장됨. escapeString이 방어함 |
| 다른 사용자의 central-column 행 읽기 또는 덮어쓰기 | 동일 sink, 문자열이 닫히면 | Inferred. Lab은 구문 오류에서 중단됨. stacked query 없음 |
| control user로서 추가 statement 실행 | control mysqli 링크가 multi-query를 허용하면 동일 sink | Inferred. 기본 mysqli::query는 단일 statement. 여기서는 활성화되지 않음 |
다른 pmadb 테이블 도달 (bookmarks, history, pma__userconfig) | stacked query 또는 INTO 스타일 쓰기가 가능한 경우에만 | Inferred. 이 lab의 control user는 phpmyadmin.* DML만 가짐 |
이 lab에서 차단됨: 인증되지 않은 접근, 로그인한 appuser SQL 박스(appdb 전용), OS shell, stacked query. pmadb / central columns가 꺼져 있으면 기능이 no-op (이는 FAIL이며, 이 leftover가 아님).
RELEASE_5_2_3에 대한 8개의 병렬 소스 탐색. CentralColumns.php의 인접 필드는 escapeString 처리됨. Extra와 attribute는 단일 인용부호 리터럴로 implode됨. CVE-2016-5703은 데이터베이스 이름이었으며, 이 컬럼들이 아니었음.
잘못된 방향: field_name의 인용부호를 leftover로 취급 (이는 neg'col로 저장됨; 그것이 negative임); general log가 이스케이프되지 않은 witness를 보여줄 것이라 기대 (INSERT는 성공적인 쓰기 전에 #1064로 죽음); pmadb-off를 이 leftover로 취급 (기능이 no-op).
python3 phpmyadmin-pmadb-central-sqli-Abraxas-Labs.py
또는
cd lab
./run.sh
Loopback 전용: 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 참조. Loopback lab 전용. 보증 없음.