Uma WebShell é adquirida através do upload de um arquivo com algum conteúdo malicioso. Como exemplo, um arquivo PHP contendo um código malicioso pode ser considerado um WebShell. Existem algumas funções que podem ser observadas dentro do código PHP para conseguir um (CWE-94) Improper Control of Generation of Code (‘Code Injection’). Os códigos PHP abaixo podem ser utilizados para conseguir explorar esse ponto, tais como:

  1. popen por conseguir executar códigos de maneira maliciosa
  2. system por conseguir executar códigos de maneira maliciosa
  3. exec por conseguir executar códigos de maneira maliciosa
  4. shell_exec por conseguir executar códigos de maneira maliciosa
  5. proc_open por conseguir executar códigos de maneira maliciosa e por conseguir abrir arquivos para entrada/saída
  6. eval pode ser usado para criar um ambiente onde irá executar um código malicioso
  7. create_function cria uma função anônima (obsoleta desde o PHP 7.2.0)
  8. show_source mostra o código de um arquivo PHP
  9. highlight_file mostra o conteúdo de um arquivo
  10. posix_mkfifo, posix_getlogin, posix_ttyname podem ser utilizadas para interagir com o sistema operacional de maneiras potencialmente inseguras
  11. ini_alter, ini_restore pode ser utilizada para alterar configurações de segurança ou comportamento do PHP
  12. dl pode ser usada para carregar uma extensão PHP em tempo de execução (removido desde o PHP 7.0.0)
  13. pfsockopen pode abrir uma conexão socket persistente
  14. stream_socket_server pode criar um servidor de socket
  15. fsockopen abre uma conexão socket

Todas essas funções podem ser utilizadas para explorar um (CWE-434) Unrestricted Upload of File with Dangerous Type em PHP. Ler, modificar ou obter informações pode ser uma alta quebra de integridade do sistema. Além disso, se explorada da maneira correta, um WebShell pode levar a um Reverse Shell, o que agrava ainda mais a situação.