Skip to content

Archives

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Geen categorieën
Trend RepositoryArticles and guides
Articles

Command line access from your browser using shell.php

On januari 5, 2022 by admin

Soms wil je shell toegang vanuit de browser. Dit kan worden bereikt met PHP als de beveiligingsinstellingen het toestaan. Ik heb deze functionaliteit geïmplementeerd in shell.php (beschikbaar op Github). In de bovenstaande screenshot zie je hoe shell toegang vanuit een browser werkt. Met het script kunt u een bestand uploaden, downloaden, bekijken, bewerken en verwijderen, een directory zippen en unzippen en de directories op de server doorzoeken met de muis, maar u kunt ook aangepaste commando’s typen met het toetsenbord.

  • Veiligheidswaarschuwing en disclaimer
  • Bekende problemen
  • PHP shell executie commando’s
  • Hardt uw server met open_basedir
  • Kan Suhosin niet vinden?
  • Privilege scheiding
  • Conclusie

Veiligheidswaarschuwing en disclaimer

Laat dit script alleen draaien op machines waarvan u de eigenaar bent (of tijdens een geautoriseerde pentest). Zorg er ook voor dat de machine goed is gefirewalled (poort 80 mag niet bereikbaar zijn vanaf het Internet). Gebruik het niet voor kwaadwillige doeleinden! Lees hier meer over misbruik van shell scripts.

Bekende problemen

Als het script niet werkt, kan dat komen doordat de PHP “passthru” functie waar het op vertrouwt is uitgeschakeld. Om een lijst van uitgeschakelde PHP functies uit te voeren, voert u de volgende PHP code uit:

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

Op een out-of-the-box Ubuntu 14.04 zal dat het volgende opleveren:

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 executie commando’s

Als het script niet draait met passthru(), zal het een paar andere commando’s proberen. De volgende commando’s zijn vergelijkbaar:

  • exec() Geeft laatste regel van opdrachtuitvoer
  • passthru() Geeft opdrachtuitvoer direct door aan de browser
  • system() Geeft opdrachtuitvoer direct door aan de browser en geeft laatste regel terug
  • shell_exec() Geeft opdrachtuitvoer terug
  • popen() Opent lees of schrijf pijp naar proces van een commando
  • proc_open() Lijkt op popen() maar grotere mate van controle
  • pcntl_exec() Voert een programma uit

Hardt uw server met open_basedir

Als het bovenstaande script u eng lijkt, dan wilt u misschien voorkomen dat het op uw server wordt uitgevoerd. U kunt dit doen door de veilige modus in te schakelen (deprecated), gebruik te maken van de “disable_functions” php.ini variabele en/of de Suhosin functie executie blacklist.

Ik heb een goed geschreven post gevonden over het beveiligen van uw PHP installatie, check it out! Naast het beperken van de uitvoerbare functies raden ze ook de “open_basedir” php.ini config variabele aan. Deze beperkt de bestanden die kunnen worden benaderd door PHP tot de opgegeven directory-boom. Ik denk dat dit een krachtig hulpmiddel is.

Ook kan het een goed idee zijn om uw “/tmp” directory te beveiligen met “nodev”, “nosuid” en “noexec” vlaggen zoals hier beschreven.

Kan Suhosin niet vinden?

Merk op dat het “php5-suhosin” pakket (een PHP beveiliging uitbreiding) niet langer is geinstalleerd, noch beschikbaar is op Debian gebaseerde systemen. Sommige van de beveiligingsverbeteringen zijn verwerkt in de laatste PHP versies (5.4 en 5.5). Als u Suhosin (van Github) op Ubuntu 14.04 (PHP 5.5.9) wilt installeren, kunt u deze tutorial volgen.

U kunt meer lezen over de controverse rond het verwijderen van Suhosin op LWN.net.

Privilege scheiding

Als er meerdere gebruikers op het systeem zijn, is “privilege scheiding” een MUST. Dit betekent dat de PHP-code in de gebruikerscontext moet worden uitgevoerd (bijv. als gebruiker “maurits”) en niet als gebruiker “www-data”. Ik heb een geweldig artikel gevonden dat uitlegt hoe dit bereikt kan worden. De eenvoudigste oplossing is om:

sudo apt-get install libapache2-mpm-itk

En dan de “AssignUserID” directive toe te voegen aan elke “VirtualHost” configuratie. Merk op dat dit misschien niet de veiligste oplossing is, maar het presteert goed en is eenvoudig te installeren.

Conclusie

U moet PHP altijd updaten en patchen naar de laatste versie om uitbuiting van bekende beveiligingslekken te voorkomen. Tools als “disable_functions”, “open_basedir”, Suhosin en filesystem flags verkleinen het aanvalsoppervlak en voorkomen uitbuiting van onbekende veiligheidslekken. Je kunt ze gebruiken om een gelaagde beveiligingsstrategie te implementeren. Vergeet ook de scheiding van privileges niet.

Share

Geef een antwoord Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Archieven

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Inloggen
  • Berichten feed
  • Reacties feed
  • WordPress.org
  • 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