hacktricks/pentesting-web/reset-password.md

226 lines
12 KiB
Markdown

# 비밀번호 재설정/잊어버린 비밀번호 우회
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 제로부터 전문가까지 배우세요</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)**에 가입하거나 [텔레그램 그룹](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
경험 많은 해커 및 버그 바운티 헌터와 소통하려면 [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하세요!
**해킹 통찰력**\
해킹의 스릴과 도전에 대해 탐구하는 콘텐츠와 상호 작용
**실시간 해킹 뉴스**\
빠르게 변화하는 해킹 세계의 실시간 뉴스와 통찰력을 유지하세요
**최신 공지**\
출시되는 최신 버그 바운티 및 중요한 플랫폼 업데이트에 대해 정보를 얻으세요
**우리와 함께** [**디스코드**](https://discord.com/invite/N3FrSbmwdy)에 가입하여 오늘 최고의 해커들과 협업을 시작하세요!
## **Referrer를 통한 비밀번호 재설정 토큰 누출**
* HTTP referer 헤더는 URL에 포함된 경우 비밀번호 재설정 토큰을 누출할 수 있습니다. 이는 사용자가 비밀번호 재설정을 요청한 후 제3자 웹사이트 링크를 클릭할 때 발생할 수 있습니다.
* **영향**: Cross-Site Request Forgery (CSRF) 공격을 통한 잠재적인 계정 탈취.
* **악용**: 비밀번호 재설정 토큰이 referer 헤더에 누출되는지 확인하려면 이메일 주소로 **비밀번호 재설정을 요청**하고 제공된 **재설정 링크를 클릭**하세요. 즉시 비밀번호를 변경하지 마세요. 대신 **Burp Suite를 사용하여 요청을 가로채는 동안 제3자 웹사이트** (예: Facebook 또는 Twitter)로 이동하세요. 요청을 검사하여 referer 헤더에 비밀번호 재설정 토큰이 포함되어 있는지 확인하면 이는 민감한 정보를 제3자에게 노출시킬 수 있습니다.
* **참고**:
* [HackerOne 보고서 342693](https://hackerone.com/reports/342693)
* [HackerOne 보고서 272379](https://hackerone.com/reports/272379)
* [비밀번호 재설정 토큰 누출 기사](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
## **비밀번호 재설정 독려**
* 공격자는 비밀번호 재설정 요청 중 Host 헤더를 조작하여 재설정 링크를 악성 사이트로 지정할 수 있습니다.
* **영향**: 공격자에게 재설정 토큰을 누출하여 잠재적인 계정 탈취로 이어집니다.
* **완화 조치**:
* 허용된 도메인의 허용 목록에 대해 Host 헤더를 유효성 검사합니다.
* 안전하고 서버 측 방법을 사용하여 절대 URL을 생성합니다.
* **패치**: `$_SERVER['HTTP_HOST']` 대신 `$_SERVER['SERVER_NAME']`을 사용하여 비밀번호 재설정 URL을 구성합니다.
* **참고**:
* [비밀번호 재설정 독려에 대한 Acunetix 기사](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **이메일 매개변수 조작을 통한 비밀번호 재설정**
공격자는 추가적인 이메일 매개변수를 추가하여 비밀번호 재설정 요청을 조작할 수 있습니다.
* 공격자 이메일을 두 번째 매개변수로 추가하세요.
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
* 공격자 이메일을 두 번째 매개변수로 %20을 사용하여 추가합니다.
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
* 두 번째 매개변수로 공격자 이메일을 추가하십시오. 사용 방법: |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
* 공격자 이메일을 두 번째 매개변수로 추가하고 cc를 사용합니다.
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
* 공격자 이메일을 두 번째 매개변수로 bcc에 추가합니다.
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
* 두 번째 매개변수로 공격자 이메일을 추가합니다. 사용 방법: ,
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
* 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)
* [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)
## **API 매개변수를 통한 사용자의 이메일 및 비밀번호 변경**
* 공격자는 API 요청에서 이메일 및 비밀번호 매개변수를 수정하여 계정 자격 증명을 변경할 수 있습니다.
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
* **방지 조치**:
* 엄격한 매개변수 유효성 검사 및 인증 확인 보장.
* 의심스러운 활동을 감지하고 대응하기 위해 강력한 로깅 및 모니터링 구현.
* **참고**:
* [API 매개변수 조작을 통한 완전한 계정 탈취](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **비율 제한 없음: 이메일 폭격**
* 비밀번호 재설정 요청에 대한 비율 제한 부족은 이메일 폭격으로 이어질 수 있어 사용자가 재설정 이메일로 압도될 수 있음.
* **방지 조치**:
* IP 주소 또는 사용자 계정을 기반으로 한 비율 제한 구현.
* 자동 남용을 방지하기 위해 CAPTCHA 도전을 사용.
* **참고**:
* [해커원 보고서 280534](https://hackerone.com/reports/280534)
## **비밀번호 재설정 토큰 생성 방법 파악**
* 토큰 생성 뒤의 패턴 또는 방법을 이해하면 토큰을 예측하거나 브루트 포스할 수 있음. 몇 가지 옵션:
* 타임스탬프 기반
* 사용자 ID 기반
* 사용자 이메일 기반
* 이름 및 성 기반
* 생년월일 기반
* 암호화 기반
* **방지 조치**:
* 토큰 생성에 강력한, 암호화 방법 사용.
* 예측 가능성을 방지하기 위해 충분한 무작위성과 길이 보장.
* **도구**: 토큰의 무작위성을 분석하기 위해 Burp Sequencer 사용.
## **추측 가능한 UUID**
* UUID(버전 1)가 추측 가능하거나 예측 가능하면 공격자가 유효한 재설정 토큰을 생성하기 위해 브루트 포스할 수 있음. 확인:
{% content-ref url="uuid-insecurities.md" %}
[uuid-insecurities.md](uuid-insecurities.md)
{% endcontent-ref %}
* **방지 조치**:
* 무작위성을 위해 GUID 버전 4 사용 또는 다른 버전에 대한 추가적인 보안 조치 구현.
* **도구**: [guidtool](https://github.com/intruder-io/guidtool)을 사용하여 GUID 생성 및 분석.
## **응답 조작: 나쁜 응답을 좋은 것으로 대체**
* HTTP 응답을 조작하여 오류 메시지나 제한을 우회.
* **방지 조치**:
* 응답 무결성을 보장하기 위해 서버 측 검사 구현.
* 중간자 공격을 방지하기 위해 HTTPS와 같은 안전한 통신 채널 사용.
* **참고**:
* [실시간 버그 바운티 이벤트에서의 심각한 버그](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **만료된 토큰 사용**
* 만료된 토큰이 여전히 비밀번호 재설정에 사용될 수 있는지 테스트.
* **방지 조치**:
* 엄격한 토큰 만료 정책을 구현하고 서버 측에서 토큰 만료를 확인.
## **브루트 포스 비밀번호 재설정 토큰**
* Burpsuite 및 IP-Rotator와 같은 도구를 사용하여 재설정 토큰을 브루트 포스 시도하여 IP 기반 비율 제한을 우회.
* **방지 조치**:
* 강력한 비율 제한 및 계정 잠금 메커니즘 구현.
* 브루트 포스 공격을 나타내는 의심스러운 활동을 모니터링.
## **토큰 사용 시도**
* 공격자의 재설정 토큰이 피해자의 이메일과 함께 사용될 수 있는지 테스트.
* **방지 조치**:
* 토큰이 사용자 세션 또는 다른 사용자별 속성에 바인딩되도록 보장.
## **로그아웃/비밀번호 재설정에서 세션 무효화**
* 사용자가 로그아웃하거나 비밀번호를 재설정할 때 세션이 무효화되도록 보장.
* **방지 조치**:
* 모든 세션이 로그아웃하거나 비밀번호 재설정 시 무효화되도록 적절한 세션 관리 구현.
## **로그아웃/비밀번호 재설정에서 세션 무효화**
* 재설정 토큰은 만료 시간이 지난 후에는 무효화되어야 함.
* **방지 조치**:
* 재설정 토큰에 합리적인 만료 시간 설정 및 서버 측에서 엄격히 시행.
## 참고 자료
* [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)
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) 서버에 가입하여 경험 많은 해커 및 버그 바운티 헌터들과 소통하세요!
**해킹 통찰**\
해킹의 즐거움과 도전에 대해 탐구하는 콘텐츠와 상호 작용
**실시간 해킹 뉴스**\
실시간 뉴스와 통찰을 통해 빠르게 변화하는 해킹 세계를 따라가세요
**최신 공지**\
최신 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아보세요
**[Discord](https://discord.com/invite/N3FrSbmwdy)**에서 최고의 해커들과 협업을 시작하세요!
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)로부터 AWS 해킹을 처음부터 전문가까지 배우세요</strong></summary>
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 PDF로 다운로드하려면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
</details>