Generování BruteForce posloupnosti v PHP
BruteForce (Hrubá síla) je známá pomalá technika používaná k hádání hesel zkoušením všech možných kombinací.
My si ukážeme, jak napsat v PHP jednoduchý skript, který toto umí.
Jak je známo máme různé číselné soustavy (zjednodušeně jde o zápis jednoho čísla pomocí různého počtu znaků, to může být velmi užitečné.)
Nejznámnější soustavy:
Desítková (0-9) - máme 10 prstů
Dvojková (0,1) - True/False (podstata většiny procesorů)
Dvanáctková - v tuctech se našim předkům počítalo lépe...
Osmičková
A Šestnáctková - ta nás právě zajímá:
Ve škole nám od první třídy vštěpovali 10 číslic (tj. 0->9). Co ale uděláme, pokud chceme číslici s větší hodnotou než 9? Jednoduše jí nahradíme písmenem abecedy (tj. 0->9,a->f).
A co z toho pro nás vyplývá?
Pokud budeme mít soustavu s čísly, které můžeme interpretovat znaky celé abecedy (soustava se základem 10+26=36), můžeme tyto čísla postupně inkrementovat a dostávat tak posloupnost jako například:
10,11,12...19,1a,1b,1c...zx,zy,zz,100
A tu přesně potřebujeme, pokud si tímto způsobem vypíšeme všechny možnosti od 1000 do 10000 stoprocentně mezi nimi najdeme řetězce "soom","root","love","l33t","acer","grep" a všechny další čtyřmístná hesla skládající se z těchto znaků.
Pokud bychom potřebovali heslo s jinými znaky, můžeme tak udělat např. nahrazením všech čísel např. pomocí funkce str_replace(), čísla můžeme také vypustit jednoduše podmínkou, která řetězec jednoduše nevytiskne, pokud obsahuje číslo (to asi není nejoptimálnější řešení...). Problém by nastal u case senzitivních hesel.
A teď ten kód...
Moje ukázková implementace zvládá (v mojí verzi PHP) správně max. 9ti místné heslo (se dá obejít složitějšími cykly), ale je opravdu krátká:
Ano, celé to jde udělat jinak, bez převodů soustav, já vím... ...ale když tohle je prostě tak fajn...
Použití:
brute.php
- Začne výpis
brute.php > slovnik.txt
- Uložení slovníku do souboru, pro použití v programu, který pracuje pouze se slovníky, nebo jednoduše abychom ho nemuseli stále generovat a šetřili si CPU... (pokud si takový soubor chete vygenerovat na webovém serveru, váš hosting vám asi nepoděkuje... :)
Soubor s hesly s více jak 4mi znaky raději neotevírat v textovém editoru
Důkaz toho, že v souboru je heslo:
cat slovnik.txt | grep l33t
l33t
brute.php | nejaky_cracker.php
- Pro použití v programech, které si napiseme v dalším článku...
Příště si ukážeme, jak tento program použít k lámání některých hesel.
