Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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_input ná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.

Reference