Injection na język polski możemy tłumaczyć jako wstrzyknięcie.
Ten rodzaj błędów ma miejsce jeżeli nie traktujemy danych od użytkownika jako potencjalnie niebezpiecznych i ich odpowiednio nie filtrujemy. To nie powinno być dla Ciebie nic nowego. Pamiętasz nasz pierwszy odcinek o zdalnym wykonaniu kodu? Tam poprzez nieuwagę programisty mogliśmy wykonać dowolny kod na serwerze. Tutaj natomiast możemy doprowadzić do zwrócenia innych rekordów z bazy danych – względem tego jak serwis zaprojektował programista.
Injection to pierwszy z punktów na liście OWASP Top 10 – czyli zbioru 10 najpopularniejszych błędów w zabezpieczeniach aplikacji internetowych. Jak się do tego wszystkiego zabrać?
SQL
Aby móc wysyłać do serwera żądania, które doprowadzą do zwrócenia innych danych z bazy niż normalnie – najpierw musimy poznać język SQL. Istnieje kilka popularnych silników bazodanowych:
- SQLite,
- MariaDB (oraz MySQL),
- PostgreSQL,
- SQL Server.
Każda baza używa nieco innej składni. W większości przypadków jednak podstawowe zapytania są bardzo podobne. Dlatego też na początek proponuje zapoznać się ze składnią SQLite. Dlaczego? Ponieważ jest najprostsza do zrozumienia.
Na początek wystarczy:
- SQLBolt – interaktywne ćwiczenia wprost w przeglądarce.
- Alternatywnie SQL Tutorial by W3Schools.
- SQLite Tutorial + SQLite online – opis większości instrukcji oraz baza działająca wprost w przeglądarce.
Wprowadzenie do języka SQL znajdziesz także w moim dwugodzinnym filmie na temat SQL Injection. Jeżeli wolisz czytać – zobacz ten materiał Sekuraka.
Praktyka
Wiedzę przetestujesz w Web Security Academy.
Więcej zadań znajdziesz na:
Warto również pomyśleć o automatyzacji. Tutaj niekwestionowanym liderem jest narzędzie sqlmap. Więcej informacji znajdziesz na tej stronie wiki.
HackTricks zawiera różne techniki ataku zebrane w jednym miejscu.
Zapoznaj się też z prawdopodobnymi skutkami ataków SQL Injection.
Zaawansowane tematy
Pora na poznanie bardziej skomplikowanych technik:
- Second order SQL Injection.
- Wykonanie zapytania bez spacji.
- Jak wykorzystać sortowanie do pozyskiwania informacji.
- SQL Insert.
- Jak pobrać dane bez znajomości nazw kolumn.
- Zdalne wykonanie kodu poprzez SQL Injection.
Warto też wiedzieć jak chronić się przed tego rodzaju podatnościami. W głównej mierze wystarczy korzystać z mechanizmu prepared statement.
NoSQL injection
Oprócz baz SQL istnieją także bazy NoSQL, które pozwalają na przechowywanie i wyszukiwanie danych modelowanych w inny sposób niż relacje tabelaryczne. Brzmi to mądrze i skomplikowanie ale w rzeczywistości takie nie jest. Tutaj poczytasz o różnicach pomiędzy tymi dwoma rodzajami baz. Nas w głównej mierze będzie interesowała baza MongoDB.
Więcej informacji znajdziesz na:
- Infosec writeups,
- Null Sweep,
- Range Force,
- NoSQL Exploitation Framework (do automatyzacji),
- NoSQLi Lab (ćwiczenia).
Możesz także spróbować OWASP NodeGoat. Znajdziesz tam jednak nie tylko ćwiczenia z SQL Injection ale także XSS czy CSRF. Nie martw się jeżeli nie będziesz potrafił/potrafiła wykonać ich wszystkich. Tutaj znajdziesz podpowiedzi i rozwiązania.
Inne rodzaje wstrzyknięć
Oprócz SQL Injection istnieją także inne rodzaje wstrzyknięć. Chciażby:
W ramach zadania domowego spróbuj znaleźć inne rodzaje. Ile ich jest? 🙂