1. Obetnij treść zapytania
Jeśli chcesz zignorować skrypty w zapytaniu. Na przykład dla poniższego przetwarzania zapytanie wymaga warunku active=1, ale możemy skomentować (--, -- -, -+, #, /*, /**/, // , ;%00…) i zignoruj to. Podczas eksploracji często nie wiemy, co robi pozostała treść zapytania, dlatego użycie komentarzy w tym przypadku jest bardzo skuteczne.

Po skomentowaniu nasze zapytanie brzmi:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
2. Pomiń filtrowanie słów kluczowych
A. Komentarze wbudowane
Komentarze wbudowane są bardzo skutecznie wykorzystywane do ominięcia filtrowania białych znaków. Aby ominąć filtrowanie białych znaków, można użyć następujących znaków: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0). Na przykład:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
Lub pomiń filtrowanie słów kluczowych (dostępne w MySql). W poniższym przykładzie słowa kluczowe union i hasło znajdują się na czarnej liście, więc zostały zablokowane.Możemy to ominąć w następujący sposób:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
B. Zamień słowa kluczowe
Wykorzystując wstrzykiwanie SQL, często używamy słów kluczowych, takich jak: union,select,information_schema... W wielu przypadkach programiści po prostu zastępują te słowa kluczowe:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
Łatwo możemy zauważyć, że brakuje powyższego kodu przetwarzającego. Jeśli jest to po prostu dopasowanie wzorca, obejście jest niezwykle proste. Zastosujmy zasadę rozróżniania wielkości liter, gdzie wielkie i małe litery są interpretowane inaczej.
Teraz zamiast używać słowa kluczowego:
select, union…
Użyjemy:
SeLEcT, UniOn…
Podstawą tego obejścia jest to, że systemy zarządzania bazami danych nie rozróżniają słów kluczowych case i case.
W niektórych przypadkach aplikacja internetowa odfiltruje całość lub część określonych słów kluczowych (unia, wybierz...). Ominiemy w następujący sposób:
id=1+uniunionon+SeLselectecT+1,2,3-- -
Po odfiltrowaniu unii i selekcji przez aplikację internetową, pozostanie nam prawidłowe zapytanie w następujący sposób:
id=1+union+SeLecT+1,2,3-- -
C. Kodowanie znaków
Możemy ominąć, gdy WAF (Web Application Firewall) blokuje słowa kluczowe, kodując je. Wiele aplikacji WAF dekoduje zapytanie tylko raz i odfiltrowuje słowa kluczowe z czarnej listy. Następnie zakodujmy żądanie dwukrotnie, aby w tym przypadku można było je ominąć.
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
3. Pomiń bloki pojedynczych i podwójnych cudzysłowów
- Spójrzmy na przykład, zanim poznamy konkretnie tę obwodnicę.
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
W tym scenariuszu mamy w bazie danych tabelę o nazwie users. Następnym zadaniem jest poznanie nazwy kolumny w tabeli, aby uzyskać o niej informacje. Podobnie jak w powyższym zapytaniu, używamy warunku: nazwa_tabeli='użytkownicy'. Ale jeśli zarówno pojedyncze cudzysłowy ('), jak i podwójne cudzysłowy (") są blokowane przez WAF, nie możemy już używać „użytkowników” ani „użytkowników”. Jak więc rozwiązać ten problem? Wbudowany system baz danych udostępnia nam funkcję, która bardzo dobrze rozwiązuje ten problem, czyli funkcję CHAR( ) (dla Oracle jest to CHR()).Przykładowo w powyższym zapytaniu ominiemy to poprzez:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
Programiści PHP są bardzo zaznajomieni z funkcją addlashes(). Funkcja addlashes() powoduje dodanie przed znakami specjalnymi, takimi jak pojedynczy cudzysłów ('), podwójny cudzysłów ("), ukośnik odwrotny (\), znak NUL (bajt zerowy) „\”, aby pomóc systemowi zarządzania bazą danych. Czy istnieje nie ma trudności i zamieszania przy obsłudze ciągów zawierających te znaki?Tak więc, gdy chcemy wstrzyknąć do zapytania zgodnie ze skryptem: nazwa='jakaśNazwa' lub '1'='1'-- Wyniki nie są już takie, jakich oczekiwaliśmy.
Istnieje jednak technika ominięcia funkcji addlashes() w celu wstrzyknięcia znaków pojedynczego cudzysłowu ('). Technika ta jest powszechnie znana od dłuższego czasu, a jej wdrożenie jest dość trudne, ponieważ jest powiązane ze stylem kodowania strony internetowej.
4. Pomiń błąd „nielegalne połączenie zestawień dla operacji UNION”
W niektórych systemach zarządzania (powszechnie spotykanych w MySql), gdy bazy danych i tabele są ustawione na sortowanie, przy użyciu słowa kluczowego UNION zostanie zgłoszony błąd „nielegalne połączenie sortowania dla operacji UNION”. Ustawienie sortowania może wynikać z zamierzenia projektanta bazy danych lub z domyślnego ustawienia MySql. W przypadku stosowania unii musimy zadbać o to, aby warunek wyboru wartości w każdym polu miał zdefiniowany odpowiedni typ kodu. Moim zdaniem ten błąd jest dość powszechny, szczególnie w przypadku CMS-ów z uruchomionym Apache MySql. Więcej informacji można znaleźć na stronie: http://bugs.mysql.com/bug.php?id=57926.
W takim przypadku możemy skorzystać ze sposobów konwersji na odpowiedni typ kodowania.
Na przykład w następującym przypadku:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
W powyższym zapytaniu, jeśli kolumna 1 ma sortowanie ustawione na przykład na Unicode-UTF8 lub _latin1, wówczas to, co zostanie wybrane z kolumny 2, będzie musiało zostać przekonwertowane na odpowiedni kod. Możemy wymusić styl w następujący sposób:
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
Widzimy wadę tej metody obejścia: musimy wiedzieć, że zestawiony kod to _latin1. Moim zdaniem lepszym sposobem na ominięcie tego jest użycie funkcji kodowania i dekodowania hex i unhex.
![Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących Web5: Wstrzykiwanie SQL - niektóre techniki omijania mechanizmów filtrujących]()
Istnieje wiele innych funkcji, których można użyć zamiast hex i unhex.