PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
To jest w zasadzie podsumowanie https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
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. Dokument ten podkreśla różne strategie osiągania RCE.
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:
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
:
Zachowanie autoloadingu różni się w zależności od wersji PHP, oferując różne możliwości RCE.
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.
RCE za pomocą konkretnych metod obejmuje:
Klasa SplFileObject
umożliwia SSRF poprzez swój konstruktor, pozwalając na połączenia z dowolnym URL:
SSRF może prowadzić do ataków deserializacji w wersjach PHP przed 8.0 przy użyciu protokołu Phar.
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:
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.
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.
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).
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.
Metoda opisana w oryginalnym opisie polega na przesyłaniu plików, które powodują awarię serwera przed usunięciem. Poprzez brute-forcing nazwę tymczasowego pliku, możliwe jest, aby Imagick wykonał dowolny kod PHP. Jednak ta technika okazała się skuteczna tylko w przestarzałej wersji ImageMagick.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)