Pular para o conteúdo
Todos os conceitos

Web shell

Um arquivo que o atacante planta no site e que executa comandos passados pela URL.

Uma web shell é um arquivo que o atacante consegue colocar dentro do site e que o servidor executa. A partir dele, o atacante roda comandos no servidor pelo próprio navegador, como se tivesse um terminal. É um jeito comum de transformar uma falha de envio de arquivos num controle total da máquina.

O caminho costuma ser:

  1. O site aceita envio de arquivos (foto de produto, anexo) e não confere direito o que recebe.
  2. O atacante envia um arquivo executável (por exemplo um .php) disfarçado, muitas vezes com nome de imagem, para a pasta de uploads.
  3. Depois, ele abre esse arquivo passando o comando na URL, algo como /uploads/foto.php?cmd=id, e o servidor devolve a saída do comando.

Como achar no log de acesso:

  • A pasta de uploads deveria servir só conteúdo estático (imagens). Procure ali um arquivo que não seja imagem, em especial um .php.
  • Esse arquivo é pedido várias vezes, com um parâmetro que parece comando depois do ? (?cmd=...), e cada pedido responde 200. Pode haver POST para ele também.
  • As imagens de verdade são pedidas uma vez, com resposta do tamanho de uma foto, e sem parâmetros de comando.

Exemplo de linha suspeita:

198.51.100.23 - - [...] "GET /uploads/img_8812.php?cmd=cat%20/etc/passwd HTTP/1.1" 200 2310 ...

Isso importa porque a web shell dá ao atacante um pé dentro do servidor a partir de uma falha pequena. A defesa é dupla: impedir o envio de arquivos executáveis (conferir tipo e extensão) e configurar o servidor para nunca executar nada que esteja na pasta de uploads.

Aparece nestes desafios