Podatność na obcięcie SQL zwykle istnieje w bazach danych MySQL. Ta podatność została po raz pierwszy opisana w CVE-2008-4106, która była związana z WordPress CMS.
Jak działają ataki obrotowe SQL
Ten atak działa z powodu obcięcia danych wejściowych użytkownika w bazach danych za pomocą funkcji „Wybór” i „Wstawienie”.
Załóżmy, że programista tworzy tabelę „użytkowników” za pomocą następującego zapytania:
Utwórz użytkowników tabeli (Korzystając z tego schematu, jeśli programista tworzy konto administracyjne z następującymi:
User_name = 'admin' 'Oczywiście te referencje nie są publiczne. W bazie danych jest tylko jedno konto administracyjne, a jeśli atakujący próbuje zarejestrować inne konto w nazwie użytkownika „administratora”, atakujący zawiedzie z powodu kontroli nadmiarowości bazy danych. Atakujący może nadal ominąć tę kontrolę nadmiarowości, aby dodać kolejne konto administratora, wykorzystując podatność na obcięcie SQL. Załóżmy, że atakujący rejestruje inne konto z następującym wejściem:
User_name = 'adminxxxxxxxxxxxxxxxxrandom'Baza danych weźmie „nazwę_ser_name” (26 znaków) i sprawdzi, czy już to istnieje. Następnie wejście nazwa_ser_name zostanie obcięte, a „admin” („admin” z przestrzenią) zostanie wprowadzony w bazie danych, w wyniku czego dali dwóch zduplikowanych użytkowników administratora.
Atakujący jest w stanie utworzyć użytkownika „administratora” z własnym hasłem. Teraz baza danych ma dwa wpisy administratora „użytkownika_name”, ale z różnymi hasłami. Atakujący może zalogować się z nowo utworzonymi poświadczeniami, aby uzyskać panel administracyjny, ponieważ zarówno „admin” i „administrator” użytkownika, jak i „administrator” są równe dla poziomu bazy danych. Teraz spojrzymy na przykładowy atak praktyczny.
Przykładowy atak
W tym przykładzie weźmiemy scenariusz ze strony witryny Overterwire.org. Społeczność OvermeWire zapewnia Wargame CTF, na których możemy praktykować nasze koncepcje bezpieczeństwa. Scenariusz obcięcia SQL występuje na poziomie gry Natas 26-> 27. Możemy uzyskać dostęp do poziomu za pomocą następujących czynności:
URL: http: // natas27.Natas.laboratoria.OvermeWire.orgTen poziom jest dostępny pod adresem: https: // obciąża.org/wargames/natas/natas27.html. Zostaniesz wyświetlona strona logowania, która jest podatna na atak obrotowy SQL.
Po sprawdzeniu kodu źródłowego zobaczysz, że długość nazwy użytkownika wynosi 64, jak pokazano poniżej.
Użytkownik o imieniu „NATAS28” już istnieje. Naszym celem jest utworzenie innego użytkownika o nazwie „NATAS28” za pomocą ataku SQL_TRUNCation. Zatem wprowadzimy NATAS28, a następnie 57 przestrzeni i losowy alfabet (w naszym przypadku A), nazwa użytkownika i każde hasło. Litera „A” nie jest widoczna na zrzucie ekranu ze względu na nazwę użytkownika o długości 65 znaków. Po utworzeniu konta użytkownika będziesz mógł zobaczyćA.'
Jeśli baza danych zawiera podatność SQL_Truncation, wówczas baza danych powinna mieć teraz dwie nazwy użytkowników „NATAS28”. Jedna nazwa użytkownika będzie zawierać nasze hasło. Spróbujmy wprowadzić poświadczenia na stronie logowania.
Teraz jesteśmy zalogowani jako użytkownik „NATAS28”.
Łagodzenie
Aby złagodzić ten atak, będziemy musieli rozważyć wiele czynników.
Na przykład sprawdźmy tryb ścisłego za pomocą następującego zapytania:
mysql> Wybierz @@ sql_modeUtworzymy bazę danych i użytkowników tabeli.'
mysql> Utwórz test bazy danychNastępnie utworzymy użytkownika administratora z poświadczeniami za pomocą zapytania Wstaw.
MySQL> Wstaw do wartości użytkowników („admin”, „hasło1”);Możemy zobaczyć informacje o tabeli „Użytkownicy” za pomocą opcji „Wybierz * od użytkowników”.
Długość nazwy użytkownika to 10 znaków. Teraz spróbujemy ataku obcięcia SQL.
Kiedy próbujemy wprowadzić następujące czynności:
Nazwa użytkownika = 'adminxxxxxa'Otrzymamy błąd, co oznacza, że tryb ścisłego jest całkowicie skuteczny.
mysql> wstaw do wartości użytkowników („admin a”, „pass2”)Bez włączonego trybu ścisłego baza danych wyświetli ostrzeżenia, ale nadal będzie wstawić dane w tabeli.
Wniosek
Atakerzy mogą uzyskać dostęp do konta o dużej liście, jeśli w Twojej aplikacji istnieje podatność SQL_TRunction. Atakujący może łatwo uzyskać informacje o nazwie użytkownika i długości jej bazy danych przy użyciu pól krytycznych, a następnie utworzyć tę samą nazwę użytkownika, a następnie przestrzenie i losowy alfabet po minimalnej długości, co spowodowało utworzenie wielu konta o dużej liczbie osób. Ta podatność jest krytyczna, ale można jej uniknąć, jeśli podejmiesz pewne środki bezpieczeństwa, takie jak aktywacja trybu ścisłego dla wejść użytkowników i uczynienie pola wrażliwego kluczowym kluczowym kluczem w bazie danych.