disable_functions bypass - dl function
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ö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ı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
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.
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.
ZEND_MODULE_API_NO:
bypass.c
içindeki ZEND_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.
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.
Derleme Komutları:
Uzantıyı derlemek için phpize
, ./configure
ve make
kullanır.
Ortaya çıkan bypass.so
, modüller alt dizininde bulunur.
Temizlik:
Derlemeden sonra make clean
ve phpize --clean
komutlarını çalıştırır.
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çin dl_local
fonksiyonunu kullanır ve ardından cmd
sorgu parametresi aracılığıyla geçirilen bir komut ile bypass_exec
çağrısında bulunur.
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.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)