Skip to main content

Testování chyby zabezpečení SQL Injection

The Things Dr Bright is not allowed to do at the SCP Foundation (Červen 2026)

The Things Dr Bright is not allowed to do at the SCP Foundation (Červen 2026)
Anonim

Útoky SQL Injection představují obrovské riziko pro webové aplikace, které závisí na databázovém backendu, který generuje dynamický obsah. V tomto typu útoku hackeři manipulují s webovou aplikací v pokusu o zavedení vlastních příkazů SQL do příkazů vydávaných databází. Příklad naleznete v článku SQL Injection Attacks on Databases. V tomto článku se podíváme na několik způsobů, jak můžete otestovat vaše webové aplikace, abyste zjistili, zda jsou zranitelní útoky SQL Injection.

Automatizované skenování pomocí vstřikování SQL

Jednou z možností je použití automatizovaného skeneru pro zranitelnost webových aplikací, jako je HP WebInspect, AppScan společnosti IBM nebo Chopic's Hailstorm. Tyto nástroje nabízejí snadné, automatizované způsoby analýzy vašich webových aplikací, které by mohly potenciálně způsobit chyby zabezpečení SQL Injection. Nicméně jsou poměrně drahé, běží až na 25 000 dolarů za sedadlo.

Manuální SQL Injection Testy

Co je špatný vývojář aplikace? Můžete vlastně spustit několik základních testů, které vyhodnotí vaše webové aplikace pro zranitelnosti SQL Injection, které používají pouze webový prohlížeč. Nejprve je to slovo opatrné: testy, které popisujeme, pouze hledají základní chyby SQL Injection. Neuvedou pokročilé techniky a jsou poněkud únavné k použití. Pokud si to můžete dovolit, jděte s automatizovaným skenerem. Pokud však tuto cenovou značku nemůžete zvládnout, manuální testování je skvělý první krok.Nejjednodušší způsob, jak vyhodnotit, zda je aplikace zranitelná, je experimentovat s neškodnými injektážními útoky, které nebudou ve skutečnosti poškozovat vaši databázi, pokud uspějí, ale poskytnou vám důkaz, že je třeba opravit problém. Předpokládejme například, že jste měli jednoduchou webovou aplikaci, která vyhledává jednotlivce v databázi a jako výsledek poskytuje kontaktní informace. Tato stránka může používat následující formát adresy URL:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Můžeme předpokládat, že tato stránka provádí vyhledávání databáze pomocí dotazu podobného následujícímu:

ZVOLTE telefon

FROM

WHERE příjmení = 'chapple' a firstname = 'mike'

Pojďme to trochu experimentovat. S naším předpokladem výše můžeme provést jednoduchou změnu adresy URL, která testuje útoky SQL injection:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Pokud nebyla webová aplikace správně chráněna proti injekci SQL, jednoduše zasílá toto falešné jméno do příkazu SQL, který provádí proti databázi, což má za následek:

ZVOLTE telefon

FROM

WHERE příjmení = 'chapple' a firstname = 'mike'

AND (vyberte počet (*) z falešných)> 0

OR '1' = '1'

Všimnete si, že výše uvedená syntaxe se trochu liší od původní syntaxe. Zvolili jsme konverzi proměnné kódované adresou URL pro jejich ekvivalenty ASCII, abychom usnadnili sledování příkladu. Například% 3d je kódování URL pro znak '='. K podobným účelům jsme také přidali některé řádkové přestávky.

Hodnocení výsledků

Test se zobrazí, když se pokusíte načíst webovou stránku s uvedenou adresou URL. Pokud se webová aplikace dobře chová, před odevzdáním dotazu do databáze bude ze vstupního údaje odstranit jednotlivé úryvky. To jednoduše vyústí v podivné vyhledávání pro někoho s křestním jménem, ​​který obsahuje banda SQL. Zobrazí se chybová zpráva z aplikace podobná následující:

Chyba: Nebyl nalezen uživatel s názvem mike + AND + (vyberte + počet (*) + od + falešný) +% 3e0 + OR + 1% 3d1

Chapple!

Na druhé straně, pokud je aplikace náchylná na SQL injekci, předá výkaz přímo do databáze, což má za následek jednu ze dvou možností. Nejprve, pokud váš server obsahuje podrobné chybové zprávy (které byste neměly), uvidíte něco podobného:

Poskytovatel Microsoft OLE DB pro ovladače ODBC chyba '80040e37'

Microsoft ODBC SQL Server Driver SQL Server Neplatný název objektu "fake".

/directory.asp, řádek 13

Na druhou stranu, pokud váš webový server neobjeví podrobné chybové zprávy, získáte obecnější chybu, například:

Interní chyba serveruServer zjistil vnitřní chybu nebo nesprávnou konfiguraci a nebyl schopen dokončit požadavek.

Obraťte se na správce serveru, abyste informovali o době, kdy k chybě došlo, a o všech možnostech, které jste mohli udělat, které mohou způsobit chybu.

Další informace o této chybě mohou být k dispozici v protokolu chyb serveru.

Pokud obdržíte jednu z výše uvedených dvou chyb, je vaše aplikace zranitelná útokem SQL injection. Některé kroky, které můžete použít k ochraně aplikací před útoky SQL Injection, zahrnují:

  • Proveďte kontrolu parametrů ve všech aplikacích. Pokud například žádáte někoho o zadání čísla zákazníka, ujistěte se, že vstup je před provedením dotazu číselný.
  • Omezte oprávnění účtu, který provádí dotazy SQL. Platí pravidlo pro nejmenší oprávnění. Pokud účet použitý k provedení dotazu nemá oprávnění k jeho provedení, nebude úspěšný.
  • Použijte uložené procedury (nebo podobné techniky), abyste zabránili uživatelům přímo ovlivňovat kód SQL.