wwwolf's PHP web shell
Enfrentei frequentemente problemas ao usar outras web shells:
- Elas usam recursos novos de sintaxe do PHP incompatíveis com a versão antiga do PHP
em execução em alguns alvos.
- Elas fazem suposições erradas sobre o URL remoto, quebrando a injeção de código PHP ou
os parâmetros GET (in)esperados pelo servidor.
- Elas frequentemente exibem apenas o conteúdo da saída padrão, descartando o stderr.
- Elas lidam mal com caracteres especiais na exibição da saída (como
<).
- Elas não permitem upload de arquivos, ou oferecem um método não suportado/bloqueado pelas
configurações do alvo.
- Elas exigem modificação manual dependendo se o alvo executa
um sistema UNIX-like ou Windows.
Aqui está minha tentativa de resolver esses problemas. Ao contrário de algumas outras soluções,
esta nem sequer pretende se tornar um "framework de pós-exploração completo".
Seu único objetivo é fornecer uma maneira estável e
confiável de colocar o pé na porta no alvo, aderindo ao princípio KISS
o máximo possível e permanecendo genérica o suficiente para que você construa o que
quiser a partir daí, sem atrapalhar.

PHP web shell do WhiteWinterWolf:
- O acesso pode ser protegido por senha.
- É compatível com sistemas UNIX-like e Windows sem modificação.
- Tenta limpar o buffer de saída do PHP (ou seja, descartar qualquer código "lixo" já
produzido pelo aplicativo atacado) e forçar a terminação da execução do código PHP
para fornecer o comportamento mais limpo e estável.
- O formulário é enviado como uma requisição POST, mantendo exatamente o mesmo URL (incluindo
exatamente os mesmos parâmetros GET, nada adicionado ou removido) que foi usado
para acessá-lo em primeiro lugar. Nenhuma suposição é feita, tornando-o adequado
para técnicas complexas de injeção de código. Além disso, o servidor remoto pode não
registrar dados POST e, portanto, pode não registrar os comandos realmente executados no alvo.
- Valores padrão sensatos são aplicados:
- O diretório de trabalho atual é definido para o diretório de trabalho atual real.
Isso tem a vantagem adicional de facilmente indicar o tipo de sistema remoto
(
/var/www/html vs. C:\Inetpub\wwwroot).
- O host de origem do fetch é definido para o seu endereço IP conforme visto pelo servidor
alvo.
- Você pode definir livremente o diretório de trabalho e o valor é mantido entre os comandos.
Uma mensagem de aviso específica é exibida caso a configuração
open_basedir do PHP
possa limitar sua capacidade de se mover pelo servidor.
- Existem duas maneiras diferentes de enviar arquivos para seus alvos:
- Um formulário de upload clássico, se as configurações remotas do PHP permitirem.
- Buscar o arquivo de um determinado host e URL (geralmente um host controlado pelo
atacante). Este recurso implementa uma funcionalidade de fetch HTTP muito básica,
permitindo contornar a limitação da configuração
url_allow_fopen do PHP. Ele não
lida com coisas sofisticadas como redirecionamento HTTP ou autenticação, mas pode
ainda lidar com SSL/TLS prefixando o hostname de acordo
(tls://203.0.113.37).
- Um link
Clear cmd permite limpar e definir o foco no campo do formulário de entrada
de comando em um único clique. Acho conveniente para executar rapidamente alguns
comandos arbitrários no servidor, mas este recurso depende de JavaScript. Se
você quiser evitar JavaScript, pode remover esta linha única; isso não
afetará o restante da web shell, que não usa JavaScript em nenhum outro lugar.
Este script aplica as configurações do formulário na ordem fornecida:
- Diretório de trabalho atual.
- Arquivos para upload.
- Comando a ser executado.
Isso permite enviar um arquivo em um determinado diretório e executá-lo imediatamente em
uma única requisição HTTP.
Mais informações podem ser encontradas na página principal do projeto.
Este script é fornecido apenas para fins de pesquisa e avaliação de segurança.
Não o use para nada ilegal!