V minulém příspěvku jsme prošli úvodem do hádání hesel, dnes se budeme zabývat konstrukcí slovníku použitím nástroje Crunch.

Crunch

Nástroj Crunch generuje slovníky na základě určené abecedy a délky slov. Crunch nalezneme předinstalovaný v linuxové distribuci Kali nebo si jej můžete stáhnout na jeho domovské stránce (Crunch).

V době psaní tohoto příspěvku je Crunch dostupný ve verzi 3.6, která zavádí podporou kódování Unicode a umožňuje omezovat opakující se znaky. V následujících příkladech jsou použity jen velmi malé abecedy, aby bylo možné jednoduše demonstrovat chování nástroje.

Manuálová stránka

Veškerým zdrojem dokumentace pro nás bude manuálová stránka k nástroji Crunch, kterou vyvoláme příkazem man crunch.

Všechna slova abecedy

Crunch lze v prvé řadě použít ke generování všech slov zvolené  abecedy s minimální a maximální délkou slov. Syntaxe je v tomto případě následující. První a druhý argument jsou čísla, která definují minimální a maximální počet znaků všech slov. Třetí argument je řetězec, který specifikuje abecedu, ta může být vyjádřena například sledem znaků bez mezer. Poslední čtvrtý argument tvoří přepínač (-o), který specifikuje název výstupního souboru, tj. náš výsledný slovník. Vyzkoušíme si hned první příklad.

Příklad 1 – Slova o délce 3 znaků tvořená písmeny A,b,C

Jak můžeme vidět z výpisu, po spuštění nástroje Crunch získáme ještě před generováním slovníku informaci, jak velký soubor můžeme očekávat. Jak sami brzy zjistíte, lze snadno vygenerovat slovník, který má přes 1TB. Stačí zvolit abecedu velkých písmen a délku slov 1 až 8. Vraťme se ale k našemu příkladu.

Prozkoumáme-li obsah vygenerovaného souboru slovnik_3x3_AbC.txt, najdeme zde slova, která mají minimální a maximální délku znaků 3 a jsou tvořeny písmeny A,b,C ve všech variacích.

Vlastní a předdefinované abecedy

Abecedu nemusíme nutně určovat výčtem jejich písmen na příkazovém řádku. Můžeme nejprve vytvořit definici abecedy v souboru, přiřadit ji jméno a později se na tuto abecedu odkazovat. K tomuto účelu slouží přepínač (-f) následovaný cestou k souboru a jménem abecedy. Jak asi tušíte, v takovém souboru může být abeced víc. Prostudujme nejdříve existující definice abeced, abychom se seznámili s jejich zápisem. S nástrojem Crunch je dodáván  soubor charset.lst s přednastavenými abecedami.

Pokud nevíme, kde se soubor charset.lst nachází, pomůžeme si příkazy locate.

Nyní si prohlédneme obsah souboru charset.lst s definicemi jednotlivých abeced.

Z výpisu vidíme, že název abecedy je definován nalevo a písmena abecedy jsou určena výčtem uzavřeným v hranatých závorkách. Všimněte si, že některé abecedy obsahují mezeru a v názvu abecedy se vyskytuje slovo space. Nikdo nám nebrání přidat si do souboru vlastní definici abecedy, nebo ještě lépe si celý soubor zkopírovat pod novým názvem a vytvářet si nové definice v něm.

Nyní si vyzkoušíme příklad s již definovanou abecedou ualpha (upper alpha), která obsahuje pouze velká písmena.

Příklad 2 – Použití pouze velkých písmen pomocí abecedy s názvem  ualpha, která je definována v souboru charset.lst

Zkontrolujeme obsah našeho nového slovníku, zda obsahuje správná slova abecedy velkých písmen o délce tři znaky.

Vidíme, že výsledek je správný.

Skládáme permutace

Pomocí parametru -p, který uvádíme vždy jako poslední, můžeme definovat permutace jednotlivých znaků abecedy nebo přímo vybraných slov. V následujících příkladech záměrně vypouštíme volbu výstupu do souboru přepínačem (-o). Nadále však musíme zachovávat povinné první dva parametry, minimální a maximální počet znaků ve slovech, ikdyž nemají na výsledek vliv.

Příklad 3 – Všechny permutace číslic 1,2 a 3

Příklad 4 – Všechny permutace slov dog, cat, kit

Příklad 5 – Rekonstruujeme heslo, které psal útočník jednou rukou na levé části klávesnice. Víme, že stiskl klávesy  q,w,e a dvakrát zadal číslici 1 (ano, není to permutace pro matematiky). Nejsme si jisti pořadím znaků a tak vygenerujeme všechny možnosti.

Sestavujeme vzor

Poslední příklad, který si ukážeme, je sestavení vzoru slova podle masky. Uvažujme případ, kdy hádané heslo má pouze 3 znaky, abecedu tvoří písmena a,b,c a uprostřed tohoto hesla se vyskytuje právě jedno číslo. Maska takového hesla by mohla vypadat takto „@%@“, kde znak zavináč reprezentuje znak abecedy malých písmen a procento zastupuje číslici.

Příklad 6 – Slova podle masky „@%@“

V následujícím příkladu sestavíme slova obsahující vždy předponu „black“ následovanou třemi znaky malých písmen a jednou číslicí.

Příklad 7 – Hesla podle masky „black@@@%“

Ověřením konce obsahu souboru black.txt vidíme, že konstrukce slov je správná.

Zpracování slovníku

Generování slovníku nástrojem Crunch není posledním krokem při stavbě slovníku. Vygenerované slovníky můžeme spojovat, provádět záměnu některých znaků nebo je jinak zpracovávat a filtrovat. Takové zpracování můžeme provádět běžnými příkazy, které běžně známe z Linux/Unix prostředí. Jde zejména o příkazy cat, paste, tr, sort, sed, awk a to buď postupně nebo pomocí jejich zřetězení.

Závěr

V tomto příspěvku jsme si ukázali použití nástroje Crunch pro sestavení vlastního slovníku. Zabývali jsme se třemi případy. První z nich bylo generování všech slov abecedy určité délky, druhým případem byly permutace slov a znaků abecedy a posledním případem bylo generování slov podle vzoru zadaného maskou. Nástroj Crunch má další volby, které umožňují omezovat opakování znaku ve slovech (-d) nebo začít generovat slovník od počátečního slova.

To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku, rád uvidím na hacking kurzech.