Testiranje za SQL Injection Vulnerabilities

Napadi SQL Injection predstavljaju ogroman rizik za web aplikacije koje zavise od baze podataka baze podataka radi generisanja dinamičkog sadržaja. U ovoj vrsti napada, hakeri manipulišu web aplikacijom u pokušaju da ubacuju svoje sopstvene SQL komande u one koje izdaje baza podataka. Na primjer, pogledajte članak SQL Injection Attacks na baze podataka. U ovom članku pogledamo nekoliko načina na koje možete testirati svoje web aplikacije kako biste utvrdili da li su podložni napadima SQL Injection-a.

Automatsko skeniranje SQL Injection-a

Jedna mogućnost je korištenje automatiziranog skenera ranjivosti web aplikacija, kao što su HP's WebInspect, IBM's AppScan ili Cenzic's Hailstorm. Ovi alati pružaju jednostavan i automatizovan način analiziranja vaših web aplikacija za potencijalne SQL Injection propuste. Međutim, oni su prilično skupi, i koriste se do 25.000 dolara po sedištu.

Ručni SQL Injection testovi

Šta je loš developer aplikacija? U stvari, možete pokrenuti nekoliko osnovnih testova da biste procijenili svoje web aplikacije za ranjivost SQL Injection-a koristeći ništa više od web pretraživača. Prvo, rec o oprezu: testovi koje sam opisao jedino traže osnovne SQL Injection mačke. Oni neće otkriti napredne tehnike i donekle su dosadni za korištenje. Ako to možete priuštiti, idite automatskim skenerom. Međutim, ako ne možete da podnesete tu cenu, ručno testiranje je odličan prvi korak.

Najlakši način za procjenu da li je aplikacija ranjiva je eksperimentisanje sa bezazlenim injekcionim napadima koji neće stvarno povrijediti vašu bazu podataka ako uspiju, ali će vam pružiti dokaze da morate ispraviti problem. Na primjer, pretpostavimo da ste imali jednostavnu web aplikaciju koja gleda pojedinca u bazu podataka i kao rezultat daje kontakt informacije. Ova stranica može koristiti sledeći URL format:

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

Možemo pretpostaviti da ova stranica obavlja pretragu baze podataka pomoću upita sličnog slijedećeg:

SELECT telefon FROM direktorijum WHERE lastname = 'chapple' i firstname = 'mike'

Hajde da eksperimentišemo s ovim malo. Uz našu pretpostavku iznad, možemo napraviti jednostavnu promjenu URL-a koji testira SQL injekcije:

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

Ako web aplikacija nije bila ispravno zaštićena od ubrizgavanja SQL-a, ona jednostavno uključuje ovo lažno ime u SQL izraz koji izvršava prema bazi podataka, što rezultira:

SELECT telefon FROM direktorijum WHERE lastname = 'chapple' i firstname = 'mike' I (odaberite broj (*) od lažnog)> 0 OR '1' = '1'

Primetićete da je gornja sintaksa malo drugačija od onog u originalnom URL-u. Uzeo sam slobodu pretvaranja promenljive kodirane varijable za ASCII ekvivalente kako bih lakše pratio primjer. Na primer,% 3d je URL-kodiranje za znak '='. Takođe sam dodao i neke linijske pauze za slične svrhe.

Evaluacija rezultata

Test dolazi kada pokušate da učitate veb stranicu sa gorenavedenim URL-om. Ako se web aplikacija dobro ponaša, ona će izbaciti pojedine citate iz unosa pre nego što prosledi upit u bazu podataka. Ovo će jednostavno rezultirati čudnim potragom za nekim s imenom koje uključuje gomilu SQL-a! Videćete poruku o grešci iz aplikacije slične onoj u nastavku:

Greška: Nije pronađen korisnik sa imenom mike + AND + (izaberite + broj (*) + iz + lažni) +% 3e0 + OR + 1% 3d1 Chapple!

Sa druge strane, ako je aplikacija podložna SQL injekciji, ona će proći izvod direktno u bazu podataka, što će rezultirati jednom od dvije mogućnosti. Prvo, ako je na vašem serveru omogućena detaljna poruka o grešci (koje ne bi trebalo!), Videćete nešto ovako:

Microsoft OLE DB Provider za ODBC upravljačke greške '80040e37' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Nevažeće ime objekta 'lažno'. /directory.asp, red 13

S druge strane, ako vaš web server ne prikazuje detaljne poruke o grešci, dobićete općenite greške, kao što su:

Unutrašnja greška servera Server je naišao na unutrašnju grešku ili pogrešnu konfiguraciju i nije mogao da dovrši svoj zahtev. Molimo kontaktirajte administratora servera kako biste obavestili o vremenu greške i svemu što ste možda učinili, što je možda izazvalo grešku. Više informacija o ovoj grešci može biti dostupno u dnevniku grešaka servera.

Ako primite bilo koju od gore navedenih grešaka, vaša aplikacija je podložna SQL-inekcijskom napadu! Neki koraci koje možete preduzeti da biste zaštitili svoje aplikacije protiv napada SQL Injection su: