disable_functions bypass - dl function
Önemli not:
dl
PHP uzantılarını yüklemek için kullanılan bir PHP işlevdir. İşlev devre dışı bırakılmamışsa, disable_functions
'ı atlamak ve keyfi komutlar çalıştırmak için kötüye kullanılabilir.
Ancak, bazı katı sınırlamaları vardır:
dl
işlevi çevrede mevcut ve devre dışı bırakılmamış olmalıdır.PHP uzantısı, sunucunun kullandığı aynı ana sürümle (PHP API sürümü) derlenmiş olmalıdır (bu bilgiyi phpinfo çıktısında görebilirsiniz).
PHP uzantısı,
extension_dir
yönergesi tarafından tanımlanan dizinde bulunmalıdır (bu bilgiyi phpinfo çıktısında görebilirsiniz). Sunucuyu kötüye kullanmaya çalışan bir saldırganın bu dizine yazma erişimi olması çok olası olmadığından, bu gereklilik muhtemelen bu teknikten yararlanmanızı engelleyecektir.
Bu gereksinimleri karşılıyorsanız, disable_functions'ı atlamayı öğrenmek için https://antichat.com/threads/70763/ bağlantısındaki gönderiyi okumaya devam edin. İşte bir özet:
dl işlevi, betik yürütme sırasında PHP uzantılarını dinamik olarak yüklemek için kullanılır. C/C++ ile genellikle yazılan PHP uzantıları, PHP'nin işlevselliğini geliştirir. Saldırgan, dl
işlevinin devre dışı bırakılmadığını fark ettikten sonra, sistem komutlarını çalıştırmak için özel bir PHP uzantısı oluşturmaya karar verir.
Saldırgan Tarafından İzlenen Adımlar:
PHP Sürümünün Belirlenmesi:
Saldırgan, bir betik (
<?php echo 'PHP Sürümü: '.PHP_VERSION; ?>
) kullanarak PHP sürümünü belirler.
PHP Kaynak Kodunun Edinilmesi:
PHP kaynak kodunu resmi PHP web sitesinden veya arşivden (eğer sürüm eskiyse) indirir.
Yerel PHP Kurulumu:
Belirli PHP sürümünü kendi sistemine çıkarır ve kurar.
Uzantı Oluşturma:
PHP uzantıları oluşturma konusunu inceler ve PHP kaynak kodunu inceler.
ext/standard/exec.c
konumunda bulunan exec işlevinin işlevselliğini çoğaltmaya odaklanır.
Özel Uzantıyı Derleme Notları:
ZEND_MODULE_API_NO:
bypass.c
içindekiZEND_MODULE_API_NO
, mevcut Zend Extension Build ile eşleşmelidir. Bu bilgiyi aşağıdaki komutla alabilirsiniz:
PHP_FUNCTION Düzenlemesi:
Son PHP sürümleri (5, 7, 8) için
PHP_FUNCTION(bypass_exec)
düzenlemesi gerekebilir. Sağlanan kod parçacığı bu düzenlemeyi detaylandırır.
Özel Uzantı Dosyaları:
bypass.c:
Özel uzantının temel işlevselliğini uygular.
php_bypass.h:
Uzantı özelliklerini tanımlayan başlık dosyası.
config.m4:
Özel uzantı için yapılandırmayı
phpize
kullanarak yapılandırmak için kullanılır.
Uzantının Derlenmesi:
Derleme Komutları:
Uzantının derlenmesi için
phpize
,./configure
vemake
kullanılır.Sonuç olarak oluşan
bypass.so
dosyası, modüller alt dizininde bulunur.
Temizlik:
Derleme işleminden sonra
make clean
vephpize --clean
çalıştırılır.
Kurban Sunucuda Yüklenmesi ve Yürütülmesi:
Sürüm Uyumluluğu:
Saldırganın ve kurbanın sistemlerinde PHP API sürümlerinin eşleştiğinden emin olunur.
Uzantı Yüklenmesi:
İlgili kısıtlamaları atlamak için
dl
işlevi kullanılır ve göreceli yollar veya süreci otomatikleştiren bir betik kullanılır.
Betik Yürütme:
Saldırgan,
bypass.so
ve bir PHP betiğini kurban sunucusuna yükler.Betik,
dl_local
işlevini kullanarakbypass.so
'yi dinamik olarak yükler ve ardındancmd
sorgu parametresi aracılığıyla iletilen bir komutlabypass_exec
işlevini çağırır.
Komut Yürütme:
Saldırgan artık komutları şu şekilde çalıştırabilir:
http://www.example.com/script.php?cmd=<komut>
Bu ayrıntılı adım adım rehber, dl
işlevini kötüye kullanarak sistem komutlarını çalıştırmak için özel bir PHP uzantısı oluşturma ve dağıtma sürecini açıklar. Bu, böyle bir güvenlik açığını önlemek için ideal olarak devre dışı bırakılması gereken dl
işlevini istismar etmektedir.
Last updated