disable_functions bypass - dl function
Önemli not:
dl
PHP uzantılarını yüklemek için kullanılabilen bir PHP fonksiyonudur. Eğer bu fonksiyon devre dışı bırakılmamışsa, disable_functions
bypass etmek ve keyfi komutlar çalıştırmak için kötüye kullanılabilir.
Ancak, bazı katı sınırlamaları vardır:
dl
fonksiyonu mevcut olmalı ve devre dışı bırakılmamalıdırPHP 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
direktifi ile tanımlanan dizinde bulunmalıdır (bunu phpinfo çıktısında görebilirsiniz). Bir saldırganın bu dizinde yazma erişimine sahip olması çok olası değildir, bu nedenle bu gereklilik muhtemelen bu tekniği kötüye kullanmanızı engelleyecektir.
Bu gereklilikleri karşılıyorsanız, disable_functions
bypass etmeyi öğrenmek için yazıyı okumaya devam edin https://antichat.com/threads/70763/. İşte bir özet:
dl fonksiyonu, script çalıştırma sırasında PHP uzantılarını dinamik olarak yüklemek için kullanılır. Genellikle C/C++ ile yazılan PHP uzantıları, PHP'nin işlevselliğini artırır. Saldırgan, dl
fonksiyonunun devre dışı bırakılmadığını fark ettiğinde, sistem komutlarını çalıştırmak için özel bir PHP uzantısı oluşturmayı karar verir.
Saldırganın Aldığı Adımlar:
PHP Sürüm Belirleme:
Saldırgan, bir script kullanarak PHP sürümünü belirler (
<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
PHP Kaynağını Temin Etme:
Resmi PHP web sitesinden veya sürüm eskiyse arşivden PHP kaynağını indirir.
Yerel PHP Kurulumu:
Belirli PHP sürümünü sistemine çıkarır ve kurar.
Uzantı Oluşturma:
PHP uzantıları oluşturmayı inceler ve PHP kaynak kodunu gözden geçirir.
ext/standard/exec.c
dosyasındaki exec fonksiyonunun 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 bilgi şu komutla alınabilir:
PHP_FUNCTION Değişikliği:
Son PHP sürümleri (5, 7, 8) için
PHP_FUNCTION(bypass_exec)
ayarlanması gerekebilir. Sağlanan kod parçası bu değişikliği 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ının derleme ortamını yapılandırmak için
phpize
tarafından kullanılır.
Uzantıyı Derleme:
Derleme Komutları:
Uzantıyı derlemek için
phpize
,./configure
vemake
kullanır.Ortaya çıkan
bypass.so
, modüller alt dizininde bulunur.
Temizlik:
Derlemeden sonra
make clean
vephpize --clean
komutlarını çalıştırır.
Kurban Sunucusuna Yükleme ve Çalıştırma:
Sürüm Uyumluluğu:
Saldırganın ve kurbanın sistemleri arasında PHP API sürümlerinin eşleştiğinden emin olur.
Uzantı Yükleme:
dl
fonksiyonunu kullanarak, kısıtlamaları aşmak için göreceli yollar veya süreci otomatikleştiren bir script kullanır.
Script Çalıştırma:
Saldırgan,
bypass.so
ve bir PHP scriptini kurbanın sunucusuna yükler.Script,
bypass.so
'yu dinamik olarak yüklemek içindl_local
fonksiyonunu kullanır ve ardındancmd
sorgu parametresi aracılığıyla geçirilen bir komut ilebypass_exec
çağrısında bulunur.
Komut Çalıştırma:
Saldırgan artık komutları şu şekilde çalıştırabilir:
http://www.example.com/script.php?cmd=<command>
Bu ayrıntılı inceleme, sistem komutlarını çalıştırmak için bir PHP uzantısı oluşturma ve dağıtma sürecini, dl
fonksiyonunu kötüye kullanarak açıklamaktadır; bu, bu tür güvenlik ihlallerini önlemek için ideal olarak devre dışı bırakılmalıdır.
Last updated