Últimamente resolviendo algunos retos me ha tocado crackear diferentes hash y aunque existen muchos programas para esa labor (como Cain) estos no ofrecen soporte para realizar fuerza bruta a algunos tipos de hash. Por esta razón hice PHPCracker, un sencillo script que permite realizar ataques por fuerza bruta y ataques por diccionario usando PHP.
<?php
if (defined('STDIN')) {
if (count($argv) < 2) {
echo "#########################################################################\n" .
"# PHPCracker UrbaN77 www.RedInfoCol.org - www.BrianUR.info #\n" .
"#########################################################################\n" .
"# Uso: php phpcracker.php [Modo] [Nombre del hash] [Hash] [Opciones] #\n" .
"# --------------------------------------------------------------------- #\n" .
"# Modo: usa -b hacer un brute force o -d para un ataque por diccionario.#\n" .
"# Nombre del hash: Por ejemplo md5, sha1 o cual sea el nombre. #\n" .
"# Hash: Hash a crackear. #\n" .
"# Opciones: Estas dependen del modo elegido. #\n" .
"# - Charset: min para minusculas, may para mayusculas o all para las #\n" .
"# anteriores con numeros y simbolos (Solo para el modo -b). #\n" .
"# - Diccionario: nombre del fichero de tu wordlist (Solo para modo -d).#\n" .
"#########################################################################";
exit;
}
$modo = $argv[1];
$tipoHash = $argv[2];
$hash = $argv[3];
function crackear($hash, $tipoHash, $charset) {
if ($charset == "min") {
$desde = 97;
$hasta = 122;
} elseif ($charset == "may") {
$desde = 65;
$hasta = 90;
} elseif ($charset == "all") {
$desde = 33;
$hasta = 126;
} else {
echo "Necesitas especificar el Charset: min, may o all.";
exit;
}
echo "Crackeando...\n";
for ($i = $desde; $i <= $hasta; $i++) {
for ($j = $desde; $j <= $hasta; $j++) {
for ($k = $desde; $k <= $hasta; $k++) {
for ($l = $desde; $l <= $hasta; $l++) {
$salida = hash($tipoHash, chr($i) . chr($j) . chr($k) . chr($l));
if ($hash == $salida) {
echo "Password encontrado: " . chr($i) . chr($j) . chr($k) . chr($l)."\n";
exit;
}
}
}
}
}
}
if ($modo == "-d") {
$wordlist = $argv[4];
if (file_exists($wordlist)) {
$diccionario = file($wordlist);
echo "Crackeando...\n";
foreach ($diccionario as $rel) {
$salida = hash($tipoHash, $rel);
if ($salida == $hash) {
echo "El password es: " . $rel;
exit;
}
}
} else {
echo "El archivo " . $wordlist . " no existe.";
exit;
}
} elseif ($modo == "-b") {
$charset = $argv[4];
crackear($hash, $tipoHash, $charset);
}
echo "Password no encontrado :/ intenta probando con otro tipo de hash, otro charset o diccionario.";
} else {
echo("Necesitas correr este script desde la consola.");
}
?>
Continuar leyendo…