CVE-2025-69458 – Movie Rating System 1.0 - SQL Injection to RCE (Unauthenticated)
Wed Jan 21 2026 · 2 min read
Category: Security Research
Giriş
Bu raporda, "Movie Rating System 1.0" uygulamasında tespit edilen kritik bir SQL Enjeksiyonu (SQL Injection) zafiyetini ve bu zafiyetin Uzaktan Kod Yürütme (RCE) saldırısına nasıl dönüştürülebileceğini inceleyeceğiz. Bu saldırı, kimliği doğrulanmamış bir saldırganın sunucu üzerinde tam kontrol sağlamasına olanak tanır.
Zafiyet Analizi
SQL Enjeksiyonu Noktası
Uygulamanın film detaylarını gösteren movie_details.php dosyasını incelediğimizde, id parametresinin yeterli güvenlik önlemleri alınmadan doğrudan SQL sorgusuna dahil edildiğini görüyoruz.
// movie_details.php içindeki Zafiyetli Kod
if(isset($_GET['id'])){
$qry = $conn->query("SELECT * FROM `movie_list` where id = '{$_GET['id']}'");
// ...
}

Yukarıdaki kodda, $_GET['id'] değişkeni herhangi bir temizleme işleminden geçirilmeden veya hazırlanmış ifadeler (prepared statements) kullanılmadan sorguya eklenmektedir. Bu durum, saldırganın SQL sorgusunu manipüle etmesine ve veritabanı üzerinde yetkisiz işlemler yapmasına olanak tanır.
Exploit Geliştirme
Bu zafiyeti bir RCE saldırısına dönüştürmek için geliştirdiğim exploit (exploit.py) şu adımları izlemektedir:
-
Hedef ve Sayfa Tespiti: Exploit, hedef URL'yi alır ve "Movies" sayfasını bularak geçerli bir film detay sayfasına (
movie_details.php?id=...) ulaşır. -
Yol İfşası (Path Disclosure):
Saldırgan,idparametresine tek tırnak (') karakteri ekleyerek bir SQL sözdizimi hatası oluşturur. Eğer sunucuda hata mesajları açıksa (display_errors = On), PHP bir uyarı mesajı döndürür ve bu mesaj dosyanın sunucu üzerindeki tam fiziksel yolunu (örn.C:\xampp\htdocs\movie\movie_details.php) içerir. Exploit, bu hatayı ayrıştırarak web kök dizinini (C:/xampp/htdocs/movie/) elde eder. -
SQL'den RCE'ye (INTO OUTFILE):
Dosya yolunu elde ettikten sonra, MySQL'inINTO OUTFILEözelliği kullanılarak sunucuya kötü amaçlı bir PHP dosyası yazılır.Kullanılan Payload Mantığı:
-1881' OR 1881=1881 LIMIT 0,1 INTO OUTFILE 'C:/xampp/htdocs/movie/shell.php' LINES TERMINATED BY 0x3c3f70687020... -- -Burada
LINES TERMINATED BYifadesi kritik öneme sahiptir. Normalde sorgu sonucu dosyaya yazılırken, satır sonlarına saldırganın belirlediği hex kodlanmış PHP shell kodu (<?php ... system($cmd); ... ?>) eklenir. Böylece oluşturulan dosya, sunucu tarafından çalıştırılabilir bir PHP dosyası haline gelir.Not: Bu saldırının başarılı olabilmesi için veritabanı kullanıcısının
FILEyetkisine sahip olması vesecure_file_privayarının dosya yazmaya izin vermesi gerekmektedir. -
Kod Yürütme:
Dosya başarıyla oluşturulduktan sonra, exploitshell.phpdosyasına bir HTTP isteği gönderir vewhoamikomutunu çalıştırarak sistem üzerindeki yetkisini doğrular.
Çözüm ve Kapatma
Bu kritik zafiyeti gidermek için aşağıdaki adımlar uygulanmalıdır:
1. Prepared Statements Kullanımı:
SQL sorgularında kullanıcı girdilerini doğrudan birleştirmek yerine, mutlaka Hazırlanmış İfadeler (Prepared Statements) kullanılmalıdır.
Güvenli Kod Örneği:
$stmt = $conn->prepare("SELECT * FROM `movie_list` where id = ?");
$stmt->bind_param("s", $_GET['id']);
$stmt->execute();
$qry = $stmt->get_result();
2. Hata Mesajlarını Gizleme:
Canlı ortamda (production) PHP hata mesajlarının kullanıcıya gösterilmesi engellenmelidir. php.ini dosyasında display_errors = Off olarak ayarlanmalıdır.
3. Veritabanı Yetkilerini Kısıtlama:
Web uygulamasının kullandığı veritabanı kullanıcısına FILE gibi yüksek yetkiler verilmemelidir. Sadece gerekli olan SELECT, INSERT, UPDATE, DELETE yetkileri tanımlanmalıdır.
4. secure_file_priv Ayarı:
MySQL yapılandırmasında secure_file_priv ayarı, web kök dizini dışında güvenli bir dizine yönlendirilmeli veya NULL olarak ayarlanarak dosya işlemleri kısıtlanmalıdır.
CVE ID: CVE-2025-69458
İlk Yayın Tarihi: 22 Aralık 2021
Araştırmacı: Tağmaç "Tagoletta"
Canonical reference: https://www.exploit-db.com/exploits/50622
Github Repository: https://github.com/Tagoletta/CVE-2025-69458
Sıkça Sorulan Sorular
CVE-2025-69458 nedir?
Movie Rating System 1.0 üzerinde, kimlik doğrulaması gerektirmeden SQL Enjeksiyonundan Uzaktan Kod Yürütmeye (RCE) zincirlenen, Tağmaç 'Tagoletta' tarafından keşfedilmiş bir zero-day zafiyetidir.
SQL enjeksiyonu nasıl RCE'ye yükseltilir?
Enjeksiyon noktası, saldırgan kontrolündeki içeriği web köküne yazmaya olanak tanır (örneğin SELECT ... INTO OUTFILE ile); bir PHP webshell bırakılır ve tam komut çalıştırma için çalıştırılır.
Sömürmek için kimlik doğrulama gerekir mi?
Hayır. Zafiyet kimlik doğrulaması öncesinde erişilebilir olduğundan, uygulamaya ulaşabilen herhangi bir uzak saldırgan sömürebilir.
CVE-2025-69458 nasıl giderilir?
Parametreli sorgular/prepared statement kullanın, veritabanının FILE ayrıcalığını kaldırın, uygulamayı bir WAF arkasına alın, web kökü yazma izinlerini kısıtlayın ve üretici yamalı bir sürüm yayınlarsa yükseltin.
CVE-2025-69458 için PoC exploit writeup'ı nerede?
Tam proof-of-concept exploit kodu ve adım adım writeup bu sitede yayınlanmıştır — SQL enjeksiyonundan RCE'ye zinciri otomatikleştiren, çalışmaya hazır PoC için eşlik eden exploit sayfasına bakın.