disable_functions bypass - dl function
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łączonaRozszerzenie 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.
Kroki podejmowane przez atakującego:
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
.
Uwagi dotyczące kompilacji niestandardowego rozszerzenia:
ZEND_MODULE_API_NO:
ZEND_MODULE_API_NO
wbypass.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ę.
Pliki niestandardowego rozszerzenia:
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.
Budowanie rozszerzenia:
Polecenia kompilacji:
Używa
phpize
,./configure
imake
do skompilowania rozszerzenia.Powstały
bypass.so
znajduje się w podkatalogu modułów.
Czyszczenie:
Uruchamia
make clean
iphpize --clean
po kompilacji.
Przesyłanie i wykonywanie na zainfekowanym hoście:
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łujebypass_exec
z poleceniem przekazanym przez parametr zapytaniacmd
.
Wykonywanie poleceń:
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.
Last updated