20 Eylül 2016 Salı

Web Uygulaması Güvenliği - SQL İnjection


Dün, SQL injection açığı barındıran bir kullanıcı giriş formuna SQL komutları girerek yönetici olarak oturum açmıştık. Bugün SQL injection açığını daha detaylı inceleyeceğiz.

SQL Injection, web uygulaması üzerinde kullanıcı kullanımı için oluşturulan parametrelere girilen komutların veri tabanı tarafından çalıştırılması ile gerçekleşir. Saldırganlar SQL Injection açığını istismar ederek web sayfasını kapatabilir, veri tabanındaki bilgileri indirebilir ve uygulamanın sunulduğu sunucuyu ele geçirebilirler. Bu nedenle SQL Injection çoğu web uygulaması zafiyetleri arasında en kritik açıklardan biri olarak kabul edilir. 

Aşağıdaki uygulama, belirtilen ID’nin kullanıcı bilgilerini görüntülemektedir. Yanlış yapılandırılmış web uygulamasında bulunan ‘id’ parametresine aşağıdaki SQL Injection komutu gönderilmiştir:

'AND (SELECT 1514 FROM(SELECT COUNT(*),CONCAT(0x7176707071,(SELECT (ELT(1514=1514,1))),0x717a627671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)-- UYNQ&Submit=Submit

Web sayfası komutu veri tabanına göndermiş, cevabını ise ekrana yansıtmıştır. Gönderilen komut bir MySQL komutu olduğundan veri tabanının MySQL olduğu kesinleşmiştir. Saldırganlar enjeksiyon bulana kadar, birbirinden farklı veri tabanı komutları deneyeceklerdir. Benzer sorgular veri tabanı kullanıcı adı ve parolalarını görüntülemek veya sunucu üzerinde komut çalıştırmak gibi birçok farklı amaç için kullanılabilir.

Aşağıda aynı SQL Injection açığı kullanılarak, veri tabanı kullanıcıları listelenmiştir.


Saldırının gerçekleştirildiği web uygulamasının kaynak kodu:

Doğru yapılandırılmış web uygulaması:

Kullanıcıya sunulan parametre, sayı dışında girdi kabul etmemektedir. Böylelikle SQL injection saldırılarına karşı güvenli hale gelmiştir. Üzerinden farklı bir işlem yapılan bir uygulamanın güvenlik önlemleri daha farklı olacaktır. 

Blind SQL Injection

Blind SQL Injection, istismar edildiği takdirde arkada çalışan veri tabanına komut gönderilir fakat veri tabanının verdiği cevap saldırgana geri dönmez. Bu nedenle blind SQL Injection genellikle otomatize araçlar ile istismar edilir.

Görüntüde blind SQL Injection barındıran bir web uygulamasına, otomatize araç kullanarak saldırı gerçekleştirilmiştir. Saldırının sonucunda enjeksiyon tipi tespit edilmiştir.


SQL injection açığının neden kaynaklandığını ve manual olarak nasıl istismar edildiğini gördük. Yukarıdaki görüntüdeki gibi otomatize araçlar kullanmak saldırıyı çok daha hızlı kılacaktır.

Bir sonraki bölüm File Upload
on 20 Eylül by Berk Cem Göksel |   Edit