Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
phpmyadmin-designer-json-sqli — phpMyAdmin 5.2.3 - Alta - Remota - SQLi - Identificatori non sanificati in Designer JSON | Kitploit
Strumenti/GitHubGitHub/abraxas/phpmyadmin-designer-json-sqli
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingSicurezza dei DatabaseLab e Pratica
GitHub
abraxas/phpmyadmin-designer-json-sqli

phpmyadmin-designer-json-sqli

phpMyAdmin 5.2.3 - Alta - Remota - SQLi - Identificatori non sanificati in Designer JSON

Vedi Repository
3 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - phpmyadmin-designer-json-sqli

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

phpmyadmin-designer-json-sqli

Classe: SQLi Reach: Remoto

phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e). L'AJAX del Designer save_setting_value esegue json_encode sul blob delle impostazioni e lo concatena in un UPDATE/INSERT con apici singoli sul link control-user. Lo username è escapato. Il JSON no. json_encode non esegue l'escape di un apice singolo.

Un utente autenticato invia in POST index.php?route=/database/designer con operation=save_setting_value e un apice in value. queryAsControlUser esegue poi quella stringa come control user di pma su pma__designer_settings. Quell'account è la configuration storage, non la SQL box dell'utente loggato. phpMyAdmin 6.x avvolge questo blob in quoteString su ControlUser. La 5.2.3 lo concatena ancora grezzo.

Le vecchie CVE del designer (2016-6616, 2019-11768, 2019-18622) riguardavano username / nome del database. Questo residuo è la colonna JSON settings_data.

IDnessuna CVE al momento
ClasseSQLi (control-user su pma__designer_settings)
ReachRemoto (login autenticato via cookie; Designer + pma__designer_settings abilitati)
CWECWE-89
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProdottophpMyAdmin
Affetto5.2.3 tag RELEASE_5_2_3 (962857e)
AuthLogin autenticato via cookie. Designer + pma__designer_settings abilitati.
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1:19220

Cosa può fare un attaccante

Un utente phpMyAdmin autenticato che può aprire il Designer può iniettare SQL come control user su pma__designer_settings.

PrivilegioMetodo / pathProvato in lab o dedotto
Rompere la stringa UPDATE/INSERT del control-user (integrità dell'SQL di pmadb)POST index.php?route=/database/designer operation=save_setting_value con un apice in valueProvato in lab. General log: SET settings_data = '{"snap_line":"PMA-DESIGNER-JSON-SQLI-WITNESS'#" }' grezzo. quoteString assente
Troncare il proprio settings_data in modo che non sia più JSON (integrità della propria riga)Stesso POST; # commenta il resto dell'istruzioneProvato in lab. Il blob di appuser contiene il witness e non è JSON valido. Il salvataggio pulito grid-ok è sparito
Sovrascrivere le righe designer di altri utenti senza query impilate (integrità della riga della vittima)Stesso # commenta WHERE username = '...'Provato in lab. Il seed victim {"keep":"safe"} è diventato il blob witness troncato
Istruzioni extra come control userStesso sink se il link mysqli di controllo consente multi-queryDedotto. Il default di mysqli::query è single-statement. Non abilitato qui
Raggiungere altre tabelle pmadb (bookmarks, history, pma__userconfig)Solo se sono possibili query impilate o un breakout di tipo writeDedotto. Il control user in questo lab ha solo DML su phpmyadmin.*

Chiusi su questo lab: accesso non autenticato, la SQL box dell'appuser autenticato (solo appdb; appuser non ha GRANT su phpmyadmin), OS shell e query impilate. La feature è no-op se pmadb / designer settings è disattivato (questo è un FAIL, non questo residuo).

Come l'ho trovato

Otto ricerche parallele nel sorgente di RELEASE_5_2_3. saveSetting concatena json_encode dentro '...'. Lo username è escapeString. La 6.x già applica quoteString a questo blob. La 5.2.3 no.

Vicoli ciechi: iniettare sullo username (è escapato); aspettarsi un #1064 (il # commenta il resto, quindi MySQL accetta l'UPDATE troncato); considerare provate le query impilate (il default di mysqli è single-statement).

Lab

python3 phpmyadmin-designer-json-sqli-Abraxas-Labs.py

oppure

cd lab
./run.sh

Solo loopback: http://127.0.0.1:19220. Immagini phpmyadmin:5.2.3 e mysql:8.0. Progetto Compose phpmyadmin-designer-json-sqli. Witness PMA-DESIGNER-JSON-SQLI-WITNESS.

SUCCESS phpmyadmin-designer-json-sqli version=5.2.3 how=live raw-concat=yes truncated=true sql-error=false quoteString=no PMA-DESIGNER-JSON-SQLI-WITNESS

La correzione

quoteString(..., ControlUser) / escapeString sul blob JSON, come in RecentFavoriteTable::saveToDb() e in phpMyAdmin 6.x su questa colonna. Non inserire l'output di json_encode dentro un letterale SQL con apici singoli.

Riferimenti

  • github.com/phpmyadmin/phpmyadmin tag RELEASE_5_2_3 (962857e)
  • libraries/classes/Database/Designer/Common.php saveSetting
  • Controllers/Database/DesignerController.php POST operation=save_setting_value
  • Route GET|POST /database/designer
  • Altri residui dello stesso pin: phpmyadmin-webauthn · phpmyadmin-pmadb-central-sqli · phpmyadmin-setup-validate · phpmyadmin-csrf-sql
  • CWE-89

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo lab in loopback. Nessuna garanzia.

Scarica lo strumento