disable_functions bypass - dl function

Support HackTricks

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.

Kroki podejmowane przez atakującego:

  1. Identyfikacja wersji PHP:

  • Atakujący określa wersję PHP za pomocą skryptu (<?php echo 'PHP Version is '.PHP_VERSION; ?>).

  1. Pozyskanie źródła PHP:

  1. Lokalna konfiguracja PHP:

  • Wydobywa i instaluje konkretną wersję PHP na swoim systemie.

  1. 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:

  1. 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ą:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. 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:

  1. Polecenia kompilacji:

  • Używa phpize, ./configure i make do skompilowania rozszerzenia.

  • Powstały bypass.so znajduje się w podkatalogu modułów.

  1. Czyszczenie:

  • Uruchamia make clean i phpize --clean po kompilacji.

Przesyłanie i wykonywanie na zainfekowanym hoście:

  1. Kompatybilność wersji:

  • Upewnia się, że wersje API PHP są zgodne między systemami atakującego a ofiary.

  1. Ładowanie rozszerzenia:

  • Wykorzystuje funkcję dl, omijając ograniczenia, używając ścieżek względnych lub skryptu do automatyzacji procesu.

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

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.

Support HackTricks

Last updated