Nie mam i przynajmniej do końca miesiąca nie będę miał czasu na napisanie wyjaśnienia do odcinka dotyczącego SQL Injection: http://bootcamp.threats.pl/lesson07/. Podam jednak kilka wskazówek.
Bootcamp VII: (blind) SQL Injection (hinty)
Ustalenie wersji bazy danych nie musi być zrealizowane w sposób czysto "techniczny". Można sprawdzić gdzie utrzymywane są przykłady, zobaczyć jakie oferowane tam są bazy danych. Informacja, że sqlmap nie radzi sobie z tym zadaniem może być przydatna - nie radzi sobie, bo nie potrafi rozpoznać bazy danych, czyli będzie to...? Dodatkowa wskazówka - przygotowując takie przykłady zależy mi jednak, by nie wpuścić "intruza" zbyt głęboko. Jak mogę go dobrze "zamknąć w klatce" korzystając z prostych środków? Swoje przypuszczenia można potwierdzić próbując wołać specyficzne dla danej bazy funkcje/tabele. Następnie należy poszukać jak w tej bazie można uzyskać opis jej struktury (znów jest pewien wyjątek od "typowych" przypadków).
Samo injection można exploitować (co najmniej) na dwa sposoby. Jeden ze sposobów to klasyczny blind poprzez zapytania typu AND 1=1, AND 1=(SELECT 1), AND 1=(i tu bardziej złożony warunek) - przy okazji kolejny hint co do bazy danych, nie ma słówka DUAL.
Drugim sposobem jest wykorzystanie UNION SELECT. W tym celu należy ustalić ile kolumn jest w bazie. Można to zrobić (znów - co najmniej) na dwa sposoby. Pierwszy jest klasyczny typu UNION SELECT null, null, (...), drugi może być łatwiejszy. Można dopisać ORDER BY i... w ORDER BY można podać numer kolumny, po której dane mają być sortowane. Co się stanie, gdy numer będzie większy, niż liczba kolumn w tabeli?
W zasadzie to UNION SELECT jest bardziej "klasyczną metodą", a blind jest czymś "wydziwianym". Piszę o "klasycznym blind", ponieważ w bardziej złożonych aplikacjach injection bardzo często znajduje się w skomplikowanych zapytaniach, gdzie dobranie odpowiedniej składni dla UNION SELECT jest zadaniem co najmniej nietrywialnym. Zdecydowanie łatwiej jest pozyskać wówczas dane atakując przy pomocy techniki blind, choć oczywiście samo pozyskiwanie danych trwa zdecydowanie dłużej.
Właśnie dlatego, że nie trzeba korzystać z blind i można skorzystać z UNION SELECT, słówko blind znalazło się w nawiasie.