Ú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é popisujeme, len hľadajú základné nedostatky 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: ZOZNAM telefónu
FROM
WHERE posledné meno = '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: ZOZNAM telefónu
FROM
WHERE posledné meno = 'chapple' a firstname = 'mike'
A (vyberte počet (*) z falošného)> 0
OR '1' = '1'
Všimnete si, že vyššie uvedená syntax je trochu iná ako pôvodná adresa URL. Uvoľnili sme sa pri prevode premennej kódovanej adresou URL pre ich ekvivalenty ASCII, aby sme jednoduchšie sledovali tento príklad. Napríklad% 3d je kódovanie URL pre znak '='. K podobným účelom sme pridali aj niektoré linky. 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 prvým menom, ktorý obsahuje veľa SQL. Zobrazí sa chybová správa z aplikácie, ktorá je podobná nižšie: Chyba: žiadny používateľ s názvom mike + AND + (vyberte + počet (*) + od + 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 "falošný".
/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 serveraServer narazil na internú chybu alebo nesprávnu konfiguráciu a nedokázal dokončiť vašu žiadosť.
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ú: Hodnotenie výsledkov