Skip to content

Archives

  • Leden 2022
  • Prosinec 2021
  • Listopad 2021
  • Říjen 2021
  • Září 2021

Categories

  • Žádné rubriky
Trend RepositoryArticles and guides
Articles

Přístup k příkazovému řádku z prohlížeče pomocí shell.php

On 5 ledna, 2022 by admin

Někdy chcete mít přístup k shellu z prohlížeče. Toho lze dosáhnout pomocí jazyka PHP, pokud to nastavení zabezpečení umožňuje. Tuto funkci jsem implementoval do souboru shell.php (je k dispozici na Githubu). Na výše uvedeném snímku obrazovky vidíte, jak funguje přístup do shellu z prohlížeče. Skript umožňuje nahrávat, stahovat, zobrazovat upravovat a odstraňovat soubor, rozbalovat a zazipovat adresář a procházet adresáře na serveru pomocí myši, ale můžete také zadávat vlastní příkazy pomocí klávesnice.

  • Upozornění k zabezpečení a zřeknutí se odpovědnosti
  • Známé problémy
  • Příkazy pro spuštění shellu PHP
  • Zpevnění serveru pomocí open_basedir
  • Nemůžete najít Suhosin?
  • Oddělení oprávnění
  • Závěr

Upozornění k zabezpečení a zřeknutí se odpovědnosti

Skript spouštějte pouze na počítačích, které vlastníte (nebo během autorizovaného pentestu). Ujistěte se také, že je stroj řádně zabezpečen firewallem (port 80 by neměl být dosažitelný z internetu). Nepoužívejte jej ke škodlivým účelům! Více informací o zneužití shellových skriptů najdete zde.

Známé problémy

Pokud skript nefunguje, může to být proto, že funkce PHP „passthru“, na kterou se spoléhá, je vypnutá. Chcete-li vypsat zakázané funkce PHP, spusťte následující kód PHP:

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

Na out-of-the-box Ubuntu 14.04, který vypíše:

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

Příkazy pro spuštění shellu PHP

Pokud se skript nespustí pomocí passthru(), vyzkouší několik dalších příkazů. Následující příkazy jsou podobné:

  • exec() Vrátí poslední řádek výstupu příkazů
  • passthru() Předá výstup příkazů přímo prohlížeči
  • system() Předá výstup příkazů přímo prohlížeči a vrátí poslední řádek
  • shell_exec() Vrátí výstup příkazů
  • popen() Otevře rouru pro čtení nebo zápis do procesu příkazu
  • proc_open() Podobně jako popen(), ale s větším stupněm kontroly
  • pcntl_exec() Spustí program

Zpevnění serveru pomocí open_basedir

Pokud se vám výše uvedený skript zdá děsivý, pak možná budete chtít zabránit jeho spuštění na vašem serveru. Toho můžete dosáhnout zapnutím nouzového režimu (deprecated), použitím proměnné „disable_functions“ v php.ini a/nebo blacklistu pro spouštění funkcí Suhosin.

Našel jsem dobře napsaný příspěvek o zabezpečení instalace PHP, podívejte se na něj! Kromě omezení spouštěných funkcí doporučují také konfigurační proměnnou „open_basedir“ php.ini. Ta omezuje soubory, ke kterým může PHP přistupovat, na zadaný adresářový strom. Věřím, že je to mocný nástroj.

Také by mohlo být dobré zabezpečit adresář „/tmp“ pomocí příznaků „nodev“, „nosuid“ a „noexec“, jak je popsáno zde.

Nemůžete najít Suhosin?

Všimněte si, že balíček „php5-suhosin“ (bezpečnostní rozšíření PHP) již není nainstalován ani dostupný v systémech založených na Debianu. Některá bezpečnostní vylepšení byla začleněna do nejnovějších verzí PHP (5.4 a 5.5). Pokud chcete nainstalovat Suhosin (z Githubu) na Ubuntu 14.04 (PHP 5.5.9), můžete postupovat podle tohoto návodu.

Více o kontroverzích kolem odstranění Suhosinu si můžete přečíst na LWN.net.

Oddělení oprávnění

Pokud je v systému více uživatelů, „oddělení oprávnění“ je MUSÍ. To znamená spouštět kód PHP v kontextu uživatele (např. jako uživatel „maurits“) a ne jako uživatel „www-data“. Našel jsem skvělý článek, který vysvětluje, jak toho lze dosáhnout. Nejjednodušší řešení je spustit:

sudo apt-get install libapache2-mpm-itk

A pak do každé konfigurace „VirtualHost“ přidat direktivu „AssignUserID“. Všimněte si, že to nemusí být nejbezpečnější řešení, ale funguje dobře a snadno se instaluje.

Závěr

Vždy byste měli aktualizovat a opravovat PHP na nejnovější verzi, abyste zabránili zneužití známých bezpečnostních děr. Nástroje jako „disable_functions“, „open_basedir“, Suhosin a příznaky souborového systému snižují plochu útoku a zabraňují zneužití neznámých bezpečnostních děr. Můžete je použít k vytvoření implementace strategie vrstveného zabezpečení. Nezapomínejte také na oddělení oprávnění.

Sdílet

.

Napsat komentář Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Archivy

  • Leden 2022
  • Prosinec 2021
  • Listopad 2021
  • Říjen 2021
  • Září 2021

Základní informace

  • Přihlásit se
  • Zdroj kanálů (příspěvky)
  • Kanál komentářů
  • Česká lokalizace
  • 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