PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Bu temel olarak https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/ adresindeki bir özetidir.
Giriş
new $_GET["a"]($_GET["b"])
gibi yeni keyfi nesnelerin oluşturulması, Uzaktan Kod Yürütme (RCE) ile sonuçlanabilir. Bu, bir yazıda detaylı olarak açıklanmıştır. Bu belge, RCE elde etmek için çeşitli stratejileri vurgular.
Özel Sınıflar veya Otomatik Yükleme ile RCE
new $a($b)
sözdizimi, bir nesnenin oluşturulması için kullanılır, burada $a
sınıf adını temsil eder ve $b
yapıcıya iletilen ilk argümandır. Bu değişkenler, GET/POST gibi kullanıcı girişlerinden veya JSON'dan alınabilir, burada dize veya dizi olabilirler veya diğer türler olarak sunulabilirler.
Aşağıdaki kod örneğini düşünün:
Bu durumda, $a
'yı App
veya App2
olarak ayarlamak ve $b
'yi bir sistem komutu (örneğin, uname -a
) olarak ayarlamak, o komutun çalıştırılmasına neden olur.
Otomatik yükleme işlevleri, doğrudan erişilebilen sınıflar yoksa istismar edilebilir. Bu işlevler, ihtiyaç duyulduğunda sınıfları dosyalardan otomatik olarak yükler ve spl_autoload_register
veya __autoload
kullanılarak tanımlanır:
Autoloading davranışı, PHP sürümlerine göre değişir ve farklı RCE olanakları sunar.
Yerleşik Sınıflar Aracılığıyla RCE
Özel sınıflar veya otomatik yükleyiciler olmadığında, yerleşik PHP sınıfları RCE için yeterli olabilir. Bu sınıfların sayısı, PHP sürümüne ve uzantılara bağlı olarak 100 ila 200 arasında değişir. Bunlar get_declared_classes()
kullanılarak listelenebilir.
İlgili yapıcılar, aşağıdaki örnekte ve https://3v4l.org/2JEGF bağlantısında gösterildiği gibi yansıtma API'si aracılığıyla belirlenebilir.
Belirli yöntemler aracılığıyla RCE şunları içerir:
SSRF + Phar Deserialization
SplFileObject
sınıfı, yapıcısı aracılığıyla SSRF'yi etkinleştirir ve herhangi bir URL'ye bağlantı yapılmasına izin verir:
SSRF, PHP'nin 8.0 öncesi sürümlerinde Phar protokolünü kullanarak deserializasyon saldırılarına yol açabilir.
PDO'ları Sömürmek
PDO sınıfının yapıcı fonksiyonu, DSN dizeleri aracılığıyla veritabanlarına bağlantı sağlar ve potansiyel olarak dosya oluşturma veya diğer etkileşimleri mümkün kılar:
SoapClient/SimpleXMLElement XXE
PHP'nin 5.3.22 ve 5.4.12 sürümlerine kadar olan versiyonları, SoapClient
ve SimpleXMLElement
yapılandırıcıları aracılığıyla XXE saldırılarına açıktı, ancak libxml2 sürümüne bağlı olarak değişiyordu.
Imagick Uzantısı Aracılığıyla RCE
Bir projenin bağımlılıklarının analizi sırasında, Imagick'in yeni nesnelerin oluşturulmasıyla komut yürütme için kullanılabileceği keşfedildi. Bu, zafiyetlerin sömürülmesi için bir fırsat sunar.
VID ayrıştırıcısı
VID ayrıştırıcısının, dosya sisteminde belirtilen herhangi bir yola içerik yazabilme yeteneği belirlendi. Bu, bir PHP kabuğunun web erişimine açık bir dizine yerleştirilmesine ve Uzaktan Kod Yürütme (RCE) elde edilmesine yol açabilir.
VID Ayrıştırıcısı + Dosya Yükleme
PHP'nin geçici olarak yüklenen dosyaları /tmp/phpXXXXXX
dizininde depoladığı belirtilmektedir. Imagick'teki VID ayrıştırıcısı, msl protokolünü kullanarak dosya yollarında joker karakterlerini işleyebilir ve geçici dosyanın istenen konuma transferini kolaylaştırır. Bu yöntem, dosya sistemi içinde keyfi dosya yazma işlemini gerçekleştirmek için ek bir yaklaşım sunar.
PHP Çökertme + Kaba Kuvvet
Orijinal yazıda açıklanan bir yöntem, silinmeden önce sunucuyu çökerten dosyaların yüklenmesini içerir. Geçici dosyanın adını kaba kuvvetle tahmin ederek, Imagick'in keyfi PHP kodunu yürütmesi mümkün hale gelir. Ancak, bu teknik yalnızca eski bir ImageMagick sürümünde etkili bulundu.
Referanslar
Last updated