Toets vir SQL Injectie Vulnerabilities

SQL-inspuitingsaanvalle vorm geweldige risiko's vir webprogramme wat afhang van 'n databasis- backend om dinamiese inhoud te genereer. In hierdie tipe aanval manipuleer hackers 'n webprogram in 'n poging om hul eie SQL-opdragte in te spuit in die wat deur die databasis uitgereik word. Vir 'n voorbeeld, sien die artikel SQL-inspuitingsaanvalle op databasisse. In hierdie artikel kyk ons ​​na verskeie maniere om u webprogramme te toets om te bepaal of hulle kwesbaar is vir SQL-inspuitingsaanvalle.

Outomatiese SQL Injection Scanning

Een moontlikheid is die gebruik van 'n outomatiese webprogram kwesbaarheid skandeerder, soos HP se WebInspect, IBM se AppScan of Cenzic se Hailstorm. Hierdie gereedskap bied almal maklike, outomatiese maniere om jou webprogramme te analiseer vir moontlike SQL-inspuitingsprobleme. Hulle is egter redelik duur en hardloop tot $ 25,000 per sitplek.

Handleiding SQL Injectie Toetse

Wat is 'n swak aansoekontwikkelaar om te doen? U kan eintlik basiese toetse uitvoer om u webprogramme vir SQL-inspuitingskwessies te evalueer met niks meer as 'n webblaaier nie. Eerstens, 'n woord van versigtigheid: die toetse wat ek beskryf, soek net na basiese SQL-spuitfoute. Hulle sal nie gevorderde tegnieke opspoor nie en is ietwat vervelig om te gebruik. As jy dit kan bekostig, gaan met 'n outomatiese skandeerder. As jy egter nie die prys kan hanteer nie, is handmatige toetsing 'n goeie eerste stap.

Die maklikste manier om te evalueer of 'n aansoek kwesbaar is, is om te eksperimenteer met onskadelike inspuitingsaanvalle wat jou databasis nie werklik sal benadeel as hulle slaag nie, maar sal jou bewys lewer dat jy 'n probleem moet regstel. Veronderstel byvoorbeeld dat jy 'n eenvoudige webprogram het wat 'n individu in 'n databasis opkyk en as gevolg daarvan kontakbesonderhede verskaf. Daardie bladsy mag die volgende URL-formaat gebruik:

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

Ons kan aanvaar dat hierdie bladsy 'n databasis-opsoektog uitvoer, met behulp van 'n soektog soortgelyk aan die volgende:

SELECT telefoon uit gids WAAR laaste naam = 'chapple' en eerste naam = 'Mike'

Kom ons eksperimenteer hiermee 'n bietjie. Met ons veronderstelling hierbo, kan ons 'n eenvoudige verandering maak aan die URL wat toetse vir SQL-inspuiting aanvalle:

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

As die webtoepassing nie behoorlik teen SQL-inspuiting beskerm is nie, steek dit net die valse voornaam in die SQL-stelling wat dit uitvoer teen die databasis, wat lei tot:

SELECT selfoon FROM gids WAAR laaste naam = 'chapple' en eerste naam = 'Mike' EN (kies telling (*) van nep)> 0 OF '1' = '1'

Jy sal sien dat die bostaande sintaksis 'n bietjie anders is as die oorspronklike URL. Ek het die vryheid om die URL-gekodeerde veranderlike om te skakel vir hul ASCII-ekwivalente om dit makliker te maak om die voorbeeld te volg. Byvoorbeeld,% 3d is die URL-kodering vir die '=' karakter. Ek het ook lynbreuke vir soortgelyke doeleindes bygevoeg.

Evaluering van die resultate

Die toets kom wanneer u die webblad probeer laai met die bostaande URL. As die webtoepassing goed gedra word, sal dit die enkele aanhalingstekens uit die insette uitvee voordat die navraag na die databasis verby word. Dit sal bloot 'n vreemde opzoeking vir iemand met 'n voornaam tot gevolg hê wat 'n klomp SQL insluit! Jy sal 'n foutboodskap sien van die program soortgelyk aan die een hieronder:

Fout: Geen gebruiker gevind met die naam mike + AND + (kies + telling (*) + van + valse) +% 3e0 + OF + 1% 3d1 Chapple!

Aan die ander kant, as die aansoek kwesbaar is vir SQL-inspuiting, sal dit die stelling direk na die databasis slaag, wat een van twee moontlikhede tot gevolg het. Eerstens, as u bediener gedetailleerde foutboodskappe aangeskakel het (wat u nie moet!), Sal u so iets sien:

Microsoft OLE DB-verskaffer vir ODBC-bestuurdersfout '80040e37' [Microsoft] [ODBC SQL Server-bestuurder] [SQL Server] Ongeldige voorwerpnaam 'nep'. /directory.asp, lyn 13

Aan die ander kant, as jou webbediener nie gedetailleerde foutboodskappe vertoon nie, kry jy 'n meer algemene fout, soos:

Interne bedienerfout Die bediener het 'n interne fout of foutkonfigurasie ondervind en kon nie jou versoek voltooi nie. Kontak asseblief die bedieneradministrateur om in te lig oor die tyd wat die fout opgetree het en van enigiets wat u moontlik gedoen het wat die fout veroorsaak het. Meer inligting oor hierdie fout is moontlik in die bedienerfoutlogboek beskikbaar.

As u een van die twee foute hierbo kry, is u aansoek kwesbaar vir SQL-inspuiting aanval! Sommige stappe wat u kan neem om u aansoeke teen SQL-inspuitingsaanvalle te beskerm, sluit in: