Déchiffrer un mot de passe CISCO de type 7

Mots de passe CISCO de type 7

Les mots de passes CISCO de type 7 sont les mots de passe que vous pouvez trouver dans votre fichier de configuration quand vous faites un « show running-config » par exemple, vous les trouvez sous la forme de « enable password 7 062TyB56″. 062TyB56 est en fait un HASH du mot de passe que vous avez entré dans votre commande « enable password » .

Le HASH de niveau 7 des équipements Cisco est basé sur l’algorithme WEAK qui est réversible. Ainsi, le contenu de l’algorithme WEAK étant connu, pourtant propriétaire Cisco, il est très simple de retrouver le mot de passe d’origine. Le mot de passe hashé se présente sous la forme de caractère Hexadacimal. Le premier couple, « 06 » dans notre exemple, indique le SEED (offset) permettant de faire varier le cryptage des caractères suivants. La suite représente le mot de passe et chaque couple en représente une lettre. Ainsi, nous pouvons en déduire que le mot de passe contient 3 lettres et que « 2B » représente la première « M », « OA » la seconde « e »et « 33 » la troisième « r ». Le mot de passe correspondant à notre chaine d’exemple est « Mer ».

Voici un script PHP qui va vous permettre de décrypter instantanément vos HASH Cisco 7 qui se trouve dans les configurations des équipements Cisco.

Où trouve t on les HASH au format Cisco 7

Voici la liste des emplacements ou fonctions utilisant les mot de passe au format Cisco 7 :

Enable :
enable password 7 062B0A33

Username :
username login password 7 062B0A33

FTP :
ip ftp password 7 062B0A33

Scheduler Username :
scheduler aaa-authentication username newuser password 7 062B0A33

PPP :
interface Dialer1
ppp chap password 7 062B0A33

DHCHAP :
fcsp dhchap password 7 062B0A33

VPDN :
vpdn tunnel authorization password 7 062B0A33

L2TP :
l2tp tunnel password 7 062B0A33

BGP :
router bgp 10
neighbor 172.16.12.2 password 7 062B0A33

Mode Console :
line con 0
password 7 062B0A33

Mode Auxiliaire :
line aux 0
password 7 062B0A33

Mode VTY :
line vty 0 4
password 7 062B0A33

Mots de passe CISCO de Type 5

Les mots de passe « enable » sont hachés en utilisant l’algorithme MD5 (Message Digest 5) au lieu de l’algorithme WEAK (propriétaire CISCO). Les mots de passes de niveaux 5 ne sont pas faciles à  déchiffrer. Un mot de passe « enable secret » est configuré en utilisant la commande suivante:

CiscoRouter (config)#enable secret password

Si vous voyez un mot de passe dans le fichier de configuration avec un ‘5’ avant le mot chiffré, ce mot de passe est chiffré en utilisant l’algorithme MD5.

For example: enable secret 5 $1$B8pH$PmmcMRoqfeEtQ7WxL865a0

Bien que MD5 soit un algorithme fort, il peut être attaqué par dictionnaire ou brute-force.

Script PHP de déchiffrement de mot de passe CISCO de type 7

(trouvé et modifié depuis http://www.authsecu.com)

<?PHP
// ********************************************
// Affichage du Titre
// ********************************************
echo ‘<p><b>Décryptage de votre HASH CISCO 7</b><br>Entrez votre mot de passe dans le champ ci-dessous:</p>';

//On commence par créer un formulaire pour entrer notre mot de passe
echo ‘ <form action= »# » method= »post »>
<input type= »text » name= »champ1″/>
<input type= »submit » value= »ok »/>
</form>';

//Si le mot de passe crypté est detecté
if(isset($_POST[‘champ1′]))
{
//On le passe à la moulinette
main();
}

function main() // Passé sous une fonction permettant aux erreur de faire juste un return et non un exit
{

// **********************************************
// Récupération de la chaine crypté demandé
// **********************************************
$password_crypte=$_POST[‘champ1′];
if ($password_crypte== » »){
$password_crypte= »0820564B1B0D1C »;
}

// **********************************************
// Initialisation des variables
// **********************************************
$len_password_crypte=strlen($password_crypte);
$valeur=0;
$seed=0;

// ********************************************
// Convertit la chaine en minuscule
// ********************************************
$password_crypte=strtolower($password_crypte);

// **********************************************
// Vérification si la chaîne siaise possède au minimum de 4 caractères
// **********************************************
if ($len_password_crypte<4)
{
echo ‘<p><b>Erreur, </b>la chaine saisie est trop courte</p>';
return (0);
}

// **********************************************
// Vérification si la chaîne siaise N’est pas trop longue
// **********************************************
if ($len_password_crypte>100) // 100 est la définition maximum de stockage dans la base Mysql
{
echo ‘<p><b>Erreur, </b>la chaine saisie est trop longue</p>';
return (0);
}

// **********************************************
// Vérification si la chaîne siaise est bien paire
// **********************************************
if ( ($len_password_crypte % 2) != 0) // % divise et ne garde que ce qu’il y a après la virgule
{
echo ‘<p><b>Erreur, </b>la chaine saisie ne contient pas un nombre paire de caractère</p>';
return (0);
}

// **********************************************
// Vérification si la chaîne siaise est bien en HEXA
// **********************************************
for ($i=0;$i<$len_password_crypte;$i++)
if ( ((($password_crypte[$i]>=’0′)&&($password_crypte[$i]<=’9′)) || (($password_crypte[$i]>=’a’)&&($password_crypte[$i]<=’f’)))==0)
{
echo ‘<p><b>Erreur, </b>le caractère numéro ‘.($i+1).’ de la chaine saisie n\’est pas un caractère HEXA</p>';
return (0);
}

// **********************************************
// Initialisation des du tableau de correspondance statique
// **********************************************
$tableau_de_caractere[0]=0x64;
$tableau_de_caractere[1]=0x73;
$tableau_de_caractere[2]=0x66;
$tableau_de_caractere[3]=0x64;
$tableau_de_caractere[4]=0x3b;
$tableau_de_caractere[5]=0x6b;
$tableau_de_caractere[6]=0x66;
$tableau_de_caractere[7]=0x6f;
$tableau_de_caractere[8]=0x41;
$tableau_de_caractere[9]=0x2c;
$tableau_de_caractere[10]=0x2e;
$tableau_de_caractere[11]=0x69;
$tableau_de_caractere[12]=0x79;
$tableau_de_caractere[13]=0x65;
$tableau_de_caractere[14]=0x77;
$tableau_de_caractere[15]=0x72;
$tableau_de_caractere[16]=0x6b;
$tableau_de_caractere[17]=0x6c;
$tableau_de_caractere[18]=0x64;
$tableau_de_caractere[19]=0x4a;
$tableau_de_caractere[20]=0x4b;
$tableau_de_caractere[21]=0x44;
$tableau_de_caractere[22]=0x48;
$tableau_de_caractere[23]=0x53;
$tableau_de_caractere[24]=0x55;
$tableau_de_caractere[25]=0x42;

// **********************************************
// Définition du seed
// **********************************************
$seed=($password_crypte[0]-‘0′)*10+($password_crypte[1]-‘0′);

// **********************************************
// Décryptage de chaque caractère
// **********************************************
for ($i=2;$i<=$len_password_crypte;$i++)
{
if ( ($i!=2) && !($i&1) )
{
$password_en_claire[$i/2-2]=$valeur^$tableau_de_caractere[$seed];
$seed++;
$valeur=0;
}

$valeur=$valeur*16;

if( ($password_crypte[$i]>=’0′) && ($password_crypte[$i]<=’9′) )
$valeur=$valeur+ord($password_crypte[$i])-ord(‘0′);

else if ( ($password_crypte[$i]>=’a’) && ($password_crypte[$i]<=’f’) )
$valeur=$valeur+ord($password_crypte[$i])-ord(‘a’)+10;
}

// **********************************************
// Longueur du mot de passe en claire
// **********************************************
$len_password_claire=($len_password_crypte/2)-1;

// **********************************************
// Transformation du tableau
// **********************************************
// Join convertit un tableau en chaine
// array_map(‘chr’, permet de convertir les valeures ascii en caractere ascii, car $password_en_claire contient uniquement des nombre et pas des caracteres
$password_en_claire_format_chaine=join(array_map(‘chr’,$password_en_claire));

// ********************************************
// Affichage du résultat
// ********************************************
echo ‘<p><b>Le resultat a été trouvé</b></p>';

// ********************************************
// Affichage des valeurs
// ********************************************
echo

<table border= »0″>
<tr>
<td width= »50% »><p>HASH Cisco 7 demandé :</p></td>
<td><p>’.$password_crypte.'</p></td>
</tr>
<tr>
<td width= »50% »><p>Mot de passe correspondant :</p></td>
<td><p>’.$password_en_claire_format_chaine.'</p></td>
</tr>
</table>
‘;
return(1);
}

?>

Voici le même programme, mais en PERL cette fois-ci:

#!/usr/bin/perl -w
# $Id: ios7decrypt.pl,v 1.1 1998/01/11 21:31:12 mesrik Exp $
#
# Credits for original code and description hobbit@avian.org,
# SPHiXe, .mudge et al. and for John Bashinski
# for Cisco IOS password encryption facts.
#
# Use of this code for any malicious or illegal purposes is strictly prohibited!
#

@xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,
0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,
0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );

while (<>) {
if (/(password|md5)\s+7\s+([\da-f]+)/io) {
if (!(length($2) & 1)) {
$ep = $2; $dp = «  »;
($s, $e) = ($2 =~ /^(..)(.+)/o);
for ($i = 0; $i < length($e); $i+=2) {
$dp .= sprintf « %c »,hex(substr($e,$i,2))^$xlat[$s++];
}
s/7\s+$ep/$dp/;
}
}
print;

Benoit

Network engineer CCIE #47705, focused on R&S, Data Center and SDN.

More Posts - Website

Follow Me:
TwitterLinkedIn

One Comment

  1. […] enc_GroupPwd ? ». Connaissant les talents de Cisco en terme de chiffrement de mots de passe (cf. Cisco password type 7), j’étais convaincu que cela était […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>