Yüksek Risk
WordPress Plugin LayerSlider'da Kritik Güvenlik Açığı
CVE-2024-2879
SQL injection Nedir?
SQL Enjeksiyonu (SQL Injection), web uygulamalarında kullanılan SQL sorgularının kullanıcı girdisiyle manipüle edilmesi sonucu ortaya çıkan bir güvenlik açığıdır. Bu tür zafiyetler, geliştiricilerin kullanıcı girişlerini yeterince doğrulamaması veya temizlememesi nedeniyle oluşur. Kötü niyetli kullanıcılar, uygulamanın veritabanına kendi komutlarını ekleyerek yetkisiz veri erişimi, veri manipülasyonu veya sistemdeki başka güvenlik açıklarının sömürülmesini gerçekleştirebilirler.
Örnek: Basit SQL injection
Klasik bir SQL injection örneği, kullanıcı adı ve şifre doğrulaması sırasında meydana gelebilir. Bir uygulamanın şu şekilde bir SQL sorgusu oluşturduğunu düşünelim:
SELECT * FROM users WHERE username = 'user_input' AND password = 'password_input';
SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'password_input';
Bu sorgu, 1=1
ifadesinin her zaman doğru olması nedeniyle tüm kullanıcı verilerini döndürebilir ve saldırganın sisteme giriş yapmasına olanak tanır.
SQL injection Türleri
SQL injection farklı yöntemlerle gerçekleştirilebilir:
Hata Tabanlı SQL injection (Error-Based): Veritabanından gelen hata mesajları kullanılarak veri sızdırılır.
Kör SQL injection (Blind SQL Injection): Veritabanından doğrudan bir çıktı alınamaz, ancak sunucunun davranışı (örneğin yanıt süresi) temel alınarak bilgi elde edilir.
Zaman Tabanlı SQL injection (Time-Based SQL Injection): Veritabanı yanıt süreleri manipüle edilerek veri sızdırılır.
Zaman Tabanlı SQL injection (Time-Based SQL Injection)
Zaman tabanlı SQL injection, kör SQL injection türlerinden biridir ve çıktının doğrudan gözlemlenemediği durumlarda kullanılır. Bu yöntemde, saldırgan doğru veya yanlış bir koşulu değerlendirmek için veritabanı işlemlerinde gecikme yaratır ve sunucunun yanıt sürelerine göre sistemden bilgi elde eder.
Nasıl Çalışır?
Bu saldırı, genellikle aşağıdaki gibi bir teknikle gerçekleştirilir:
SQL sorgusuna bir zaman gecikmesi fonksiyonu (ör.
SLEEP()
veyaWAITFOR DELAY
) eklenir.Koşullu bir ifade kullanılarak veritabanından veri sızdırılır.
Sunucunun yanıt süresi ölçülerek sorgunun doğru ya da yanlış olduğu anlaşılır.
Örnek: Zaman Tabanlı SQL injection
Bir web uygulamasında şu tür bir SQL sorgusu olduğunu varsayalım:
SELECT * FROM users WHERE username = 'user_input';
Saldırgan, user_input
olarak şu girdiyi sağlar:
' OR IF(SUBSTRING((SELECT database()),1,1)='m', SLEEP(5), 0) --
Bu şekilde bir sorguya dönüşür:
SELECT * FROM users WHERE username = '' OR IF(SUBSTRING((SELECT database()),1,1)='m', SLEEP(5), 0) -- ;
Eğer veritabanı adı 'm'
ile başlıyorsa, sunucu 5 saniye boyunca bekleyecektir.
Bekleme süresine göre sorgunun doğruluğu anlaşılabilir ve bu şekilde veri sızdırılabilir.
CVE-2024-2879 – WordPress Plugin LayerSlider'da Kritik Güvenlik Açığı
WordPress için LayerSlider eklentisinin 7.9.11 ve 7.10.0 sürümleri, ls_get_popup_markup
eylemi aracılığıyla SQL injection’a karşı savunmasızdır. Bu durum, kullanıcı tarafından sağlanan parametrelerde yetersiz kaçış işlemi yapılması ve mevcut SQL sorgularının yeterince hazırlanmış olmaması nedeniyle ortaya çıkmaktadır. Söz konusu güvenlik açığı, kimliği doğrulanmamış saldırganlar tarafından veritabanından hassas bilgilerin çıkarılması amacıyla mevcut sorgulara ek SQL ifadelerinin eklenmesine olanak tanımaktadır.
WordPress Eklentiler ekranından eklenti ve sürümü aşağıda gösterildiği gibi gösterilir:

Fonksiyonun ls_get_popup_markup
değeri bir dize olarak alındığında, id parametresindeki temizleme eksikliği nedeniyle kötü amaçlı yüklerin herhangi bir filtreleme uygulanmaksızın gönderilmesine olanak tanınmaktadır. Bu durum aşağıda gösterilmektedir.
assets/wp/actions.php
:


Sonuç olarak, özel olarak hazırlanmış bir istek, argümanın belirli bir değer alması ve parametrenin zaman tabanlı olması durumunda, /wp-admin/admin-ajax.php
üzerinde zaman tabanlı SQL injection’a yol açabilir.
id[where]=(SELECT 0 FROM (SELECT SLEEP(5))qualysWAS)
request:

response:


SELECT SQL_CALC_FOUND_ROWS {$args['columns']} FROM $table (SELECT 0 FROM (SELECT SLEEP(5))qualysWAS) ORDER BY {$args['orderby']} {$args['order']}, name ASC LIMIT {$args['limit']}
Yukarıda, ana bilgisayar adı, geçerli veritabanı ve geçerli veritabanı kullanıcısı elde edilmiştir.
Aşağıda, saldırı sırasında bir Apache sunucusundan alınmış bir access.log
kesiti sunulmaktadır.

Author : Halil İbrahim İLHAN
Benzer CVE Analizleri
Geliştirdiğimiz siber güvenlik çözümlerinin işletmeler üzerindeki etkisini gerçek projeler üzerinden görün. Her vaka çalışması, müşterilerimizin ihtiyaçlarına özel yaklaşımlarımızı ve tehditlere karşı sunduğumuz kapsamlı çözümleri detaylandırıyor. Güvenlik stratejilerimizin başarısını ve değerini keşfedin.
15+ Yıl
Tecrübe
10+
Siber Güvenlik Uzmanı
100%
Başarı Oranı
400+
Başarılı İşlem
Aklınızdaki soruları yanıtlayalım
Aşağıda sıkça sorulan sorulara verdiğimiz yanıtları bulabilirsiniz.