Сразу опубликую решение проблемы, если уже взломали.

Открываем базу данных сайта через phpMyAdmin. Находим таблицу wp_options. Первая опция — siteurl будет изменена, там будет проставлен линк на другой сайт. Просто меняем адрес на свой. Все, у вас есть доступ к сайту. Не забудьте удалить созданного пользователя!Это можно сделать как средствами WP, также можно удалить через БД. Заходим в таблицу wp_users, удаляем запись с ненужным пользователем. Готово. Кстати, если заменяли префикс wp_ на другой, то у вас будет выглядеть название таблицы несколько иначе.

Недавно один из сайтов, которые я веду, был взломан. Я задался вопросом, где же уязвимость, через которую меня ломанули и сумел найти ответы на зарубежных форумах. Оказалось, что в плагине Easy WP SMTP была обнаружена уязвимость, через которую злоумышленник способен получить доступ к сайту через нее.

Быстрее обновитесь!

На данный момент уязвимость обнаружена в версии плагина 1.3.9, конечно же, сразу же выпустили обновление, которое закрывает сию дыру. Так что рекомендуется немедленно обновить версию плагина, дабы не рисковать сайтом.

На данный момент сайты находятся под массированной атакой злоумышленников. Лично у меня ничего серьезного не произошло. Эксплоит в Easy WP SMTP привел всего лишь к установке редиректа на другой сайт. В базе данных заменил ссылку, зашел на сайт, проверил веб-антивирусами, дополнительно проверил с помощью антивируса, предназначенного специально для проверки сайтов, AI-Bolit. Все в порядке.

Но стоит быть бдительными и закрыть все возможные дыры обновлением. Учтите, спрятанный адрес админки, блокировка IP не особо помогают, несмотря на предпринятые меры защиты, сайт был взломан. Так что, либо избавляться от плагина, либо обновляться.

На всякий случай

Уязвимость была обнаружена на выходных, в эти же выходные и исправлена. У плагина Easy WP SMTP. В случае взлома вас переадресует на сайт https://getmyfreetraffic.com

А также появится новый зарегестрированый пользователь:

имя пользователя: devidpentesting99

электронная почта: devidpentesting@yandex.ru

Отключенная регистрация пользователей тоже не поможет.

Он говорит о том, что пришлось восстанавливать сайт из бэкапа, отключенная регистрация не защитила.

Не нужно восстанавливать из бэкапа. Есть вариант проще! Открываем свою БД через phpMyAdmin. Находим таблицу wp_options. Первая опция — siteurl будет изменена. Просто меняем адрес на свой. Все, у вас есть доступ к сайту.

Структура эксплойта

В файле easy-wp-smtp.php есть функция admin_init(), которая запускается через хук, при входе в панель администратора. Применяется для работы с журналом, импорта и экспорта конфигураций плагина и обновления параметров БД. Собственно, код:

add_action( 'admin_init', array( $this, 'admin_init' ) );
...
...
function admin_init() {
	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
		 add_action( 'wp_ajax_swpsmtp_clear_log', array( $this, 'clear_log' ) );
		 add_action( 'wp_ajax_swpsmtp_self_destruct', array( $this, 'self_destruct_handler' ) );
	}

	//view log file
	if ( isset( $_GET[ 'swpsmtp_action' ] ) ) {
	    if ( $_GET[ 'swpsmtp_action' ] === 'view_log' ) {
		$log_file_name = $this->opts[ 'smtp_settings' ][ 'log_file_name' ];
		if ( ! file_exists( plugin_dir_path( __FILE__ ) . $log_file_name ) ) {
		    if ( $this->log( "Easy WP SMTP debug log file\r\n\r\n" ) === false ) {
			wp_die( 'Can\'t write to log file. Check if plugin directory  (' . plugin_dir_path( __FILE__ ) . ') is writeable.' );
		    };
		}
		$logfile = fopen( plugin_dir_path( __FILE__ ) . $log_file_name, 'rb' );
		if ( ! $logfile ) {
		    wp_die( 'Can\'t open log file.' );
		}
		header( 'Content-Type: text/plain' );
		fpassthru( $logfile );
		die;
	    }
	}

	//check if this is export settings request
	$is_export_settings = filter_input( INPUT_POST, 'swpsmtp_export_settings', FILTER_SANITIZE_NUMBER_INT );
	if ( $is_export_settings ) {
	    $data					 = array();
	    $opts					 = get_option( 'swpsmtp_options', array() );
	    $data[ 'swpsmtp_options' ]		 = $opts;
	    $swpsmtp_pass_encrypted			 = get_option( 'swpsmtp_pass_encrypted', false );
	    $data[ 'swpsmtp_pass_encrypted' ]	 = $swpsmtp_pass_encrypted;
	    if ( $swpsmtp_pass_encrypted ) {
		$swpsmtp_enc_key		 = get_option( 'swpsmtp_enc_key', false );
		$data[ 'swpsmtp_enc_key' ]	 = $swpsmtp_enc_key;
	    }
	    $smtp_test_mail			 = get_option( 'smtp_test_mail', array() );
	    $data[ 'smtp_test_mail' ]	 = $smtp_test_mail;
	    $out				 = array();
	    $out[ 'data' ]			 = serialize( $data );
	    $out[ 'ver' ]			 = 1;
	    $out[ 'checksum' ]		 = md5( $out[ 'data' ] );

	    $filename = 'easy_wp_smtp_settings.txt';
	    header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
	    header( 'Content-Type: text/plain' );
	    echo serialize( $out );
	    exit;
	}

	$is_import_settings = filter_input( INPUT_POST, 'swpsmtp_import_settings', FILTER_SANITIZE_NUMBER_INT );
	if ( $is_import_settings ) {
		 $err_msg = __( 'Error occurred during settings import', 'easy-wp-smtp' );
		 if ( empty( $_FILES[ 'swpsmtp_import_settings_file' ] ) ) {
			echo $err_msg;
			wp_die();
		}
		$in_raw = file_get_contents( $_FILES[ 'swpsmtp_import_settings_file' ][ 'tmp_name' ] );
		try {
			$in = unserialize( $in_raw );
			if ( empty( $in[ 'data' ] ) ) {
				 echo $err_msg;
				 wp_die();
			}
			if ( empty( $in[ 'checksum' ] ) ) {
				 echo $err_msg;
				 wp_die();
			}
			if ( md5( $in[ 'data' ] ) !== $in[ 'checksum' ] ) {
				 echo $err_msg;
				 wp_die();
			}
			$data = unserialize( $in[ 'data' ] );
			foreach ( $data as $key => $value ) {
				 update_option( $key, $value );
			}
			set_transient( 'easy_wp_smtp_settings_import_success', true, 60 * 60 );
			$url = admin_url() . 'options-general.php?page=swpsmtp_settings';
			wp_safe_redirect( $url );
			exit;
		} catch ( Exception $ex ) {
			echo $err_msg;
			wp_die();
		}
	}
}

Хватит запуска определенного AJAX-запроса для получения доступа к БД и админки, например:

action=swpsmtp_clear_log

Точнее сказать, как сие дело работает, не могу, мало понимаю в данной теме. Но примерно объяснил, каких проблем следует ждать. Всего доброго, защитите свой сайт.

Ваша оценка будет первой!

Уязвимость в Easy WP SMTP: 4 комментария

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

  1. Our WP got hacked as well the same hack, but we didn’t have WP SMTP installed.
    You could be wrong with his hacking method , he did registered with that username and email. Some other way

    1. This vulnerability was announced by WordFence developers. They indicated a hacking method. Perhaps you have other vulnerabilities in other plugins. This person may use several methods to penetrate the site.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *