Hoppa till innehåll

Archives

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

Categories

  • Inga kategorier
Trend RepositoryArticles and guides
Articles

Kommandoradstillgång från webbläsaren med shell.php

On januari 5, 2022 by admin

Ibland vill du ha tillgång till skalet från webbläsaren. Det kan åstadkommas med hjälp av PHP om säkerhetsinställningarna tillåter det. Jag har implementerat denna funktionalitet i shell.php (tillgänglig på Github). I skärmdumpen ovan ser du hur skalåtkomst från en webbläsare fungerar. Skriptet gör det möjligt att ladda upp, ladda ner, visa redigera och ta bort en fil, zippa och packa upp en katalog och gå igenom katalogerna på servern med hjälp av musen, men du kan också skriva in egna kommandon med hjälp av tangentbordet.

  • Säkerhetsvarning och ansvarsfriskrivning
  • Kända problem
  • PHP shell execution commands
  • Härdar din server med open_basedir
  • Kan inte hitta Suhosin?
  • Privilegieavskiljning
  • Slutsats

Säkerhetsvarning och ansvarsfriskrivning

Kör det här skriptet endast på maskiner som du äger (eller under ett auktoriserat pentest). Se också till att maskinen är ordentligt brandväggad (port 80 bör inte kunna nås från Internet). Använd det inte för illasinnade syften! Läs mer om missbruk av skalskript här.

Kända problem

Om skriptet inte fungerar kan det bero på att PHP-funktionen ”passthru” som det är beroende av är inaktiverad. För att lista inaktiverade PHP-funktioner utför följande PHP-kod:

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

På en out-of-the-box Ubuntu 14.04 som ger ut:

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 execution commands

Om skriptet inte går att köra med passthru() kommer det att prova några andra kommandon. Följande kommandon är liknande:

  • exec() Returnerar sista raden i kommandoutgången
  • passthru() Överför kommandoutgången direkt till webbläsaren
  • system() Överför kommandoutgången direkt till webbläsaren och returnerar sista raden
  • shell_exec() Returnerar kommandoutgången
  • popen() Öppnar läs- eller skrivledning till processen för ett kommando
  • proc_open() Liknar popen() men större grad av kontroll
  • pcntl_exec() Utför ett program

Härdar din server med open_basedir

Om ovanstående skript verkar skrämmande för dig, så kanske du vill förhindra att det körs på din server. Du kan göra detta genom att aktivera safe mode (deprecated), använda variabeln ”disable_functions” i php.ini och/eller Suhosin function execution blacklist.

Jag har hittat ett välskrivet inlägg om att säkra din PHP-installation, kolla in det! Förutom att begränsa de exekverbara funktionerna rekommenderar de också konfigurationsvariabeln ”open_basedir” php.ini. Den begränsar de filer som kan nås av PHP till det angivna katalogträdet. Jag anser att detta är ett kraftfullt verktyg.

Det kan också vara en bra idé att säkra katalogen ”/tmp” med flaggorna ”nodev”, ”nosuid” och ”noexec” enligt beskrivningen här.

Kan inte hitta Suhosin?

Notera att paketet ”php5-suhosin” (ett säkerhetstillägg för PHP) inte längre är installerat och inte heller tillgängligt på Debianbaserade system. En del av säkerhetsförbättringarna har införlivats i de senaste PHP-versionerna (5.4 och 5.5). Om du vill installera Suhosin (från Github) på Ubuntu 14.04 (PHP 5.5.9) kan du följa den här handledningen.

Du kan läsa mer om kontroversen kring att ta bort Suhosin på LWN.net.

Privilegieavskiljning

Om det finns flera användare på systemet är ”privilegieavskiljning” ett MÅSTE. Detta innebär att PHP-koden körs i användarkontexten (t.ex. som användare ”maurits”) och inte som användare ”www-data”. Jag har hittat en bra artikel som förklarar hur detta kan uppnås. Den enklaste lösningen är att köra:

sudo apt-get install libapache2-mpm-itk

Och sedan lägga till direktivet ”AssignUserID” i varje ”VirtualHost”-konfiguration. Observera att detta kanske inte är den säkraste lösningen, men den fungerar bra och är lätt att installera.

Slutsats

Du bör alltid uppdatera och patcha PHP till den senaste versionen för att förhindra utnyttjande av kända säkerhetshål. Verktyg som ”disable_functions”, ”open_basedir”, Suhosin och filsystemflaggor minskar angreppsytan och förhindrar utnyttjande av okända säkerhetshål. Du kan använda dem för att skapa en strategi för säkerhet i flera lager. Glöm inte heller privilegieavgränsning.

Share

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Arkiv

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

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • 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
  • 日本語日本語

Upphovsrätt Trend Repository 2022 | Tema av ThemeinProgress | Drivs med WordPress