
CVE-2023-3460

Super Admin, Administrator, Editor, Author, Contributor, Contributor. Alors comment pouvons-nous obtenir le privilège admin ? D'abord, voyons comment fonctionne le plugin Ultimate Member. D'abord, vous devez configurer le plugin pour qu'il fonctionne correctement, donc nous devons créer quelques pages dans la section Pages puis lier ces pages à Ultimate Member > réglages, après cela nous pouvons créer de nouveaux rôles ou simplement utiliser les rôles par défaut qu'Ultimate Member offre.
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 wp_capabilities mais si nous l'avons dans notre corps de requête, cela atteindra le break 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 is_metakey_banned.


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.
