W końcu trafiłem na "typowy" przykład SQLi, w którym mogłem wykorzystać sqlmap. Nie twierdzę, że w tych "mniej typowych" przypadkach tego narzędzia nie dało się użyć, łatwiej było mi jednak przerobić mój już istniejący skrypt. Tym razem się jednak zawziąłem i...
sqlmap nie jest bezobsługowy
...i potwierdziłem to, co wiedziałem od dawna - narzędzia automatyczne są "ślepe". Widzą najbardziej oczywiste, pasujące do schematu przypadki. Te, które wyłamują się poza schemat, często przechodzą niezauważone. Tak więc jeśli ktoś powie "(...) sprawdzałem tę stronę sqlmapem i nie ma tu SQLi (...)", to wiarygodność (pewność) tego stwierdzenia jest niska.
W tym wypadku SQLi występował w zapytaniu w części LIKE, czyli pseudokod wygląda mniej więcej tak:
(...) LIKE '%".$param."%' AND (...)
Pierwsze starcie tego SQLi z sqlmap zakończyło się zwycięstwem tego pierwszego - sqlmap nie potrafił dobrać odpowiedniej składni. Z tego powodu trzeba było skorzystać z opcji --prefix i --suffix, które dodawane są przez sqlmap przed swoim payloadem. Ogólnie chodziło o to, by przy teście typu 1=1 wspomniany fragment zapytania przyjmował postać typu:
(...) LIKE '%wartosc%' AND 1=1 OR '%' AND (...)
Tak oczywisty przykład sqlmap już zauważył bez problemu. Pozostało tylko poinstruowanie go czego powinien szukać na stronie w przypadku sukcesu i cierpliwie czekać na rezultaty. I tu oczywiście pełny sukces, bo sqlmap jest bardzo dobrym narzędziem, jeśli oczywiście przyjmie się do wiadomości, że nie jest narzędziem typu fire-and-forget.
Podobne przykłady można przytoczyć również dla innych narzędzi (w teorii) automatycznych. Po prostu trzeba pamiętać, że nie wystarczy mieć narzędzia, trzeba jeszcze rozumieć CO robią i JAK to robią.