SQL Injection Vulnerabilities üçün Test

SQL Injection hücumları, dinamik məzmun yaratmaq üçün bir verilənlər bazası ardıcıllığından asılı olan web applications üçün böyük risklər yaradır. Bu cür hücumda, hackerlar, öz SQL əmrlərini veritabanı tərəfindən verilmiş olanlara yerləşdirmək cəhdi ilə bir web tətbiqini işlədirlər. Məsələn, verilənlər bazasında SQL Injection Attacks məqaləsinə baxın. Bu yazıda, SQL Injection hücumlarına qarşı həssas olub olmadığını müəyyən etmək üçün web tətbiqlərinizi test edə biləcəyiniz bir neçə yola nəzər salırıq.

Avtomatlaşdırılmış SQL Injection Scanning

Bir ehtimal, HP'nin WebInspect, IBM AppScan və ya Cenzic nin Cilvesi kimi avtomatlaşdırılmış bir web proqramı açığı tarayıcısını istifadə edir. Bu alətlər bütün potensial SQL Injection vulnerabilities üçün web applications analiz etmək üçün asan, avtomatlaşdırılmış yolları təklif edir. Lakin, onlar olduqca bahalı, oturacaq başına $ 25,000 qədər çalışır.

Manual SQL Injection Testləri

Zəif bir tətbiq geliştiricisi nədir? Əslində, SQL Injection zəiflikləri üçün veb-proqramlarınızı bir web browserdan daha çox istifadə edərək qiymətləndirmək üçün bəzi əsas testləri həyata keçirə bilərsiniz. Birincisi, diqqətli bir söz: mən təsvir etdiyim testlər əsas SQL Injection qüsurlarını axtarmaq. Onlar qabaqcıl üsulları aşkar etməyəcək və istifadə etmək üçün bir qədər yorucu olurlar. Ödəyə bilərsəniz, avtomatlaşdırılmış bir skanerlə gedin. Lakin, bu qiymət etiketini idarə edə bilməsəniz, əl testi böyük bir ilk addımdır.

Bir tətbiqin həssas olub olmadığını qiymətləndirmək üçün ən asan yol, müvəffəqiyyətli olduqda veritabanınıza zərər verməyəcək, ancaq bir problemi düzəltmək lazım olduğuna dair bir dəlil təmin edəcək zərərsiz enjeksiyon hücumlarını sınaqdan keçirməkdir. Məsələn, fərdi bir verilənlər bazasında görünən və nəticədə əlaqə məlumatı verən sadə bir web proqramı olduğunuzu güman et. Bu səhifə aşağıdakı URL formatından istifadə edə bilər:

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

Aşağıdakılara bənzər bir sorgu istifadə edərək , bu səhifənin bir verilənlər bazası axtarışını yerinə yetirdiyini fərz edə bilərik:

Telefondan SEÇİLİĞİNİ seçin WHERE lastname = 'şapel' və firstname = 'mike'

Gəlin bir az sınaqdan keçirək. Yukarıdaki varsayımımızla, SQL injection hücumları üçün test eden URL'ye basit bir değişiklik yapabiliriz:

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

Veb tətbiqi SQL injection sisteminə qarşı düzgün şəkildə müdafiə edilməmişsə, bu saxta ilk adı veritabanına qarşı yerinə yetirən SQL bəyanatına daxil edir:

Telefonun siyahısından SEÇİLƏRİN WHERE lastname = 'şaquli' və firstname = 'mike' AND (saxta sayını seçin (*))> 0 OR '1' = '1'

Yukarıdaki sözdiziminin orijinal URL'den biraz farklı olduğunu fark edeceksiniz. URL kodlu dəyişənlərin nümunəyə daha asan əməl etmək üçün onların ASCII ekvivalentləri üçün konvertasiya azadlığını aldım. Məsələn,% 3d, '=' xarakteri üçün URL kodlamasıdır. Mən də oxşar məqsədlər üçün bəzi xətt fasilələri əlavə etmişəm.

Nəticələri qiymətləndiririk

Test web səhifəni yuxarıda göstərilən URL ilə yükləməyə çalışdığınız zaman gəlir. Veb proqramı yaxşı davranarsa, sorğunun veritabanına keçməzdən əvvəl girişdən tək quotes çıxaracaq. Bu, sadəcə, bir dəstə SQL-i ehtiva edən bir ad üçün bir qəribə axtarışa səbəb olacaq! Ərizə aşağıdakılardan birinə bənzər bir səhv mesajı görürsünüz:

Hata: Mike + VƏ + (saxta + saymaq (*) +) +% 3e0 + VEYA + 1% 3d1 Chapple adı ilə heç bir istifadəçi tapılmadı!

Digər tərəfdən, əgər ərizə SQL injection üçün zəifdirsə, bəyanatı birbaşa məlumat bazasına keçirəcək və nəticədə iki imkandan birinə çevrilir. Birincisi, serverinizdə ətraflı səhv mesajları aktiv olduqda (bunu etməməlisiniz!) Belə bir şey görürsünüz:

ODBC Sürücüleri üçün Microsoft OLE DB Provider səhv '80040e37' [Microsoft] [ODBC SQL Server Sürücüsü] [SQL Server] Yanlış obyekt adı 'saxta'. / datalogiya.asp, xətt 13

Digər tərəfdən, əgər web server ətraflı səhv mesajlar göstərmirsə, daha ümumi bir səhv alırsınız, məsələn:

Daxili Server Xətası Server daxili bir səhv və ya səhv konfiqurasiya ilə qarşılaşdı və sorğunuzu tamamlaya bilmədi. Xəttin baş verdiyi vaxt və səhvə səbəb ola biləcəyi bir şey barədə məlumatlandırmaq üçün server administratoruna müraciət edin. Bu səhv haqqında daha çox məlumat server səhv günlüğünde mövcud ola bilər.

Yuxarıdakı iki səhvdən birini alırsınızsa, ərizə SQL injection hücumuna həssasdır! SQL Injection hücumlarına qarşı tətbiqlərinizi qorumaq üçün edə biləcəyiniz bəzi addımlar bunlardır: