disable_functions bypass - dl function
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)
Important note:
dl
to funkcja PHP, która może być używana do ładowania rozszerzeń PHP. Jeśli funkcja nie jest wyłączona, może być nadużywana do obejścia disable_functions
i wykonywania dowolnych poleceń.
Jednak ma pewne surowe ograniczenia:
Funkcja dl
musi być obecna w środowisku i nie wyłączona
Rozszerzenie PHP musi być skompilowane z tą samą główną wersją (wersja API PHP), którą używa serwer (możesz zobaczyć te informacje w wynikach phpinfo)
Rozszerzenie PHP musi być znajdować się w katalogu, który jest zdefiniowany przez dyrektywę extension_dir
(możesz to zobaczyć w wynikach phpinfo). Jest bardzo mało prawdopodobne, że atakujący próbujący nadużyć serwera będzie miał dostęp do zapisu w tym katalogu, więc ten wymóg prawdopodobnie uniemożliwi Ci nadużycie tej techniki).
Jeśli spełniasz te wymagania, kontynuuj czytanie posta https://antichat.com/threads/70763/ aby dowiedzieć się, jak obejść disable_functions. Oto podsumowanie:
Funkcja dl jest używana do dynamicznego ładowania rozszerzeń PHP podczas wykonywania skryptu. Rozszerzenia PHP, zazwyczaj napisane w C/C++, zwiększają funkcjonalność PHP. Atakujący, zauważając, że funkcja dl
nie jest wyłączona, postanawia stworzyć niestandardowe rozszerzenie PHP do wykonywania poleceń systemowych.
Identyfikacja wersji PHP:
Atakujący określa wersję PHP za pomocą skryptu (<?php echo 'PHP Version is '.PHP_VERSION; ?>
).
Pozyskanie źródła PHP:
Pobiera źródło PHP z oficjalnej strony PHP lub z archiwum, jeśli wersja jest starsza.
Lokalna konfiguracja PHP:
Wydobywa i instaluje konkretną wersję PHP na swoim systemie.
Tworzenie rozszerzenia:
Studiuje tworzenie rozszerzeń PHP i bada kod źródłowy PHP.
Skupia się na powieleniu funkcjonalności funkcji exec znajdującej się w ext/standard/exec.c
.
ZEND_MODULE_API_NO:
ZEND_MODULE_API_NO
w bypass.c
musi odpowiadać bieżącej wersji budowy rozszerzenia Zend, którą można uzyskać za pomocą:
Modyfikacja PHP_FUNCTION:
Dla nowszych wersji PHP (5, 7, 8), PHP_FUNCTION(bypass_exec)
może wymagać dostosowania. Podany fragment kodu szczegółowo opisuje tę modyfikację.
bypass.c:
Implementuje podstawową funkcjonalność niestandardowego rozszerzenia.
php_bypass.h:
Plik nagłówkowy, definiujący właściwości rozszerzenia.
config.m4:
Używany przez phpize
do skonfigurowania środowiska budowy dla niestandardowego rozszerzenia.
Polecenia kompilacji:
Używa phpize
, ./configure
i make
do skompilowania rozszerzenia.
Powstały bypass.so
znajduje się w podkatalogu modułów.
Czyszczenie:
Uruchamia make clean
i phpize --clean
po kompilacji.
Kompatybilność wersji:
Upewnia się, że wersje API PHP są zgodne między systemami atakującego a ofiary.
Ładowanie rozszerzenia:
Wykorzystuje funkcję dl
, omijając ograniczenia, używając ścieżek względnych lub skryptu do automatyzacji procesu.
Wykonywanie skryptu:
Atakujący przesyła bypass.so
i skrypt PHP na serwer ofiary.
Skrypt używa funkcji dl_local
, aby dynamicznie załadować bypass.so
, a następnie wywołuje bypass_exec
z poleceniem przekazanym przez parametr zapytania cmd
.
Atakujący może teraz wykonywać polecenia, uzyskując dostęp do: http://www.example.com/script.php?cmd=<command>
Ten szczegółowy przewodnik opisuje proces tworzenia i wdrażania rozszerzenia PHP do wykonywania poleceń systemowych, wykorzystując funkcję dl
, która powinna być idealnie wyłączona, aby zapobiec takim naruszeniom bezpieczeństwa.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)