Skip to content

Archives

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Categories

  • Sem categorias
Trend RepositoryArticles and guides
Articles

Acesso à linha de comando a partir do seu browser usando shell.php

On Janeiro 5, 2022 by admin

>

Algumas vezes você quer acesso à shell a partir do browser. Ele pode ser alcançado usando PHP se as configurações de segurança o permitirem. Eu implementei esta funcionalidade em shell.php (disponível no Github). Na imagem de tela acima você vê como funciona o acesso à shell a partir de um navegador. O script permite que você carregue, baixe, veja editar e remover um arquivo, zipar e descompactar um diretório e atravessar os diretórios no servidor usando o mouse, mas você também pode digitar comandos personalizados usando o teclado.

  • Alerta de segurança e isenção de responsabilidade
  • Known issues
  • Comandos de execução de shell PHP
  • Escutar o seu servidor com open_basedir
  • Não pode encontrar Suhosin?
  • Separação de privilégios
  • Conclusion

Alerta de segurança e isenção de responsabilidade

Por favor execute este script somente em máquinas que você possui (ou durante uma pentest autorizada). Certifique-se também de que a máquina está devidamente equipada com firewall (a porta 80 não deve estar acessível a partir da Internet). Não a utilize para fins maliciosos! Leia mais sobre abuso de scripts shell aqui.

Known issues

Se o script não funcionar pode ser porque a função “passthru” do PHP na qual ele se baseia está desativada. Para listar funções PHP desabilitadas execute o seguinte código PHP:

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

Em um Ubuntu 14.04 out-of-the-box que irá sair:

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

Comandos de execução de shell PHP

Se o script não for executado usando passthru(), ele irá tentar alguns outros comandos. Os seguintes comandos são similares:

  • exec() Retorna a última linha de comandos de saída
  • passthru() Passa os comandos de saída directamente para o browser
  • system() Passa os comandos de saída directamente para o browser e retorna a última linha
  • shell_exec() Retorna os comandos de saída
  • popen() Abre pipe de leitura ou escrita para processar um comando
  • proc_open() Similar ao popen() mas com maior grau de controle
  • pcntl_exec() Executa um programa

Escutar o seu servidor com open_basedir

Se o script acima parece assustador para você, então você pode querer impedi-lo de executar no seu servidor. Você pode fazer isso ativando o modo seguro (depreciado), usando a variável php.ini “disable_functions” e/ou a blacklist de execução da função Suhosin.

Eu encontrei um post bem escrito sobre como proteger sua instalação do PHP, confira! Além de limitar as funções executáveis, eles também recomendam a variável de configuração php.ini “open_basedir”. Ela limita os arquivos que podem ser acessados pelo PHP para a árvore de diretório especificada. Eu acredito que esta é uma ferramenta poderosa.

Tal como pode ser uma boa ideia proteger o seu directório “/tmp” com a bandeira “nodev”, “nosuid” e “noexec” como descrito aqui.

Não pode encontrar Suhosin?

Note que o pacote “php5-suhosin” (uma extensão de segurança PHP) não está mais instalado nem disponível em sistemas baseados em Debian. Algumas das melhorias de segurança foram incorporadas nas últimas versões do PHP (5.4 e 5.5). Se você quiser instalar o Suhosin (do Github) no Ubuntu 14.04 (PHP 5.5.9) você pode seguir este tutorial.

Você pode ler mais sobre a controvérsia em torno da remoção do Suhosin na LWN.net.

Separação de privilégios

Se houver vários usuários no sistema “separação de privilégios” é um DEVERÁ. Isto significa executar o código PHP no contexto do usuário (por exemplo, como usuário “maurits”) e não como usuário “www-data”. Encontrei um grande artigo que explica como isto pode ser conseguido. A solução mais fácil é correr:

sudo apt-get install libapache2-mpm-itk

E depois adicionar a directiva “AssignUserID” a cada configuração “VirtualHost”. Note que esta pode não ser a solução mais segura, mas tem um bom desempenho e é fácil de instalar.

Conclusion

Você deve sempre atualizar e corrigir o PHP para a versão mais recente para evitar a exploração de falhas de segurança conhecidas. Ferramentas como “disable_functions”, “open_basedir”, Suhosin e bandeiras de sistema de arquivos reduzem a superfície de ataque e previnem a exploração de falhas de segurança desconhecidas. Você pode usá-las para criar uma estratégia de segurança em camadas. Também não se esqueça da separação de privilégios.

Share

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Arquivo

  • Janeiro 2022
  • Dezembro 2021
  • Novembro 2021
  • Outubro 2021
  • Setembro 2021

Meta

  • Iniciar sessão
  • Feed de entradas
  • Feed de comentários
  • 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