THT DUYURU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

chat
Seçenekler

WP Super Cache Object Injection

JohnDoe - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
09/2013
Nereden:
Teşkilat
Yaş:
34
Mesajlar:
2.717
Konular:
572
Teşekkür (Etti):
805
Teşekkür (Aldı):
929
Ticaret:
(0) %
17-09-2015 14:06
#1
WP Super Cache Object Injection


Bulunan zaafiyetimiz Wordpress sistemine ait Super Cache eklentisinin 1.4.4 sürümüne aitdir.
Öncelikle eklenti ile ilgili bilgileri verdikden sonra zaafiyetimiz hakkında kısa bir bilgi sunalım ve açıklığa neden olan kodları belirtelim.

Eklenti Sahibi: Donncha O Caoimh, automattic.com
Eklenti Sürümü: 1.4.4
Son Güncellenme Tarihi: 15 Mayıs 2015
Kullanıcı Sayısı: 1,000,000 +

Zaafiyetimizin ismi başlıkda da belirttiğim üzere PHP Object Injection olarak geçiyor. Tabi ki yabancı döküman ve videolara bu başlık hakkında ulaşabilirsiniz. Türkçesi olarakda PHP Nesne İnj. diyebiliriz.

Biraz daha detaya inecek olursak PHP ile detaylı ilgilenenlerin de bildiği gibi Dependency Injection olarak isimlendirebiliriz.

Tek bir kelime ile açıklığı özetleyebilirsek "Nesnelerin bir framework aracılığıyla diğer nesnelere enjekte edilmesidir" en doğru özeti olacaktır Detaylı zaafiyet anlatımına ve fix sürecine ileri ki konularımda değinmeyi düşünüyorum.

Zaafiyetimize neden olan 2 tane dosya yer almakta.
Bunlar advanced-cache.php ve wp-cache-phase1.php sistem dosyalarıdır.
advanced-cache.php içerisinde yer alan satırlar ise;

Kod:
17: $blog_cache_dir = str_replace(’//’, ’/’, $cache_path . "blogs/" . $blogcacheid . ’/’); // wp-cache-phase1.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if($blogcacheid != ’’),

19: $blog_cache_dir = $cache_path; // wp-cache-phase1.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if($blogcacheid != ’’) else ,

23: $base = ’’; // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(isset($base) == false),
24: $request_uri = preg_replace(’/[ <>\\’\\"\\r\\n\\t\\(\\)]/’, ’’, str_replace(’..’, ’’, $_SERVER[’REQUEST_URI’])); // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else ,

29: $blogcacheid = str_replace($base, ’’, $request_uri); // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if($base == ’/’) else ,

31: $blogcacheid = substr($blogcacheid, 0, strpos($blogcacheid, ’/’, 1)); // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if($base == ’/’) else , if($blogcacheid != ’’),

34: $blogcacheid = substr($blogcacheid, 0, - 1); // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if(’/’ == substr($blogcacheid, - 1)),

36: $blogcacheid = str_replace(’/’, ’’, $blogcacheid); // wp-cache-base.phpelseif(!include_once(WPCACHEHOME . ’wp-cache-phase1.php’)), if(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else ,

673: global $blog_cache_dir; // wp-cache-phase2.php

678: $handle = opendir($blog_cache_dir))) // wp-cache-phase2.php, trace stopped
679: $file = readdir($handle))) // wp-cache-phase2.php

681: unserialize $**** = unserialize(file_get_contents($blog_cache_dir . ’****/’ . $file)); // wp-cache-phase2.php

wp-cache-phase1.php içerisinde yer alan satırlar ise;

23: $base = ’’; // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(isset($base) == false),
24: $request_uri = preg_replace(’/[ <>\\’\\"\\r\\n\\t\\(\\)]/’, ’’, str_replace(’..’, ’’, $_SERVER[’REQUEST_URI’])); // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else ,

29: $blogcacheid = str_replace($base, ’’, $request_uri); // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if($base == ’/’) else ,

31: $blogcacheid = substr($blogcacheid, 0, strpos($blogcacheid, ’/’, 1)); // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if($base == ’/’) else , if($blogcacheid != ’’),

34: $blogcacheid = substr($blogcacheid, 0, - 1); // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else , if(strpos($request_uri, ’/’, 1)), if(’/’ == substr($blogcacheid, - 1)),

36: $blogcacheid = str_replace(’/’, ’’, $blogcacheid); // wp-cache-base.phpif(defined(’VHOST’) || (defined(’WP_ALLOW_MULTISITE’) && constant(’WP_ALLOW_MULTISITE’) == true)), if(defined(’SUBDOMAIN_INSTALL’) && constant(’SUBDOMAIN_INSTALL’) == true) else ,

110: $wp_cache_key = get_wp_cache_key (); // by wp_super_cache_init()
111: $key = $blogcacheid . md5($wp_cache_key); // by wp_super_cache_init()

115: $****_file = $file_prefix . $key . ’.****’; // by wp_super_cache_init()

117: $****_pathname = realpath($blog_cache_dir . ’****/’ . $****_file); // by wp_super_cache_init()

158: unserialize $**** = unserialize(file_get_contents($****_pathname))))
Şeklinde kodları özetleyebilirim. Özet halimi bu kadar diyenler olabilir ama zaafiyet hakkında kısa bir araştırma yapmanız doğrultusunda tüm dosyanın tek tek düzeltilmesi ve dikkat edilmesi gerektiğini anlayacağınızı umuyorum.
--------------------- " TürkHackTeam "Vatan Operasyonu" 4093 Site Hacked [Şehitler Ölmez Vatan Bölünmez ! "
Türkiye'nin tek milli ve yerli #Hack grubu TürkHackTeam'dır. İçiniz rahat olsun biz buradayız.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler