
CVE-2023-3460


Subscriber et si nous regardons la table wp_usermeta dans MySQL, nous pouvons voir que la valeur wp_capabilities est définie comme un tableau sérialisé et à partir de là, elle définit notre rôle qui dans ce cas est Subscriber.
wp_capabilities ? Eh bien, nous pouvons passer wp_capabilities comme paramètre dans la requête POST lors de l'enregistrement, comme ceci :
is_metakey_banned et cette fonction fonctionne en vérifiant quelques valeurs comme "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key" etc... Ce qui nous intéresse est mais si nous l'avons dans notre corps de requête, cela atteindra le là pour nous empêcher de changer notre rôle.
à, è, ì, ò, ù, À, È, Ì, Ò, Ù. Alors maintenant, si nous utilisons ces caractères dans notre corps de requête, quelque chose comme wp_càpabilities=administrator, que va-t-il se passer ? Eh bien, cela n'atteint pas le point d'arrêt à la ligne 182 dans class-user.php et nous pouvons contourner la fonction .


a:1:{s:13:"administrator";b:1;}. Ok maintenant essayons et passons cela directement à notre paramètre.
wp_capabilities mais ce n'est pas ce à quoi nous nous attendions.
wp_capabilities de l'admin, nous voyons qu'il s'agit d'un tableau sérialisé, c'est ce que nous voulons. Donc WordPress a sa propre sérialisation, nous pouvons donc l'utiliser pour passer notre valeur sous forme de tableau, puis WordPress fait le reste pour nous. Voici à quoi ressemble notre payload : wp_càpabilities[administrator]=1.
wp_capabilities a été changée en a:1:{s:13:"administrator";s:1:"1";} ce qui permet maintenant de se connecter en tant qu'admin.

Super AdminAdministratorEditorAuthorContributorContributorPageswp_capabilitiesbreakis_metakey_banned