Skip to content

Archives

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Categories

  • Nincs kategória
Trend RepositoryArticles and guides
Articles

Parancsnoki hozzáférés a böngészőből a shell.php használatával

On január 5, 2022 by admin

Néha szeretnénk a böngészőből elérni a parancssort. Ez a PHP segítségével megvalósítható, ha a biztonsági beállítások lehetővé teszik. Ezt a funkciót a shell.php-ban implementáltam (elérhető a Githubon). A fenti képernyőképen látható, hogyan működik a shell elérés a böngészőből. A szkript lehetővé teszi egy fájl feltöltését, letöltését, megtekintését, szerkesztését és eltávolítását, egy könyvtár zipelését és kicsomagolását, valamint a szerveren lévő könyvtárak bejárását az egér segítségével, de a billentyűzet segítségével is be lehet írni egyéni parancsokat.

  • Biztonsági figyelmeztetés és nyilatkozat
  • Ismert problémák
  • PHP shell végrehajtási parancsok
  • Keményíti a szervert az open_basedirrel
  • Cannot find Suhosin?
  • Privilege separation
  • Következtetés

Biztonsági figyelmeztetés és nyilatkozat

Kérlek, ezt a szkriptet csak a saját gépeden (vagy egy engedélyezett penteszt során) futtasd. Győződjön meg arról is, hogy a gépen megfelelő tűzfal van (a 80-as port nem lehet elérhető az internetről). Ne használja rosszindulatú célokra! A shell szkriptekkel való visszaélésekről bővebben itt olvashat.

Ismert problémák

Ha a szkript nem működik, annak oka lehet, hogy a PHP “passthru” funkciója, amelyre támaszkodik, le van tiltva. A letiltott PHP-funkciók listázásához hajtsa végre a következő PHP-kódot:

var_dump(ini_get('safe_mode'));var_dump(explode(',',ini_get('disable_functions')));var_dump(explode(',',ini_get('suhosin.executor.func.blacklist')));

Egy out-of-the-box Ubuntu 14.04-en ez adja ki:

bool(false)Array( => pcntl_alarm => pcntl_fork => pcntl_waitpid => pcntl_wait => pcntl_wifexited => pcntl_wifstopped => pcntl_wifsignaled => pcntl_wexitstatus => pcntl_wtermsig => pcntl_wstopsig => pcntl_signal => pcntl_signal_dispatch => pcntl_get_last_error => pcntl_strerror => pcntl_sigprocmask => pcntl_sigwaitinfo => pcntl_sigtimedwait => pcntl_exec => pcntl_getpriority => pcntl_setpriority =>)Array( =>)

PHP shell végrehajtási parancsok

Ha a szkript nem fut a passthru() használatával, akkor megpróbál néhány más parancsot. A következő parancsok hasonlóak:

  • exec() Visszaadja a parancsok utolsó kimeneti sorát
  • passthru() A parancsok kimenetét közvetlenül a böngészőnek adja át
  • system() A parancsok kimenetét közvetlenül a böngészőnek adja át és visszaadja az utolsó sort
  • shell_exec() Visszaadja a parancsok kimenetét
  • . popen() Megnyitja az olvasási vagy írási pipát egy parancs feldolgozásához
  • proc_open() Hasonló a popen()-hez, de nagyobb fokú ellenőrzés
  • pcntl_exec() Végrehajtja a programot

Keményíti a szervert az open_basedirrel

Ha a fenti szkript ijesztőnek tűnik neked, akkor érdemes megakadályoznod, hogy a kiszolgálódon fusson. Ezt megteheted a biztonságos mód engedélyezésével (deprecated), a “disable_functions” php.ini változó és/vagy a Suhosin függvényvégrehajtási feketelista használatával.

Találtam egy jól megírt bejegyzést a PHP telepítésed biztosításáról, nézd meg! A futtatható függvények korlátozása mellett az “open_basedir” php.ini config változót is ajánlják. Ez a PHP által elérhető fájlokat a megadott könyvtárfára korlátozza. Szerintem ez egy hatékony eszköz.

Ezeken kívül jó ötlet lehet a “/tmp” könyvtárat a “nodev”, “nosuid” és “noexec” zászlóval biztosítani az itt leírtak szerint.

Cannot find Suhosin?

Note that the “php5-suhosin” package (a PHP security extension) is not longer established nor available on Debian based systems. A biztonsági fejlesztések egy része beépült a PHP legújabb verzióiba (5.4 és 5.5). Ha a Suhosint (a Githubról) szeretné telepíteni Ubuntu 14.04-re (PHP 5.5.9), akkor ezt a bemutatót követheti.

A Suhosin eltávolítása körüli vitáról bővebben olvashat az LWN.net-en.

Privilege separation

Ha több felhasználó van a rendszerben, akkor a “privilege separation” elengedhetetlen. Ez azt jelenti, hogy a PHP kódot a felhasználói környezetben kell futtatni (pl. “maurits” felhasználóként) és nem “www-data” felhasználóként. Találtam egy nagyszerű cikket, amely elmagyarázza, hogyan lehet ezt elérni. A legegyszerűbb megoldás:

sudo apt-get install libapache2-mpm-itk

Az “AssignUserID” direktíva hozzáadása minden “VirtualHost” konfigurációhoz. Vegye figyelembe, hogy ez nem biztos, hogy a legbiztonságosabb megoldás, de jól teljesít és könnyen telepíthető.

Következtetés

A PHP-t mindig a legújabb verzióra kell frissíteni és javítani, hogy megakadályozza az ismert biztonsági rések kihasználását. Az olyan eszközök, mint a “disable_functions”, “open_basedir”, Suhosin és a fájlrendszer flagek csökkentik a támadási felületet és megakadályozzák az ismeretlen biztonsági rések kihasználását. Segítségükkel többszintű biztonsági stratégiát hozhat létre. Ne feledkezzen meg a jogosultságok szétválasztásáról sem.

Share

Vélemény, hozzászólás? Kilépés a válaszból

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Archívum

  • 2022 január
  • 2021 december
  • 2021 november
  • 2021 október
  • 2021 szeptember

Meta

  • Bejelentkezés
  • Bejegyzések hírcsatorna
  • Hozzászólások hírcsatorna
  • WordPress Magyarország
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress