Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Se protéger du hack wordpress 2.8.3 qui réinitialise le mot de passe

wpmigreow0 Modérez les commentaires WordPress sans utiliser linterface dadmin

Si vous avez un site ou un blog sous WordPress, il y a un hack qui tourne depuis quelques jours (et dont j’ai appris l’existence ce matin), qui permet de forcer la réinitialisation du mot de passe admin. En gros, c’est tout con (et vous pouvez essayer sur votre wordpress), lorsque vous entrez l’url suivante :

http://VOTRE-DOMAINE.COM/wp-login.php?action=rp&key[]=

Vous obtenez un très sympathique message  vous disant que le mot de passe a été réinitialisé. Le hack n’est pas dangereux sauf que l’admin devra ouvrir sa boite mail pour retrouver le nouveau mot de passe… Imaginez donc une moulinette qui effectue cette opération toutes les 2 secondes et le webmaster ou le bloggeur devient FOU !

Voici donc comme désactiver cette fonction temporairement, en attendant la mise à jour de WordPress.

Ouvrez le fichier wp-login.php et recherchez la fonction suivante :

function reset_password($key) {
global $wpdb;
$key = preg_replace('/[^a-z0-9]/i', '', $key);
if ( empty( $key ) )
return new WP_Error('invalid_key', __('Invalid key'));
$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users
WHERE user_activation_key = %s", $key));
if ( empty( $user ) )
return new WP_Error('invalid_key', __('Invalid key'));
// Generate something random for a password...
$new_pass = wp_generate_password();
do_action('password_reset', $user, $new_pass);
wp_set_password($new_pass, $user->ID);
update_usermeta($user->ID, 'default_password_nag', true);
$message  = sprintf(__('Username: %s'), $user->user_login) . "rn";
$message .= sprintf(__('Password: %s'), $new_pass) . "rn";
$message .= site_url('wp-login.php', 'login') . "rn";
$title = sprintf(__('[%s] Your new password'), get_option('blogname'));
$title = apply_filters('password_reset_title', $title);
$message = apply_filters('password_reset_message', $message, $new_pass);
if ( $message && !wp_mail($user->user_email, $title, $message) )
die('<p>' . __('The e-mail could not be sent.') . "<br />n" . __('Possible reason:
your host may have disabled the mail() function...') . '</p>');
wp_password_change_notification($user);
return true;
}

Mettez tout son contenu en commentaire afin d’empêcher la réinitialisation du mot de passe mais laissez le « return true » à la fin

Ça donnera ça :

function reset_password($key) {
/*
global $wpdb;
$key = preg_replace('/[^a-z0-9]/i', '', $key);
if ( empty( $key ) )
return new WP_Error('invalid_key', __('Invalid key'));
$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users
WHERE user_activation_key = %s", $key));
if ( empty( $user ) )
return new WP_Error('invalid_key', __('Invalid key'));
// Generate something random for a password...
$new_pass = wp_generate_password();
do_action('password_reset', $user, $new_pass);
wp_set_password($new_pass, $user->ID);
update_usermeta($user->ID, 'default_password_nag', true);
$message  = sprintf(__('Username: %s'), $user->user_login) . "rn";
$message .= sprintf(__('Password: %s'), $new_pass) . "rn";
$message .= site_url('wp-login.php', 'login') . "rn";
$title = sprintf(__('[%s] Your new password'), get_option('blogname'));
$title = apply_filters('password_reset_title', $title);
$message = apply_filters('password_reset_message', $message, $new_pass);
if ( $message && !wp_mail($user->user_email, $title, $message) )
die('<p>' . __('The e-mail could not be sent.') . "<br />n" . __('Possible reason:
your host may have disabled the mail() function...') . '</p>');
wp_password_change_notification($user);
*/
return true;
}

La fonction ne fera alors que renvoyer VRAI …

Cherchez ensuite le petit passage suivant :

case 'rp' :
$errors = reset_password($_GET['key']);
if ( ! is_wp_error($errors) ) {
wp_redirect('wp-login.php?checkemail=checkemail');
exit();
}

et commentez la redirection en mettant ensuite un echo si vous voulez laisser un petit message au script kiddy :

case 'rp' :
$errors = reset_password($_GET['key']);
if ( ! is_wp_error($errors) ) {
/*wp_redirect('wp-login.php?checkemail=checkemail');*/
echo('Mouahahaha ! Tu crois quand meme pas que tu vas
hacker mon site, petit script kiddy ? Arf !');
exit();
}

Et voilà ! Vous êtes protégé !

Ensuite, lorsque la mise à jour de WordPress arrivera (ce qui ne devrait pas tarder), vous n’aurez qu’à faire la mise à jour et le fichier wp-login.php sera écrasé avec la nouvelle version, donc vous reviendrez à la normale.

Sinon, une autre technique consiste à simplement placer un htaccess et un htpasswd sur votre serveur pour ajouter un niveau de protection. Puis allez lire ces quelques (vieux mais toujours valables) conseils sur la façon de sécuriser son blog.

Et Stagueve me dit aussi dans les commentaires, qu’on peut tout simplement virer le compte admin et se créer un compte « toto » (ou autre) qui aurait les droits admin. Effectivement, pourquoi faire simple quand on peut faire compliqué :-))) Ma devise ? Roooohh

Bonne chance !

[Source du hack]


Comment supprimer vos données personnelles d’Internet avec Incogni ?

Espace partenaire

🔒Votre vie privée est-elle vraiment privée❓

😮Vous l’ignorez peut-être, mais des sociétés appelées Data Brokers collectent, agrègent et monnaient vos données personnelles sans votre consentement.

📝Votre nom, votre prénom, votre date de naissance, 📧 votre email, 🏠 votre adresse postale, et bien d’autres informations sont ainsi collectés pour être revendus à des publicitaires. Il est donc temps de reprendre le contrôle de vos informations personnelles grâce à Incogni

🛡️Incogni est un service qui se charge pour vous de contacter ces Data Brokers et d’exiger la suppression de vos données personnelles.

💥 Profitez d’une offre spéciale avec le code INCOGNI60 et ne laissez pas votre vie privée entre de mauvaises mains❗🙅‍♀️

👇🔍 CLIQUEZ ICI POUR EN SAVOIR PLUS 🔍👇

Les articles du moment