Post recenti
Commenti recenti
- I Principali Test per un Sito Web in Ottica SEO - Ingegnerealbano.com on Come calcolare la distribuzione del “PageRank” tra le pagine di un sito
- SEO e keywords: esistono strategie e tecniche efficaci? | SERIAL EYE on Benedetta SEO, maledetta SEO
- LowLevel on Continuare a smontare Google: un’altra scoperta SEO
Tutti i post
-
Questa opera di Enrico Altavilla è concessa in licenza sotto la Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported.
Brute-force verso Google e codice PHP per le disposizioni
Nel precedente articolo sui servizi nascosti o segreti di Google, Fabio Schenone aveva chiesto nei commenti quando avrei svolto un attacco brute-force.
Ho accolto il suggerimento di Fabio ed ho cercato URL di Google nella seguente forma, assegnando al parametro “tbm” tutte le possibili stringhe di tre o di quattro caratteri basate sull’alfabeto inglese:
http://www.google.com/search?q=test&hl=en&prmd=ivnsfd&source=lnms&tbm=XXXX&sa=X&oi=mode_link&ct=mode&cd=4
(per maggiori informazioni sull’URL sopra indicato vi invito a leggere le spiegazioni nel post precedente)
Quantità delle interrogazioni
Le possibili stringhe di testo lunghe tre caratteri, ciascuno dei quali può essere uno qualunque dei simboli dell’alfabeto inglese sono esattamente 17576 (26^3).
Le possibili stringhe di testo lunghe quattro caratteri, ciascuno dei quali può essere uno qualunque dei simboli dell’alfabeto inglese sono esattamente 456976 (26^4).
In totale ho dunque fatto 474552 interrogazioni, che non sono servite ad un fico secco perché non ho scoperto ulteriori servizi nascosti. Gli unici individuati rimangono dunque quelli osservati e pubblicati nel post precedente.
Codice PHP per le disposizioni
Oltre a disporre di una batteria di Xenu, per produrre tutte le stringhe/URL da interrogare ho sviluppato una semplice funzione PHP che produce l’elenco di disposizioni (con ripetizione) ottenibili. Non ho idea se mai mi servirà ancora in futuro, quindi ve la fornisco nella speranza che possa un giorno essere utile a qualcuno di voi.
Per esempio, chiamando la funzione con i seguenti parametri: permutations(“ab”, 3); si ottiene in output un array contenente le stringhe: aaa, aab, aba, abb, baa, bab, bba, bbb.
/** * Permutations * * Returns an array of strings containing all the * ($alphabet ^ $output_length) permutations * * @alphabet (string|array) set of at least two elements to choose from * @output_length (int) the number of elements in each output string */ function permutations ($alphabet, $output_length=1) { $output = array(); if ($alphabet AND ($output_length > 0)) { // Handles both string alphabets and array alphabets if (is_string ($alphabet)) { $alphabet_length = strlen ($alphabet); $symbol = str_split ($alphabet); } elseif (is_array ($alphabet)) { $alphabet_length = count ($alphabet); $symbol = $alphabet; } else { return $output; } if ($alphabet_length < 2) return $output; // Creates a -1 index in order to avoid the out-of-bounds // warning during the last loop of the do-while structure $pointer = array_fill (-1, $output_length+1, 0); // How much iterations to perform $iterations = pow ($alphabet_length, $output_length); // To avoid all the "- 1"... $alphabet_length--; $output_length--; // Do the job for ($i=0; $i < $iterations; $i++) { $permutation = ""; for ($c = 0; $c <= $output_length; $c++) { $permutation .= $symbol[$pointer[$c]]; } $output[] = $permutation; // Updates the pointers $c = $output_length; do { $pointer[$c]++; if ($pointer[$c] <= $alphabet_length) { break; } else { $pointer[$c] = 0; $c--; } } while (TRUE); } } return $output; }