
CVE-2023-3460


Abonnent registriert. Wenn wir uns die Tabelle wp_usermeta in MySQL ansehen, sehen wir, dass der Wert von wp_capabilities auf ein serialisiertes Array gesetzt ist, und daraus wird unsere Rolle definiert, in diesem Fall Abonnent.
wp_capabilities ändern? Wir können wp_capabilities als Parameter in der POST-Anfrage während der Registrierung übergeben, etwa so:
is_metakey_banned, die einige Werte wie "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key" usw. überprüft. Uns interessiert wp_capabilities, aber wenn es in unserem Anforderungstext enthalten ist, wird dort ausgelöst, um uns daran zu hindern, unsere Rolle zu ändern.
à, è, ì, ò, ù, À, È, Ì, Ò, Ù. Wenn wir also diese Zeichen in unserem Anforderungstext verwenden, etwa wp_càpabilities=administrator, was passiert dann? Nun, es erreicht den Haltepunkt in Zeile 182 in class-user.php nicht, und wir können die Funktion is_metakey_banned umgehen.


a:1:{s:13:"administrator";b:1;}. Versuchen wir es und übergeben diesen direkt an unseren Parameter.
wp_capabilities gesetzt, aber das ist nicht das, was wir erwartet haben.
wp_capabilities-Wert des Administrators ansehen, sehen wir, dass es sich um ein serialisiertes Array handelt – das wollen wir. WordPress hat seine eigene Serialisierung, also können wir diese nutzen, um unseren Wert als Array zu übergeben, und WordPress erledigt den Rest für uns. So sieht unser Payload aus: wp_càpabilities[administrator]=1.
wp_capabilities zu a:1:{s:13:"administrator";s:1:"1";} geändert wurde, sodass wir uns jetzt als Administrator anmelden können.

Super AdminAdministratorEditorAutorMitwirkenderAbonnentSeitenbreak