CVE-2025-69457 – Responsive Tourism Website 3.1 - Remote Code Execution (Unauthenticated) | Tağmaç - root@Tagoletta:~#
Contents

CVE-2025-69457 – Responsive Tourism Website 3.1 - Remote Code Execution (Unauthenticated)

Wed Jan 21 2026 · 3 min read

Category: Security Research

# CVE# Exploit

Giriş

Exploit Kodunu Görüntüle

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:

  1. Uzantı Kontrolü Yok: Kod, dosya adını ($_FILES['img']['name']) doğrudan kullanıcıdan alır. Uzantının .jpg, .png veya .php olup olmadığını kontrol etmez.
  2. İçerik Kontrolü Yok: Dosyanın MIME türünü veya gerçek içeriğini doğrulamaz.
  3. 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:

  1. Oturum Kurulumu: İstekler arasında çerezleri korumak için requests.Session() kullandım.

  2. Giriş Atlatma: classes/Login.php?f=login adresine SQL enjeksiyon yükü ile bir POST isteği gönderdim.

  3. Bilgi Toplama: Shell'i yüklemeden önce, admin/?page=user sayfasından mevcut kullanıcının bilgilerini (ID, Ad, Soyad, Kullanıcı Adı) çektim (scrape ettim). Bu çok önemliydi çünkü save_users fonksiyonu 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.

  4. Shell Yükleme: classes/Users.php?f=save adresine bir multipart/form-data POST isteği oluşturdum.

    • Çektiğim kullanıcı verilerini ekledim.
    • img dosya alanını ekledim.
    • Dosya Adı: .php ile 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; } ?>
  5. Ç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=whoami eklenmiş 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.