Créer un compte Admin par le code sur Drupal et Wordpress

Il est parfois intéressant de pouvoir se créer un compte avec les droits "Administrateur" sur un CMS Drupal ou Wordpress.

Par exemple si on récupère en infogérance un site internet développé par un client, qui n'a pas forcément envie de vous communiquer ses identifiants.

Si on a accès au serveur (ce qui est le cas quand on l'exploite), ceci est facilement faisable via quelques lignes de code.

Sous Drupal

Par défaut, si on a fait une installation avec le profil Standard, le rôle administrateur a le role-id 3. Par contre, un utilisateur qui fait partie du rôle administrateur n'a pas forcément autant de privilèges que le UserID 1, qui est vraiment "Super Admin" et qui peut outrepasser tous les droits.

Il suffit donc de créer un fichier php, puis de se positionner dans le root Drupal, et de lancer le script via :

php /chemin/vers/monscript.php

Avec monscript.php qui contient :

<?php
// Create Drupal Admin User
// run this file from Drupal root directory
// fichier a lancer à partir du répertoire racine de Drupal

define('DRUPAL_ROOT', getcwd());
$_SERVER['REMOTE_ADDR']="127.0.0.1";

include_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$username = 'SuperAdmin';
$password = 'Passw0rd';
$email = 'me@mydomain.com';

$new_user = array(
  'name' => $username,
  'pass' => $password,
  'mail' => $email,
  'status' => 1,
  'init' => $email,
  'roles' => array(
    DRUPAL_AUTHENTICATED_RID => 'authenticated user',
    3 => 'administrator',
  ),
);

$newUser=user_load_by_name($username);
if($newUser) {
  echo "Sorry, user '",$username,"' already exists with ID ",$newUser->uid," !",PHP_EOL;
}
else
{
  $newUser=user_save('', $new_user);
  echo "New User ID = ",$newUser->uid,PHP_EOL;
}
?>

Ensuite il suffit de se connecter au site avec le login SuperAdmin et le mot de passe Passw0rd.

Sous Wordpress

Sous Wordpress, le rôle administrator  est prédéfini, et permet d'avoir les droits d'administration.

De la même manière qu'avec Drupal, il suffit de créer un fichier php, et de le lancer à partir du répertoire racine du site Wordpress.

Le contenu du fichier php est le suivant :

<?php
// Create a Wordpress Admin User
// run this file from Wordpress root directory
// fichier a lancer à partir du répertoire racine de Wordpress

$WPHOME=getcwd();
require_once( $WPHOME . '/wp-load.php' );

$username = 'SuperAdmin';
$password = 'Passw0rd';
$email = 'me@mydomain.com';

if (username_exists($username) == null && email_exists($email) == false) {
  $user_id = wp_create_user( $username, $password, $email );
  $user = get_user_by( 'id', $user_id );
  $user->remove_role( 'subscriber' );
  $user->add_role( 'administrator' );
}
else
{
  echo "$username exists ! Quit...",PHP_EOL;
}
?>

Conclusion

L'avantage de ces solutions c'est qu'on passe par les API / fonctions des CMS, et qu'il ne faut pas connaître les identifiants de la base de données. Sachant que si on a accès au système de fichiers, il est facile de récupérer les identifiants, soit dans sites/default/settings.php pour Drupal, soit dans wp-config.php pour Wordpress.

Ceci met aussi en lumière la nécessité de protéger et de mettre à jour son CMS, pour éviter qu'un internaute ne puisse lancer à distance ce genre de fichier !

 

Catégorie