
CVE-2023-3460

Super Admin, Administrator, Editor, Author, Contributor, Contributor. Итак, как мы можем получить привилегии администратора? Сначала давайте посмотрим, как работает плагин Ultimate Member. Во-первых, вам нужно настроить плагин, чтобы он работал правильно: необходимо создать несколько страниц в разделе Pages, затем привязать эти страницы к Ultimate Member > настройки. После этого мы можем создавать новые роли или просто использовать роли по умолчанию, которые предлагает Ultimate Member.
Subscriber. Если мы посмотрим на таблицу wp_usermeta в MySQL, то увидим, что значение wp_capabilities установлено в виде сериализованного массива, и именно там определяется наша роль, которая в данном случае — Subscriber.
wp_capabilities? Мы можем передать wp_capabilities в качестве параметра в POST-запросе при регистрации, например так:
is_metakey_banned, которая проверяет некоторые значения, такие как "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key" и т. д. Нас интересует wp_capabilities, но если он есть в теле запроса, выполнение дойдёт до break, что помешает нам изменить роль.
à, è, ì, ò, ù, À, È, Ì, Ò, Ù. Итак, если мы используем эти символы в теле запроса, например wp_càpabilities=administrator, что произойдёт? Ну, выполнение не дойдёт до break на строке 182 в файле class-user.php, и мы сможем обойти функцию is_metakey_banned.


a:1:{s:13:"administrator";b:1;}. Хорошо, теперь давайте попробуем передать это напрямую в наш параметр.
wp_capabilities, но это не то, что мы ожидали.
wp_capabilities администратора, мы видим, что это сериализованный массив — именно то, что нам нужно. WordPress имеет собственную сериализацию, поэтому мы можем использовать её, передав наше значение в виде массива, а WordPress сделает всё остальное за нас. Вот как выглядит наш payload: wp_càpabilities[administrator]=1.
wp_capabilities изменилось на a:1:{s:13:"administrator";s:1:"1";}, и теперь мы можем войти как администратор.
