Brute force in PHP

Attenzione: lo scopo di questo articolo è solamente didattico e l’autore non si assume nessuna responsabilità di ogni suo uso illecito.

Il brute force è una tecnica per trovare una password tentando tutte le combinazioni possibili di certi caratteri.

Ne avevo già parlato di come scriverne uno ma non era fatto molto bene.

Questo qui invece è completamente personalizzabile, ma vi lascio il codice che parla da sé:

<?php
/**
 * Questa funzione è eseguita quando hai una password completa.
 * Ovvero è un collback di esempio, nonché quello di default.
 *
 * @param string $stringa: La password
 * @return boolean: La password va bene?
 **/
function callback($stringa) {
}

/**
 * Questa funzione serve per annidare dei cicli for che provano le
 * varie possibilità di caratteri.
 *
 * @param string $stringa: La stringa di partenza
 * @param array $chars: I caratteri da provare
 * @param integer $lunghezza: Lunghezza a cui si vuole arrivare
 * @param mixed $callback: Il callback per verificare la password
 * @return string: La password, altrimenti se fallisce il booleano false
 */
function for_annidato($stringa, $chars, $lunghezza=1, $callback='callback') {
	$stringa_originale=$stringa;
	$found=false;

	for($i=0; $i<count($chars); $i++) {
		$stringa=$stringa_originale.$chars[$i];

		if(strlen($stringa)==$lunghezza) {
			$found=call_user_func($callback, $stringa) ? $stringa : false;
		} else {
			$found=for_annidato($stringa, $chars, $lunghezza, $callback);
		}

		if($found!==false) {
			break;
		}

	}

	return $found===false ? false : $found;

}

Plugin Anti Brute Force (v1.0) [Flatpress]

Ho scritto un plugin per flatpress per bloccare gli attacchi di brute force.

Viene automaticamente chiamato alla pagina di login, ma sappiate che è utile anche per il mio plugin di backup, basta che nel vostro file di autenticazione richiamate la classe antibruteforce_plugin ma potete vedere nel codice, altrimenti se siete interessati potete chiedere spiegazioni e le metto qui.

Per default blocca il login dopo 5 tentativi per 1 ora (3600 secondi).

Potete impostarlo modificando le due costanti in cima al file.

ATTENZIONE: non garantisco niente per la sicurezza del vostro blog, perciò vi consiglio di fare altri test.

Se dovesse succedere che non riuscite più a fare il login, eliminate i cookie dal vostro sito (o andate in modalità anonima del browser) e eliminate il file fp-content/%%anti_bruteforce.txt con l’accesso FTP. Poi andate nel pannello di amministrazione e disabilitate il plugin. Quindi venite qui e lasciatemi un commento.

Licenza: GNU GPL v2.0

Download: antibruteforce_v1.0.tar.gz

Creare tutte le possibili combinazioni di un array di caratteri

Non so se avete letto il mio post di prima…

Comunque lo sfizio di creare un generatore di dizionario per brute-force me lo volevo togliere…

Ed eccolo qua:

<?php
$z=explode(' ',microtime());
$z=$z0+$z1;
$l=8;
$a=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,1,2,3,4,5,6,7,8,9);
$b=count($a);
$u=fopen("dizionario.txt", "w+");
for($c=0; $c<$b; $c++) {  ## 1
	$m=$a[$c];
	for($d=0; $d<$b; $d++) { ## 2
		$n=$a[$d];
		for($e=0; $e<$b; $e++) { ## 3
			$o=$a[$e];
			for($f=0; $f<$b; $f++) { ## 4
				$p=$a[$f];
				for($g=0; $g<$b; $g++) { ## 5
					$q=$a[$g];
					for($h=0; $h<$b; $h++) { ## 6
						$r=$a[$h];
						for($i=0; $i<$b; $i++) { ## 7
							$s=$a[$i];
							for($j=0; $j<$b; $j++) { ## 8
								$w=$m.$n.$o.$p.$q.$r.$s.$a[$j];
								fwrite($u, $w."n");
							}
						}
					}
				}
			}
		}
	}
}
$x="#";
$y=explode(' ',microtime());
$y=$y0+$y1;
$v=$y-$z;
fwrite($u, "$x Generated in $v");
fclose($u);

Se non siete pazzi come me non fatelo girare, a meno che non abbiate 23,092060626TiB di spazio libero e tanto tempo da sprecare… … [Leggi il resto]

Creando un dizionario per un attacco di forza bruta

Volevo creare un dizionario con tutte le possibili combinazioni alfanumeriche di 8 caratteri in PHP perché era il modo più veloce che avevo…

Il codice che ho scritto è un po’ una cosa buttata lì… Se siete esperti mi direte che è una pazzia… Eccolo qui:

<?php
function potenzaFor($s, $n) {
	$m=count($n);
	$o=count($s);
	for($j=0; $j<$m; $j++) {
		for($k=0; $k<$o; $k++) {
			$n[]=$n[$j].$s[$k];
		}
	}
	return $n;
}
$t=explode(' ',microtime());
$t=$t0+$t1;
$g=8;
#$a=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,1,2,3,4,5,6,7,8,9);
$a=array(0,1,2,3,4,5,6,7,8,9);
$l=count($a);
$f=fopen("dizionario.txt", "w+");
$p=$a;
for($i=0; $i<$g; $i++) {
	$p=potenzaFor($a, $p);
}
if(count($p)) {
	foreach($p as $e) {
		fwrite($f, $e."n");
	}
}
$c="#";
$u=explode(' ',microtime());
$u=$u0+$u1;
$v=$u-$t;
fwrite($f, "$c Generated in $v");
fclose($f);

NON eseguitelo… … [Leggi il resto]