Piero V.

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=$z[0]+$z[1];
$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=$y[0]+$y[1];
$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…

Infatti, questo script crea un documento di testo con tutte le combinazioni alfanumeriche (caratteri latini minuscoli solo, per fortuna) di 8 caratteri…

Ma facciamo un po’ di calcoli alla mano…

Numero di combinazioni: 368=2821109907456
Vale a dire 22568879259648 caratteri senza gli a capo
Quindi 25389989167104 byte il file con gli a capo
Ovvero 24794911296 KiB
Perciò 24213780,5625 MiB
Che equivale a 23646,270080566GiB
Come dire 23,092060626TiB

In pratica, è impossibile farlo…

Se prima finiva la memoria, adesso uno dei due processori è sempre al 100%…

Io dopo un bel po’ di minuti di elaborazione sono arrivato a aacou58n e a 1,2GiB.

Più precisamente a 1308793590byte…

Vedete un po’ voi…

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=$t[0]+$t[1];
$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=$u[0]+$u[1];
$v=$u-$t;
fwrite($f, "$c Generated in $v");
fclose($f);

NON eseguitelo…

Io l’ho fatto su una macchina con 2GiB di ram + 1 GiB di swap e ecco cosa è successo al monitor di sistema:

Prima.png
Quando ho cominciato… Dovevo farla prima la foto, così avreste visto meglio… ero a circa il 10% della ram in realtà…

Killed.png
Ad un certo punto… Notare la scritta killed

Come ho scritto sopra, notare la scritta killed…

Ho finito tutta la Ram e tutto lo swap 😊

Mi sa che devo alleggerire il codice…

P. S.: Se sapete uno sputo di PHP mi direte che ho fatto la descrizione sbagliata… Era solo per vedere se cambiava qualcosa…

Autenticazione HTTP con Altervista e PHP 5 (fcgi in cenerale)

Aggiornando il sito ho fatto anche un bel plugin (ne parlerò prima o poi) che crea in automatico un .tar.gz della directory fp-content.

Ho fatto che per il browser richiede il login all’area di amministrazione con i cooke, mentre per wget richiede l’http auth.

In locale funzionava tutto, mentre quando l’ho provato dopo l’aggiornamento del sito non andava.

La spiegazione è semplice, ma io ho impiegato abbastanza tempo per fare tutto.

Io ho lavorato in locale con php5 come modulo di apache (ci mancherebbe altro!), mentre su av c’è php4 come modulo di apache e chi vuole php5 si deve accontentare di averlo come fcgi.

Comunque dopo averlo capito in poco tempo ho preso e modificato lo script (ora è ibrido).

Per prima cosa servono gli htaccess col mod_rewrite.

Modificate il file .htaccess così:

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Ovviamente se avete già il mod_rewrite non modificate le impostazioni

Poi modificate il vostro script php:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));

Questa l’ho testata su altervista, altrimenti se non funziona mettete HTTP_AUTHORIZATION al posto di REDIRECT_HTTP_AUTHORIZATION.

Nuova versione di FlatPress

Come da titolo, è stata pubblicata una nuova versione di flatpress.

Tuttavia la mia modifica al js dei widget non è stata fatta.

Parte V muletto: installare LAMP

LAMP sta per Linux Apache MySQL PHP, cioè quello che si può definire un comune server web (dove appoggia anche vdfn 😁 ).

Con un semplice comando installeremo tutto ciò che serve:

apt-get install apache2 libapache2-mod-php5 php5-cli php5-common php5-gd php5-sqlite php5-mysql php5-curl php5-mhash php5-imap mysql-server -y

Con questo comando abbiamo installato apache 2, php5 con cli (per poter eseguire script dal terminale) più le estensioni gd, sqlite, mysql, curl, mhash e imap (se volete altre estensioni potrete installarle successivamente), poi abbiamo installato il server mysql e tutte le dipendenze varie.

Ora aprite sul browser del vostro computer l’indirizzo del muletto (ad es.: http://192.168.1.3/), e dovrebbe venirvi fuori una pagina con scritto It Works (o comunque con qualche altra scritta).

Se non riuscite a vederla, vuol dire che qualcosa è andato storto.

Procediamo oltre.

Il modulo php5 dovrebbe essere abilitato di default, altrimenti digitate a2enmod php5 1.

Ora disabilitiamo il VirtualHost di default e creiamone uno (es 000-custom) partendo da lui: … [Leggi il resto]