From 7ff5c0e93a530a6452ddbbf4735ab7a6eeae23ac Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 12 Aug 2024 13:22:07 +0000 Subject: [PATCH] Translated ['pentesting-web/deserialization/README.md'] to ua --- pentesting-web/deserialization/README.md | 86 ++++++++++++------------ 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/pentesting-web/deserialization/README.md b/pentesting-web/deserialization/README.md index 675f8768d..dbc273b7b 100644 --- a/pentesting-web/deserialization/README.md +++ b/pentesting-web/deserialization/README.md @@ -17,18 +17,18 @@ Learn & practice GCP Hacking: **Java Message Service** (**JMS**) API є Java API для обміну повідомленнями, орієнтованим на послуги, для надсилання повідомлень між двома або більше клієнтами. Це реалізація для вирішення проблеми виробника-споживача. JMS є частиною Java Platform, Enterprise Edition (Java EE) і була визначена специфікацією, розробленою в Sun Microsystems, але з тих пір керується Java Community Process. Це стандарт обміну повідомленнями, який дозволяє компонентам додатків на основі Java EE створювати, надсилати, отримувати та читати повідомлення. Це дозволяє зв'язку між різними компонентами розподіленого додатка бути слабо пов'язаним, надійним і асинхронним. (З [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)). +> API **Java Message Service** (**JMS**) є Java API для обміну повідомленнями, орієнтованим на послуги, для надсилання повідомлень між двома або більше клієнтами. Це реалізація для вирішення проблеми виробника-споживача. JMS є частиною Java Platform, Enterprise Edition (Java EE) і була визначена специфікацією, розробленою в Sun Microsystems, але з тих пір керується Java Community Process. Це стандарт обміну повідомленнями, який дозволяє компонентам додатків на основі Java EE створювати, надсилати, отримувати та читати повідомлення. Це дозволяє зв'язку між різними компонентами розподіленого додатку бути слабо пов'язаним, надійним і асинхронним. (З [Wikipedia](https://en.wikipedia.org/wiki/Java\_Message\_Service)). ### Продукти @@ -605,11 +607,11 @@ ObjectInputFilter.Config.setSerialFilter(filter); ### Експлуатація Отже, в основному є **безліч сервісів, які використовують JMS небезпечним чином**. Тому, якщо у вас є **достатні привілеї** для надсилання повідомлень цим сервісам (зазвичай вам знадобляться дійсні облікові дані), ви зможете надіслати **шкідливі об'єкти, серіалізовані, які будуть десеріалізовані споживачем/підписником**.\ -Це означає, що в цій експлуатації всі **клієнти, які будуть використовувати це повідомлення, будуть інфіковані**. +Це означає, що в цій експлуатації всі **клієнти, які будуть використовувати це повідомлення, заразяться**. -Вам слід пам'ятати, що навіть якщо сервіс вразливий (оскільки він небезпечно десеріалізує вхідні дані користувача), вам все ще потрібно знайти дійсні гаджети для експлуатації вразливості. +Вам слід пам'ятати, що навіть якщо сервіс вразливий (оскільки він небезпечно десеріалізує введення користувача), вам все ще потрібно знайти дійсні гаджети для експлуатації вразливості. -Інструмент [JMET](https://github.com/matthiaskaiser/jmet) був створений для **підключення та атаки на ці сервіси, надсилаючи кілька шкідливих об'єктів, серіалізованих за допомогою відомих гаджетів**. Ці експлойти працюватимуть, якщо сервіс все ще вразливий і якщо будь-який з використаних гаджетів знаходиться всередині вразливого додатка. +Інструмент [JMET](https://github.com/matthiaskaiser/jmet) був створений для **підключення та атаки на ці сервіси, надсилаючи кілька шкідливих об'єктів, серіалізованих за допомогою відомих гаджетів**. Ці експлойти працюватимуть, якщо сервіс все ще вразливий і якщо будь-який з використаних гаджетів знаходиться всередині вразливого додатку. ### Посилання @@ -618,7 +620,7 @@ ObjectInputFilter.Config.setSerialFilter(filter); ## .Net -У контексті .Net експлойти десеріалізації працюють аналогічно тим, що зустрічаються в Java, де гаджети експлуатуються для виконання конкретного коду під час десеріалізації об'єкта. +У контексті .Net експлойти десеріалізації працюють подібно до тих, що зустрічаються в Java, де гаджети експлуатуються для виконання конкретного коду під час десеріалізації об'єкта. ### Відбиток @@ -629,7 +631,7 @@ ObjectInputFilter.Config.setSerialFilter(filter); 1. `TypeNameHandling` 2. `JavaScriptTypeResolver` -Увага повинна бути зосереджена на серіалізаторах, які дозволяють визначити тип за змінною під контролем користувача. +Основна увага повинна бути зосереджена на серіалізаторах, які дозволяють визначити тип за змінною під контролем користувача. #### BlackBox @@ -639,20 +641,20 @@ ObjectInputFilter.Config.setSerialFilter(filter); У цьому випадку ви можете використовувати інструмент [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) для **створення експлойтів десеріалізації**. Після завантаження репозиторію git вам слід **скомпілювати інструмент** за допомогою Visual Studio, наприклад. -Якщо ви хочете дізнатися, **як ysoserial.net створює свій експлойт**, ви можете [**перевірити цю сторінку, де пояснюється гаджет ObjectDataProvider + ExpandedWrapper + Json.Net formatter**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md). +Якщо ви хочете дізнатися, **як ysoserial.net створює свій експлойт**, ви можете [**перевірити цю сторінку, де пояснюється гаджет ObjectDataProvider + ExpandedWrapper + Json.Net форматер**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md). Основні параметри **ysoserial.net**: **`--gadget`**, **`--formatter`**, **`--output`** та **`--plugin`.** * **`--gadget`** використовується для вказівки гаджета, який потрібно зловживати (вказати клас/функцію, яка буде зловживатися під час десеріалізації для виконання команд). * **`--formatter`**, використовується для вказівки методу для серіалізації експлойту (вам потрібно знати, яка бібліотека використовується на сервері для десеріалізації корисного навантаження, і використовувати ту ж саму для серіалізації). -* **`--output`** використовується для вказівки, чи хочете ви отримати експлойт у **сирому** або **base64** закодованому вигляді. _Зверніть увагу, що **ysoserial.net** буде **кодувати** корисне навантаження, використовуючи **UTF-16LE** (кодування, що використовується за замовчуванням у Windows), тому, якщо ви отримаєте сирий і просто закодуєте його з консолі Linux, ви можете зіткнутися з деякими **проблемами сумісності кодування**, які завадять експлойту працювати належним чином (в HTB JSON box корисне навантаження працювало як в UTF-16LE, так і в ASCII, але це не означає, що воно завжди буде працювати)._ -* **`--plugin`** ysoserial.net підтримує плагіни для створення **експлойтів для конкретних фреймворків**, таких як ViewState +* **`--output`** використовується для вказівки, чи хочете ви експлойт у **сирому** або **base64** закодованому вигляді. _Зверніть увагу, що **ysoserial.net** буде **кодувати** корисне навантаження, використовуючи **UTF-16LE** (кодування, що використовується за замовчуванням у Windows), тому, якщо ви отримаєте сирий і просто закодуєте його з консолі Linux, ви можете зіткнутися з деякими **проблемами сумісності кодування**, які завадять експлойту працювати належним чином (в HTB JSON box корисне навантаження працювало як в UTF-16LE, так і в ASCII, але це не означає, що воно завжди буде працювати)._ +* **`--plugin`** ysoserial.net підтримує плагіни для створення **експлойтів для конкретних фреймворків**, таких як ViewState. #### Більше параметрів ysoserial.net -* `--minify` надасть **менше корисне навантаження** (якщо можливо) -* `--raf -f Json.Net -c "anything"` Це вказуватиме всі гаджети, які можна використовувати з наданим форматором (`Json.Net` у цьому випадку) -* `--sf xml` ви можете **вказати гаджет** (`-g`) і ysoserial.net буде шукати формати, що містять "xml" (без урахування регістру) +* `--minify` надасть **менше корисне навантаження** (якщо це можливо) +* `--raf -f Json.Net -c "anything"` Це вказуватиме всі гаджети, які можна використовувати з наданим форматером (`Json.Net` у цьому випадку) +* `--sf xml` ви можете **вказати гаджет** (`-g`), і ysoserial.net шукатиме форматери, що містять "xml" (без урахування регістру) **Приклади ysoserial** для створення експлойтів: ```bash @@ -699,8 +701,8 @@ TypeNameHandling = TypeNameHandling.Auto return obj; } ``` -In the **попередньому коді є вразливість до створеного експлойту**. Тож, якщо ви знайдете щось подібне в .Net додатку, це означає, що, ймовірно, цей додаток також вразливий.\ -Отже, **параметр `--test`** дозволяє нам зрозуміти, **які частини коду є вразливими** до експлойту десеріалізації, який **може створити ysoserial.net**. +У **попередньому коді є вразливість до створеного експлойту**. Тож, якщо ви знайдете щось подібне в .Net додатку, це означає, що, ймовірно, цей додаток також вразливий.\ +Отже, параметр **`--test`** дозволяє нам зрозуміти, **які частини коду вразливі** до експлойту десеріалізації, який може створити **ysoserial.net**. ### ViewState @@ -714,9 +716,9 @@ In the **попередньому коді є вразливість до ств * **Для `JSON.Net` встановіть `TypeNameHandling` на `None`:** %%%TypeNameHandling = TypeNameHandling.None%%% * **Уникайте використання `JavaScriptSerializer` з `JavaScriptTypeResolver`.** * **Обмежте типи, які можуть бути десеріалізовані**, розуміючи вроджені ризики з типами .Net, такими як `System.IO.FileInfo`, які можуть змінювати властивості файлів сервера, що потенційно призводить до атак відмови в обслуговуванні. -* **Будьте обережні з типами, які мають ризиковані властивості**, такими як `System.ComponentModel.DataAnnotations.ValidationException` з його властивістю `Value`, яка може бути експлуатована. +* **Будьте обережні з типами, що мають ризиковані властивості**, такими як `System.ComponentModel.DataAnnotations.ValidationException` з його властивістю `Value`, яка може бути експлуатована. * **Надійно контролюйте інстанціювання типів**, щоб запобігти впливу зловмисників на процес десеріалізації, що робить навіть `DataContractSerializer` або `XmlSerializer` вразливими. -* **Впровадьте контролі білого списку** за допомогою кастомного `SerializationBinder` для `BinaryFormatter` та `JSON.Net`. +* **Впровадьте контролі білого списку** за допомогою кастомного `SerializationBinder` для `BinaryFormatter` і `JSON.Net`. * **Будьте в курсі відомих небезпечних гаджетів десеріалізації** в .Net і переконайтеся, що десеріалізатори не інстанціюють такі типи. * **Ізолюйте потенційно ризикований код** від коду з доступом до Інтернету, щоб уникнути експонування відомих гаджетів, таких як `System.Windows.Data.ObjectDataProvider` в WPF додатках, до ненадійних джерел даних. @@ -731,7 +733,7 @@ In the **попередньому коді є вразливість до ств У Ruby серіалізація здійснюється за допомогою двох методів у бібліотеці **marshal**. Перший метод, відомий як **dump**, використовується для перетворення об'єкта в байтовий потік. Цей процес називається серіалізацією. Навпаки, другий метод, **load**, використовується для повернення байтового потоку назад в об'єкт, процес, відомий як десеріалізація. -Для забезпечення безпеки серіалізованих об'єктів **Ruby використовує HMAC (код автентифікації повідомлень на основі хешу)**, що забезпечує цілісність та автентичність даних. Ключ, що використовується для цієї мети, зберігається в одному з кількох можливих місць: +Для забезпечення безпеки серіалізованих об'єктів **Ruby використовує HMAC (Hash-Based Message Authentication Code)**, що забезпечує цілісність і автентичність даних. Ключ, що використовується для цієї мети, зберігається в одному з кількох можливих місць: * `config/environment.rb` * `config/initializers/secret_token.rb` @@ -856,7 +858,7 @@ candidate_methods.length() # Final number of methods=> 3595 Існують інші бібліотеки Ruby, які можна використовувати для серіалізації об'єктів, і тому їх можна зловживати для отримання RCE під час небезпечної десеріалізації. Наступна таблиця показує деякі з цих бібліотек та метод, який вони викликають з завантаженої бібліотеки щоразу, коли вона десеріалізується (функція для зловживання для отримання RCE в основному): -
БібліотекаВхідні даніМетод запуску всередині класу
Marshal (Ruby)Бінарний_load
OjJSONhash (клас потрібно помістити в hash(map) як ключ)
OxXMLhash (клас потрібно помістити в hash(map) як ключ)
Psych (Ruby)YAMLhash (клас потрібно помістити в hash(map) як ключ)
init_with
JSON (Ruby)JSONjson_create ([див. примітки щодо json_create в кінці](#table-vulnerable-sinks))
+
БібліотекаВхідні даніМетод запуску всередині класу
Marshal (Ruby)Бінарні_load
OjJSONhash (клас потрібно помістити в hash(map) як ключ)
OxXMLhash (клас потрібно помістити в hash(map) як ключ)
Psych (Ruby)YAMLhash (клас потрібно помістити в hash(map) як ключ)
init_with
JSON (Ruby)JSONjson_create ([див. примітки щодо json_create в кінці](#table-vulnerable-sinks))
Базовий приклад: ```ruby @@ -880,7 +882,7 @@ puts json_payload # Sink vulnerable inside the code accepting user input as json_payload Oj.load(json_payload) ``` -У випадку спроби зловживання Oj, вдалося знайти клас гаджета, який всередині своєї функції `hash` викликатиме `to_s`, що викликатиме spec, який викликатиме fetch\_path, що дозволяло змусити його отримати випадкову URL-адресу, надаючи чудовий детектор таких незахищених вразливостей десеріалізації. +У випадку спроби зловживання Oj, вдалося знайти клас гаджета, який всередині своєї функції `hash` викликає `to_s`, що викликає spec, який викликає fetch\_path, що дозволяло зробити так, щоб він отримував випадкову URL-адресу, надаючи чудовий детектор таких незахищених вразливостей десеріалізації. ```json { "^o": "URI::HTTP", @@ -889,7 +891,7 @@ Oj.load(json_payload) "port": "anyport","path": "/", "user": "anyuser", "password": "anypw" } ``` -Більше того, було виявлено, що за допомогою попередньої техніки в системі також створюється папка, що є вимогою для зловживання іншим гаджетом, щоб перетворити це на повноцінний RCE з чимось на кшталт: +Крім того, було виявлено, що за допомогою попередньої техніки в системі також створюється папка, що є вимогою для зловживання іншим гаджетом, щоб перетворити це на повноцінний RCE з чимось на кшталт: ```json { "^o": "Gem::Resolver::SpecSpecification", @@ -923,7 +925,7 @@ Oj.load(json_payload) * Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)! * **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. +* **Діліться хакерськими трюками, подаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github. {% endhint %}