Od wczoraj przeglądam blog Michała Ławickiego i w komentarzach uzupełniam artykuły dot. baz danych (vide Analiza struktury bazy danych czy Obsługa plików, a SQL Injection). Dziś przyjrzałem się jego podejściu do Blind SQL injection czyli ataku na stronę, która nie wyświetla błędów.
Metoda na odgadywanie hasła znak po znaku jest rzeczywiście toporna. Biorąc pod uwagę 95 dostępnych znaków i hasło o długości 16, możliwych kombinacji jest dość sporo. Wysyłanie 1k5 zapytań zajmie trochę czasu. Dlatego można to zmodyfikować wstawiając pomiędzy LENGTH(passwd), a SUBSTRING(passwd, x, y) funkcję LOCATE(char, passwd), która pokaże jakie znaki mamy w ogóle dostępne (jak w teleturnieju – stąd temat wiadomości).
Nie znam się prawie w ogóle na atakach i bezpieczeństwie, ale wydaje mi się, że jeżeli ktokolwiek stosuje tą metodę, to pewnie chce sam proces skrócić do minimum. Tu LOCATE() wywołujemy maksymalnie 95 razy i jeśli się znaki w haśle nie powtarzają to po sprawie. Jeśli natomiast któryś się powtarza, możemy jeszcze raz wykonać tą funkcję, podając jako trzeci argument pozycję, od której zaczynamy szukać – LOCATE(char, passwd, pos), ew. męczymy SUBSTRING().
Tagi: SQL injection