Testovanie zraniteľností SQL Injection

Útoky SQL Injection predstavujú obrovské riziká pre webové aplikácie, ktoré závisia od databázového backendu na generovanie dynamického obsahu. Pri tomto type útoku hackeri manipulujú s webovou aplikáciou pri pokuse o vstrekovanie vlastných príkazov SQL do príkazov vydaných databázou. Príklad nájdete v článku SQL Injection Attacks on Databases. V tomto článku sa pozrieme na niekoľko spôsobov, ako môžete otestovať webové aplikácie, aby ste zistili, či sú citlivé na útoky SQL Injection.

Automatizované skenovanie pomocou SQL

Jednou z možností je použitie automatizovaného skenera na zraniteľnosť webových aplikácií, ako napríklad HP WebInspect, AppScan IBM alebo Chopic's Hailstorm. Všetky tieto nástroje ponúkajú jednoduché, automatizované spôsoby analýzy vašich webových aplikácií na potenciálne chyby SQL Injection. Avšak, sú dosť drahé, bežia až do výšky 25 000 dolárov za sedadlo.

Manuálne SQL Injection Testy

Čo je špatný vývojár aplikácií robiť? V skutočnosti môžete vykonať niekoľko základných testov na vyhodnotenie vašich webových aplikácií z dôvodu zraniteľnosti programu SQL Injection, ktoré nepoužívajú nič viac ako webový prehliadač. Po prvé, slovo opatrnosti: testy, ktoré popisujem, len hľadajú základné chyby SQL Injection. Nepoznajú pokročilé techniky a sú trochu únavné. Ak si to môžete dovoliť, prejdite s automatizovaným skenerom. Ak však túto cenu nemôžete zvládnuť, manuálne testovanie je skvelým prvým krokom.

Najjednoduchší spôsob, ako vyhodnotiť, či je aplikácia zraniteľná, je experimentovať s nepoškodenými injekčnými útokmi, ktoré v skutočnosti nepoškodia vašu databázu, ak sa im podarí, ale poskytne vám dôkaz, že potrebujete opraviť problém. Predpokladajme napríklad, že ste mali jednoduchú webovú aplikáciu, ktorá vyhľadáva osobu v databáze a ako výsledok poskytuje kontaktné informácie. Táto stránka môže používať tento formát adresy URL:

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

Môžeme predpokladať, že táto stránka vykonáva vyhľadávanie databázy pomocou dotazu podobného nasledujúcemu:

VYBERTE telefón z adresára WHERE priezvisko = 'chapple' a firstname = 'mike'

Pokúsme sa s tým trošku experimentovať. S naším predpokladom môžeme urobiť jednoduchú zmenu adresy URL, ktorá testuje útoky SQL injection:

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

Ak webová aplikácia nie je riadne chránená proti SQL injekcii, jednoducho zasunie tento falošný prvý názov do príkazu SQL, ktorý vykoná proti databáze, čo má za následok:

SELECT telefón z adresára WHERE priezvisko = 'chapple' a firstname = 'mike' AND (vyber počet (*) z falošných)> 0 OR '1' = '

Všimnete si, že vyššie uvedená syntax je trochu iná ako pôvodná adresa URL. Uvoľnila som si možnosť premeny premennej zakódovanej adresy URL pre ich ekvivalenty ASCII, aby bolo jednoduchšie sledovať príklad. Napríklad% 3d je kódovanie URL pre znak '='. Pridal som aj niektoré prestávky na línie na podobné účely.

Hodnotenie výsledkov

Test sa zobrazí, keď sa pokúsite načítať webovú stránku s uvedenou adresou URL. Ak sa webová aplikácia správa správne, pred odoslaním dotazu do databázy odstráni jednotlivé úvodzovky zo vstupu. To jednoducho povedie k zvláštnemu vyhľadávaniu pre niekoho s krstným menom, ktorý obsahuje veľa SQL! Zobrazí sa chybová správa z aplikácie, ktorá je podobná nižšie:

Chyba: Žiaden používateľ nenašiel s názvom mike + AND + (vyberte + počet (*) + z + falošný) +% 3e0 + OR + 1% 3d1 Chapple!

Na druhej strane, ak je aplikácia citlivá na SQL injection, prejde výpis priamo do databázy, čo má za následok jednu z dvoch možností. Po prvé, ak má váš server povolené podrobné chybové hlásenia (čo by ste nemali!), Uvidíte niečo takéto:

Poskytovateľ služby Microsoft OLE DB pre ovládače ODBC chyba '80040e37' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Neplatný názov objektu 'fake'. /directory.asp, riadok 13

Na druhej strane, ak váš webový server neobjaví podrobné chybové hlásenia, dostanete všeobecnejšiu chybu, napríklad:

Interná chyba servera Server narazil na internú chybu alebo nesprávnu konfiguráciu a nedokázal vašu žiadosť dokončiť. Kontaktujte administrátora servera, aby ste informovali o čase, kedy sa vyskytla chyba a o všetkom, čo ste mohli urobiť, čo môže spôsobiť chybu. Ďalšie informácie o tejto chybe môžu byť k dispozícii v denníku chýb servera.

Ak sa zobrazí jedna z dvoch vyššie uvedených chýb, vaša aplikácia je citlivá na útok SQL injection! Niektoré kroky, ktoré môžete použiť na ochranu vašich aplikácií pred útokmi SQL Injection, zahŕňajú: