
CVE-2023-3460


Subscriber e se diamo un'occhiata alla tabella wp_usermeta in MySQL possiamo vedere che il valore wp_capabilities è impostato su un array serializzato e da lì definisce il nostro ruolo, che in questo caso è Subscriber.
wp_capabilities? Beh, possiamo passare wp_capabilities come parametro nella richiesta POST durante la registrazione, in questo modo:
is_metakey_banned che funziona controllando alcuni valori come "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key" ecc... A noi interessa wp_capabilities, ma se la includiamo nel corpo della richiesta, il break scatta lì per impedirci di cambiare ruolo.
à, è, ì, ò, ù, À, È, Ì, Ò, Ù. Quindi, se usiamo questi caratteri nel corpo della richiesta, ad esempio wp_càpabilities=administrator, cosa succede? Beh, non raggiunge il punto di interruzione alla riga 182 in class-user.php e possiamo bypassare la funzione is_metakey_banned.


a:1:{s:13:"administrator";b:1;}. Ok, ora proviamo e passiamolo direttamente al nostro parametro.
wp_capabilities, ma non è quello che ci aspettavamo.
wp_capabilities di un admin vediamo che è un array serializzato; è quello che vogliamo. WordPress ha la sua serializzazione, quindi possiamo usarla per passare il nostro valore come array e WordPress fa il resto per noi. Ecco come appare il nostro payload: wp_càpabilities[administrator]=1.
wp_capabilities è stato cambiato in a:1:{s:13:"administrator";s:1:"1";}, quindi ora possiamo accedere come admin.

Super AdminAdministratorEditorAuthorContributorContributorPages