it-swarm-eu.dev

Jak mohu otestovat zranitelnost SQL vstřikování na webu se vstupními poli?

Jaké metody jsou k dispozici pro testování zranitelnosti SQL injekcí?

48
John S

Existuje řada způsobů testování aplikace na zranitelnosti, jako je SQL Injection. Testy se dělí do tří různých metodik:

Slepá injekce:

Příklad MySQL:

http://localhost/test.php?id=sleep(30)

Pokud je tento příkaz SQL interpretován databází, bude načítání stránky trvat 30 sekund.

chybové zprávy:

http://localhost/test.php?id='"

Pokud je hlášení chyb povoleno a tento požadavek je náchylný k injektování sql, dojde k následující chybě:

Máte chybu v syntaxi SQL; v manuálu, který odpovídá vaší verzi MySQL serveru, zkontrolujte správnou syntaxi, která se má použít poblíž řádku na řádku 5

Vstřikování založené na tautologii :

http://localhost/test.php?username=' or 1=1 /*&password=1

V tomto případě dodání Tautologie nebo prohlášení, které je vždy pravdivé, poskytuje předvídatelný výsledek. V tomto případě by předvídatelným výsledkem bylo přihlášení útočníka k prvnímu uživateli v databázi, což je obvykle správce.

Existují nástroje, které automatizují použití výše uvedených metod k detekci injekce SQL ve webové aplikaci. Existují bezplatné a otevřené nástroje jako Wapiti a Skipfish , které to dělají. Sitewatch poskytuje bezplatnou službu, která je mnohem lepší než tyto nástroje s otevřeným zdrojovým kódem. To mohu říci, protože jsem vývojář pro Sitewatch.

52
rook

Je nejlepší testovat vaše stránky na SQL injekci. Je to nejlepší, jak se vyhnout potenciální SQL injekci. Nikdy nevytvářejte dotazy SQL tím, že provádíte zpracování řetězců sami, když je k dispozici vstup uživatele. Ve všech dotazech použijte vázané parametry (také dezinfikujte všechna uživatelská data, pokud by mohla být použita jakýmkoli škodlivým způsobem a stanovte rozumné limity na dotazy). To je dotaz sql_execute("select user from user_db where id="+input_id) je nebezpečný (představte si, že jeho input_id = "1 OR 1==1 --"), Ale stored_procedure = "select user from user_db where id = ? LIMIT 1;", sql_execute_with_param(stored_procedure, input_id); je bezpečný.

Je zřejmé, že pouze v případě, že se snažíte zajistit svůj vlastní web v bezpečí. Pokud se snažíte najít nedostatky v jiných aplikacích, je to jiný příběh a potenciálně proti FAQ, které uvádí, že tento web není určen pro černé klobouky.) OWASP však má velmi dobrý článek o testování na - SQL injection .

13
dr jimbob

Pokud začínáte od nuly, navrhl bych jedno z následujících:

  1. Najměte někoho, kdo ví, co dělá
  2. Využijte automatizovaný nástroj jako počáteční mezeru. Některé možnosti zahrnují Burp Pro, ZAP a SQL Map.

Nezapomeňte však, že když odešlete zvláštní a potenciálně nebezpečný vstup do webové aplikace, máte značnou šanci poškodit integritu vaší aplikace.

Můžete zcela přerušit svou webovou aplikaci nebo si můžete uložit podivný vstup do databáze aplikace, která se později nějakým způsobem vytáhne a analyzuje - a možná i ne vaší aplikací.

Obecná pravidla pro tento druh testování jsou jednoduchá: testování neproběhne, dokud se neobnovíte ze známé zálohy. Po automatickém testování injekce byste neměli zvážit vaši aplikaci v normálním provozním stavu, dokud to neuděláte.

5
Daniel Miessler