hacktricks/pentesting-web/idor.md

105 lines
8.2 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2023-06-06 18:56:34 +00:00
**Post retirado de** [**https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489**](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
2023-06-06 18:56:34 +00:00
# Lugares inesperados para procurar por IDORs <a href="#8d15" id="8d15"></a>
2023-06-06 18:56:34 +00:00
## Não ignore IDs codificados e hasheados <a href="#d6ce" id="d6ce"></a>
2023-06-06 18:56:34 +00:00
Ao se deparar com um ID codificado, pode ser possível decodificar o ID codificado usando esquemas de codificação comuns.
2023-06-06 18:56:34 +00:00
E se a aplicação estiver usando um ID hasheado/aleatório, verifique se o ID é previsível. Às vezes, as aplicações usam algoritmos que produzem entropia insuficiente e, como tal, os IDs podem ser previstos após uma análise cuidadosa. Nesse caso, tente criar algumas contas para analisar como esses IDs são criados. Você pode ser capaz de encontrar um padrão que permitirá prever IDs pertencentes a outros usuários.
2023-06-06 18:56:34 +00:00
Além disso, pode ser possível vazar IDs aleatórios ou hasheados por meio de outro endpoint de API, em outras páginas públicas na aplicação (página de perfil de outros usuários, etc.), ou em uma URL via referer.
2023-06-06 18:56:34 +00:00
Por exemplo, uma vez encontrei um endpoint de API que permite aos usuários recuperar mensagens diretas detalhadas por meio de um ID de conversa hasheado. A solicitação se parece com isso:
```
GET /api_v1/messages?conversation_id=SOME_RANDOM_ID
```
2023-06-06 18:56:34 +00:00
Isso parece estar bem à primeira vista, já que o _conversation\_id_ é uma sequência alfanumérica longa e aleatória. Mas mais tarde descobri que é possível encontrar uma lista de conversas para cada usuário apenas usando o ID do usuário!
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
2023-06-06 18:56:34 +00:00
Isso retornaria uma lista de _conversation\_ids_ pertencentes a esse usuário. E o _user\_id_ está disponível publicamente na página de perfil de cada usuário. Portanto, você pode ler as mensagens de qualquer usuário obtendo primeiro o user\_id na página de perfil deles, depois recuperando uma lista de conversation\_ids pertencentes a esse usuário e, finalmente, carregando as mensagens por meio do endpoint da API /api\_v1/messages!
2023-06-06 18:56:34 +00:00
## Se você não consegue adivinhar, tente criá-lo <a href="#b54f" id="b54f"></a>
2023-06-06 18:56:34 +00:00
Se os IDs de referência do objeto parecerem imprevisíveis, veja se há algo que você possa fazer para manipular o processo de criação ou vinculação desses IDs de objeto.
2023-06-06 18:56:34 +00:00
## Ofereça um ID para a aplicação, mesmo que ela não peça <a href="#9292" id="9292"></a>
2023-06-06 18:56:34 +00:00
Se nenhum ID for usado na solicitação gerada pela aplicação, tente adicioná-lo à solicitação. Tente adicionar _id, user\_id, message\_id_ ou outros parâmetros de referência de objeto e veja se isso faz diferença no comportamento da aplicação.
2023-06-06 18:56:34 +00:00
Por exemplo, se esta solicitação exibe todas as suas mensagens diretas:
```
GET /api_v1/messages
```
2023-06-06 18:56:34 +00:00
E este? Ele exibiria as mensagens de outro usuário?
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
2023-06-06 18:56:34 +00:00
## HPP (Poluição de Parâmetros HTTP) <a href="#cb9a" id="cb9a"></a>
2023-06-06 18:56:34 +00:00
Vulnerabilidades de HPP (fornecimento de múltiplos valores para o mesmo parâmetro) também podem levar a IDOR. As aplicações podem não antecipar que o usuário envie múltiplos valores para o mesmo parâmetro e, ao fazê-lo, é possível contornar o controle de acesso estabelecido no endpoint.
2023-06-06 18:56:34 +00:00
Embora isso pareça ser raro e eu nunca tenha visto isso acontecer antes, teoricamente, seria assim. Se essa solicitação falhar:
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
2023-06-06 18:56:34 +00:00
# IDOR (Insecure Direct Object Reference)
IDOR é uma vulnerabilidade que ocorre quando um aplicativo permite que um usuário acesse objetos diretamente por meio de uma referência a um identificador, como um número ou nome, sem qualquer outra forma de autenticação. Isso pode permitir que um invasor acesse recursos que não deveriam estar disponíveis para eles, como informações confidenciais ou funcionalidades restritas.
2023-06-06 18:56:34 +00:00
Existem várias maneiras de explorar uma vulnerabilidade IDOR, incluindo adivinhar ou enumerar identificadores, manipular solicitações HTTP ou usar ferramentas automatizadas para encontrar objetos ocultos.
2023-06-06 18:56:34 +00:00
Para evitar vulnerabilidades IDOR, os desenvolvedores devem implementar controles de acesso adequados e validar todas as solicitações do usuário para garantir que eles tenham permissão para acessar os objetos solicitados. Além disso, os identificadores não devem ser previsíveis ou sequenciais, e as solicitações devem ser protegidas contra manipulação ou interceptação.
```
GET /api_v1/messages?user_id=YOUR_USER_ID&user_id=ANOTHER_USERS_ID
```
2023-06-06 18:56:34 +00:00
Claro, por favor, envie o conteúdo que deseja traduzir.
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID&user_id=YOUR_USER_ID
```
2023-06-06 18:56:34 +00:00
I'm sorry, I'm not sure what you mean by "provide the parameters as a list". Could you please provide more context or clarify your request?
```
GET /api_v1/messages?user_ids[]=YOUR_USER_ID&user_ids[]=ANOTHER_USERS_ID
```
2022-05-01 12:41:36 +00:00
## Blind IDORs <a href="#7639" id="7639"></a>
2023-06-06 18:56:34 +00:00
Às vezes, os endpoints suscetíveis a IDOR não respondem com as informações vazadas diretamente. Eles podem levar a aplicação a vazar informações em outro lugar: em arquivos de exportação, e-mails e talvez até alertas de texto.
2023-06-06 18:56:34 +00:00
## Alterar o método de solicitação <a href="#6597" id="6597"></a>
2023-06-06 18:56:34 +00:00
Se um método de solicitação não funcionar, há muitos outros que você pode tentar: GET, POST, PUT, DELETE, PATCH...
2023-06-06 18:56:34 +00:00
Um truque comum que funciona é substituir POST por PUT ou vice-versa: os mesmos controles de acesso podem não ter sido implementados!
2023-06-06 18:56:34 +00:00
## Alterar o tipo de arquivo solicitado <a href="#8f78" id="8f78"></a>
2023-06-06 18:56:34 +00:00
Às vezes, trocar o tipo de arquivo solicitado pode levar o servidor a processar a autorização de maneira diferente. Por exemplo, tente adicionar .json ao final da URL da solicitação e veja o que acontece.
2023-06-06 18:56:34 +00:00
# Como aumentar o impacto dos IDORs <a href="#45b0" id="45b0"></a>
2023-06-06 18:56:34 +00:00
## IDORs críticos primeiro <a href="#71f7" id="71f7"></a>
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Sempre procure por IDORs em funcionalidades críticas primeiro. Tanto IDORs baseados em gravação quanto em leitura podem ter um alto impacto.
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Em termos de IDORs que mudam o estado (gravação), as IDORs de redefinição de senha, alteração de senha, recuperação de conta geralmente têm o maior impacto nos negócios. (Digamos, em comparação com uma IDOR de "alterar configurações de assinatura de e-mail".)
2022-04-28 16:01:33 +00:00
2023-06-06 18:56:34 +00:00
Quanto às IDORs que não mudam o estado (leitura), procure por funcionalidades que lidam com informações sensíveis na aplicação. Por exemplo, procure por funcionalidades que lidam com mensagens diretas, informações sensíveis do usuário e conteúdo privado. Considere quais funcionalidades na aplicação usam essas informações e procure por IDORs de acordo.