# Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net)
{% hint style="success" %}
Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Ця стаття присвячена **розумінню того, як експлуатується гаджет ObjectDataProvider** для отримання RCE та **як** бібліотеки серіалізації **Json.Net та xmlSerializer можуть бути зловживані** з цим гаджетом.
З документації: _клас ObjectDataProvider обгортає та створює об'єкт, який ви можете використовувати як джерело прив'язки_.\
Так, це дивне пояснення, тож давайте подивимося, що ж цікавого є в цьому класі: цей клас дозволяє **обгортати довільний об'єкт**, використовувати _**MethodParameters**_ для **встановлення довільних параметрів**і потім **використовувати MethodName для виклику довільної функції** довільного об'єкта, оголошеного з використанням довільних параметрів.\
Простір імен **System.Windows.Data**, який знаходиться в **PresentationFramework.dll** за адресою `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF`, є місцем, де визначено та реалізовано ObjectDataProvider.
Використовуючи [**dnSpy**](https://github.com/0xd4d/dnSpy), ви можете **переглянути код** класу, який нас цікавить. На зображенні нижче ми бачимо код **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name**
Зверніть увагу, що це не повний код функції `QueryWorker`, але він показує цікаву частину: код **викликає `this.InvokeMethodOnInstance(out ex);`** це рядок, де **викликається встановлений метод**.
Зверніть увагу, що вам потрібно додати як посилання _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll_, щоб завантажити `System.Windows.Data`
Використовуючи попередній експлойт, будуть випадки, коли **об'єкт** буде **десеріалізовано як** екземпляр _**ObjectDataProvider**_ (наприклад, у вразливості DotNetNuke, використовуючи XmlSerializer, об'єкт був десеріалізований за допомогою `GetType`). Тоді **не буде відомо про тип об'єкта, який обгорнутий** в екземплярі _ObjectDataProvider_ (наприклад, `Process`). Ви можете знайти більше [інформації про вразливість DotNetNuke тут](https://translate.google.com/translate?hl=en\&sl=auto\&tl=en\&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F\&sandbox=1).
Цей клас дозволяє **вказати типи об'єктів об'єктів, які інкапсульовані** в даному екземплярі. Отже, цей клас може бути використаний для інкапсуляції об'єкта-джерела (_ObjectDataProvider_) в новий тип об'єкта та надання необхідних властивостей (_ObjectDataProvider.MethodName_ та _ObjectDataProvider.MethodParameters_).\
Це дуже корисно для випадків, як той, що був представлений раніше, оскільки ми зможемо **обернути \_ObjectDataProvider**_\*\* всередині екземпляра \*\*_**ExpandedWrapper** \_ і**коли десеріалізується** цей клас **створить**об'єкт _**OjectDataProvider**_, який **виконає****функцію**, вказану в _**MethodName**_.
На [офіційному веб-сайті](https://www.newtonsoft.com/json) вказано, що ця бібліотека дозволяє **Серіалізувати та десеріалізувати будь-який .NET об'єкт за допомогою потужного JSON-серіалізатора Json.NET**. Отже, якщо ми зможемо **десеріалізувати гаджет ObjectDataProvider**, ми зможемо викликати **RCE**, просто десеріалізуючи об'єкт.
Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)