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 zasadniczo 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 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.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)