SQLi
- SQL injection je zranitelnost, která umožňuje útočníkovi vložit škodlivý SQL kód do vstupního pole, které je následně zpracováno databází. To může vést k neoprávněnému přístupu k datům, jejich úpravě nebo dokonce smazání.
- Může nastat, když aplikace nevaliduje nebo nesanitizuje vstupní data správně, což umožňuje útočníkovi vložit škodlivý SQL kód do dotazu, který je následně proveden databází.
Co je SQL?
- Structured Query Language (SQL) je jazyk používaný pro správu a manipulaci s relačními databázemi - tyto databáze se nazývají často SQL databáze. SQL umožňuje uživatelům vytvářet, upravovat a dotazovat se na data uložená v databázi.
- SQL se používá pro různé účely, včetně:
- Vytváření a správy databází a tabulek
- Vkládání, aktualizace a mazání dat
- Dotazování se na data pomocí příkazů SELECT
- Nastavení oprávnění pro uživatele a role
- Bližší informace o SQL a jeho příkazech naleznete v sekci o SQL.
Jak útok funguje?
- Útočník vloží škodlivý SQL kód do vstupního pole, které je následně zpracováno databází. Příklad v Pythonu:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
user_input = "admin"
password_input = "password"
cursor.execute(f"SELECT * FROM users WHERE username = '{user_input}' AND password = '{password_input}'")
V tomo příkladu, pokud user_input nebo password_input obsahuje škodlivý SQL kód, může útočník získat neoprávněný přístup k datům nebo dokonce převzít kontrolu nad databází.
Jak databáze uvidí query
- Dejme tomu, že útočník vloží do
user_inputnásledující škodlivý SQL kód:admin' --. Výsledný SQL dotaz, který bude odeslán do databáze, bude vypadat takto:
SELECT * FROM users WHERE username = 'admin' --' AND password = 'password';
Takže databáze vykoná co vidí - to je vybere všechny uživatele s uživatelským jménem admin a ignoruje zbytek dotazu (včetně kontroly hesla) kvůli komentáři --. To může vést k neoprávněnému přístupu k datům nebo dokonce k převzetí kontroly nad databází.
Následky SQL injection
- SQL injection útoky mohou mít vážné důsledky pro bezpečnost a integritu dat.
- Pomocí složitých SQL injection útoků může útočník získat přístup k citlivým informacím, jako jsou uživatelská jména, hesla, osobní údaje nebo finanční informace. Může také upravovat nebo mazat data, což může vést k poškození databáze a ztrátě důležitých informací.
Ochrana proti SQL injection
- Pro ochranu proti SQL injection útokům je důležité správně validovat a sanitizovat vstupní data, používat parametrizované dotazy (prepared statements), nebo používat ORM (Object-Relational Mapping) knihovny, které automaticky zabraňují SQL injection útokům. Dále je důležité pravidelně aktualizovat software a používat bezpečnostní záplaty pro databázové systémy a webové servery.
- Příklad použití parametrizovaných dotazů v Pythonu s knihovnou
sqlite3:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
user_input = "admin"
password_input = "password"
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (user_input, password_input))
V tomto příkladu jsou vstupní data user_input a password_input předána jako parametry do SQL dotazu a až databáze je zpracovává. Toto zabraňuje útočníkovi vložit škodlivý SQL kód a tím zajišťuje bezpečnost aplikace proti SQL injection útokům.
sqlmap
- sqlmap je open-source nástroj na automatizované vyhledávání a exploataci SQL injection zranitelností v primárně webových aplikacích. Umožňuje testerům bezpečnosti a vývojářům identifikovat a opravit SQL injection zranitelnosti ve svých aplikacích.
- sqlmap podporuje různé databázové systémy, včetně MySQL, PostgreSQL, Oracle, Microsoft SQL Server a dalších. Nástroj nabízí širokou škálu funkcí, včetně detekce zranitelností, získávání dat z databáze, získávání informací o databázovém serveru a dalších.
- Ukázkové použití sqlmap pro testování SQL injection zranitelnosti na webové aplikaci:
sqlmap -u "http://example.com/vulnerable.php?id=1" --batch
Tento příkaz spustí sqlmap a testuje zranitelnost SQL injection na URL http://example.com/vulnerable.php?id=1. Volba --batch umožňuje sqlmapu pracovat bez interaktivního zadávání, což je užitečné pro automatizované testování.
- Pro první použití se hodí možnost
--wizard, která vás provede nastavením testování krok za krokem:
sqlmap --wizard
Shrnutí
- SQL injection je zranitelnost, která umožňuje útočníkovi vložit škodlivý SQL kód do vstupního pole, které je následně zpracováno databází.
- Jedná se o typ útoku způsobený nedostatečnou sanitizací uživatelského vstupu.
- Může vést k neoprávněnému přístupu k datům, jejich úpravě nebo dokonce smazání.
- sqlmap je nástroj pro automatizované vyhledávání a exploataci SQL injection zranitelností ve webových aplikacích.