disable_functions bypass - dl function
Ważna uwaga:
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żyta do ominięcia disable_functions
i wykonania dowolnych poleceń.
Jednak ma pewne ograniczenia:
Funkcja
dl
musi być obecna w środowisku i nie wyłączonaRozszerzenie PHP musi być skompilowane z tą samą główną wersją (wersją interfejsu API PHP), którą używa serwer (można to sprawdzić w wyniku phpinfo)
Rozszerzenie PHP musi być znajdować się w katalogu, który jest określony przez dyrektywę
extension_dir
(można to zobaczyć w wyniku phpinfo). 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 to wymaganie prawdopodobnie uniemożliwi nadużycie tej techniki.
Jeśli spełniasz te wymagania, kontynuuj czytanie posta https://antichat.com/threads/70763/ , aby dowiedzieć się, jak ominąć disable_functions. Oto podsumowanie:
Funkcja dl jest używana do dynamicznego ładowania rozszerzeń PHP podczas wykonywania skryptu. Rozszerzenia PHP, zwykle napisane w C/C++, rozszerzają funkcjonalność PHP. Atakujący, zauważając, że funkcja dl
nie jest wyłączona, postanawia stworzyć niestandardowe rozszerzenie PHP do wykonania poleceń systemowych.
Kroki podjęte przez atakującego:
Identyfikacja wersji PHP:
Atakujący określa wersję PHP za pomocą skryptu (
<?php echo 'Wersja PHP to '.PHP_VERSION; ?>
).
Pobieranie źródła PHP:
Pobiera źródło PHP ze oficjalnej strony PHP lub archiwum, jeśli wersja jest starsza.
Lokalna konfiguracja PHP:
Rozpakowuje i instaluje konkretną wersję PHP na swoim systemie.
Tworzenie rozszerzenia:
Studiuje tworzenie rozszerzeń PHP i analizuje kod źródłowy PHP.
Skupia się na duplikowaniu 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 pasować do bieżącej kompilacji 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żywane przez
phpize
do konfiguracji środowiska kompilacji niestandardowego rozszerzenia.
Budowanie rozszerzenia:
Polecenia kompilacji:
Używa
phpize
,./configure
imake
do skompilowania rozszerzenia.Otrzymany plik
bypass.so
znajduje się w podkatalogu modules.
Czyszczenie:
Wykonuje
make clean
iphpize --clean
po kompilacji.
Przesyłanie i wykonanie na hostingu ofiary:
Zgodność wersji:
Zapewnia zgodność wersji interfejsu API PHP między systemami atakującego i ofiary.
Ładowanie rozszerzenia:
Wykorzystuje funkcję
dl
, obejście ograniczeń za pomocą ścieżek względnych lub skryptu automatyzującego ten proces.
Wykonanie skryptu:
Atakujący przesyła
bypass.so
i skrypt PHP na serwer ofiary.Skrypt używa funkcji
dl_local
do dynamicznego ładowaniabypass.so
, a następnie wywołujebypass_exec
z poleceniem przekazanym za pomocą parametru zapytaniacmd
.
Wykonanie polecenia:
Atakujący może teraz wykonywać polecenia, uzyskując dostęp do:
http://www.example.com/script.php?cmd=<polecenie>
Ten szczegółowy przewodnik przedstawia proces tworzenia i wdrażania rozszerzenia PHP do wykonywania poleceń systemowych, wykorzystując funkcję dl
, która idealnie powinna być wyłączona, aby zapobiec takim naruszeniom bezpieczeństwa.
Last updated