Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  SoapFormatter analisis contoh kelemahan deserialisasi

SoapFormatter analisis contoh kelemahan deserialisasi

WBOY
WBOYke hadapan
2023-05-14 09:07:051895semak imbas

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. SoapFormatterSerialization

Kaedah Serialize teras ditakrifkan dalam antara muka IFormatter yang dilaksanakan oleh kelas SoapFormatter, yang boleh sangat mudah dilaksanakan untuk penukaran antara objek .NET dan aliran SOAP, data boleh disimpan sebagai fail XML. Pegawai menyediakan dua kaedah pembinaan.

SoapFormatter analisis contoh kelemahan deserialisasi

Berikut ialah kes lama untuk menggambarkan masalah Mula-mula tentukan objek TestClass

mentakrifkan tiga ahli dan melaksanakan satu. kaedah statik ClassMethod memulakan proses. Serialisasi memberikan nilai kepada ahli dengan membuat kejadian objek masing-masing

SoapFormatter analisis contoh kelemahan deserialisasi

Biasanya, Serialize digunakan untuk mendapatkan aliran SOAP bersiri, dan program asal diteruskan oleh. menggunakan ruang nama XML. Sebagai contoh, elemen permulaan kelas TestClass dalam rajah di bawah layak menggunakan xmlns yang dijana, memfokuskan pada ruang nama a1

<envelope>

<body>

<testclass>

<classname>360</classname>

<name>Ivan1ee</name>

<age>18</age>

</testclass>

</body>


</envelope>

3. SoapFormatter deserialisasi

3.1 Prinsip dan penggunaan penyahserikatan

Proses penyahserialisasian kelas SoapFormatter adalah untuk menukar aliran mesej SOAP kepada objek, yang dicapai dengan memanggil berbilang kaedah terlebih beban Deserialize dengan mencipta objek baharu ketahui bahawa antara muka IRemotingFormatter dan IFormatter dilaksanakan,

SoapFormatter analisis contoh kelemahan deserialisasi

Lihat definisi antara muka IRemotingFormatter dan ketahui bahawa ia juga mewarisi IFormatter

3.2 Vektor serangan—ActivitySurrogateSelectorSoapFormatter analisis contoh kelemahan deserialisasi

Selain pembina, takrif kelas SoapFormatter juga mempunyai atribut SurrogateSelector dan SurrogateSelector ialah pemilih proksi . Faedah proksi bersiri ialah apabila pemformat mahu menyahsiri tika jenis sedia ada, ia memanggil kaedah yang disesuaikan oleh objek proksi. Semak bahawa antara muka ISurrogateSelector dilaksanakan, ditakrifkan seperti berikut

SoapFormatter analisis contoh kelemahan deserialisasi

Kerana jenis proksi bersiri mesti melaksanakan antara muka System.Runtime.Serialization.ISerializationSurrogate, ISerializationSurrogate berada dalam the Framework ClassLibrary Definisinya adalah seperti berikut:


SoapFormatter analisis contoh kelemahan deserialisasi


SoapFormatter analisis contoh kelemahan deserialisasiKod menentukan sama ada Atribut IsSerializable bagi jenis parser tersedia Jika kelas asas langsung tersedia untuk dikembalikan, jika tidak tersedia, dapatkan jenis kelas terbitan System.Workflow.ComponentModel.Serialization.ActivitySurrogateSelector, kemudian berikannya kepada Activator untuk mencipta contoh. , dan kemudian kembali ke badan kaedah GetObjectData Selain itu, untuk mengawal sepenuhnya data bersiri, Anda perlu melaksanakan antara muka Serialization.ISeralizable, yang ditakrifkan seperti berikut:

SoapFormatter analisis contoh kelemahan deserialisasi

Untuk maklumat lanjut, sila rujuk ".NET Advanced Code Audit Lesson 2 Json.Net Deserialisasi Kerentanan" , apabila melaksanakan kelas penyahserikatan tersuai, baca kelas PocClass yang disediakan oleh penyerang melalui kaedah pembinaan SoapFormatter analisis contoh kelemahan deserialisasi

SoapFormatter analisis contoh kelemahan deserialisasi

Angka berikut mentakrifkan kelas PayloadClass untuk melaksanakan antara muka ISerializable, dan kemudian mengisytiharkan koleksi Senarai generik dalam kaedah GetObjectData untuk menerima data jenis bait

SoapFormatter analisis contoh kelemahan deserialisasi

Tambahkan objek PocClass pada koleksi Senarai, isytiharkan jenis generik dan gunakan IEnumerable collection map_type untuk menerima Jenis yang diperolehi oleh pantulan pemasangan dan kembalikan jenis IEnumerable Akhir sekali, gunakan Activator.CreateInstance untuk buat contoh dan simpan ke e3 Ini adalah koleksi penghitungan.

SoapFormatter analisis contoh kelemahan deserialisasiGambar di atas mengisi pembolehubah e3 ke dalam sumber data kawalan paging. Semak definisi kelas PageDataSource untuk melihatnya dengan jelas >
Kecuali Selain itu, jenis yang dikembalikan oleh System.Runtime.Remoting.Channels.AggregateDictionary menyokong IDictionary, dan kemudian membuat instantiat objek DesignerVerb dan memberikan nilai sesuka hati Kelas ini digunakan terutamanya untuk mengisi nilai daripada atribut sifat kelas MenuCommand, dan akhirnya baldi yang layak dalam jadual cincang.

SoapFormatter analisis contoh kelemahan deserialisasi


Seterusnya, gunakan koleksi untuk menambah sumber data DataSet dan objek DataTable yang diwarisi daripada kelas System.ComponentModel.MarshalByValueComponent, yang boleh menyerikan data dan. menyokong pemprosesan jauh antara muka ISerializable , yang merupakan satu-satunya objek di antara objek ADO.NET yang menyokong pengalihan jauh dan dikekalkan dalam format binari.

SoapFormatter analisis contoh kelemahan deserialisasi


Tukar nilai DataSet.RemotingFormat kepada SerializationFormat.Binary, tukar harta DataSet.CaseSensitive kepada false, dsb., dan kemudian panggil BinaryFormatter untuk menyerikan Senarai koleksi, seperti yang ditunjukkan di bawah.

SoapFormatter analisis contoh kelemahan deserialisasi


Oleh kerana atribut RemotingFormat ditentukan sebagai Binari, pemformat BinaryFormatter diperkenalkan dan ejen SurrogateSelector atribut ditentukan sebagai kelas MySurrogateSelector tersuai. Selepas bersiri, SOAP-XML diperoleh, dan kemudian kaedah Deserialize objek SoapFormatter digunakan untuk menghuraikan data strim kandungan fail baca, dan kalkulator berjaya muncul

SoapFormatter analisis contoh kelemahan deserialisasi


SoapFormatter analisis contoh kelemahan deserialisasi

3.3 Attack Vector—PSObject

SoapFormatter analisis contoh kelemahan deserialisasiMemandangkan hos Windows pengarang telah ditampal dengan CVE-2017-8565 (Kerentanan Pelaksanaan Kod Jauh Windows PowerShell ), eksploitasi itu tidak berjaya, jadi inilah Tanpa perbincangan lanjut, rakan-rakan yang berminat boleh membuat kajian sendiri. Untuk mendapatkan maklumat terperinci tentang tampung, sila rujuk: https://support.microsoft.com/zh-cn/help/4025872/windows-powershell-remote-code-execution-vulnerabilitySoapFormatter analisis contoh kelemahan deserialisasi

4

4.1

Pemuatan XML

Cari EntryPoint kerentanan dari perspektif audit kod, masukkan XML, dan ia boleh dinyahsiri . Kaedah ini juga Ia sangat biasa dan memerlukan perhatian LoadXml secara langsung memuatkan data xml. Contohnya, kod ini:


Kos serangan bagi kerentanan titik pencemaran jenis ini adalah sangat rendah Penyerang hanya perlu mengawal sumber parameter rentetan masuk mudah mencapai penyahserikatan. Eksploitasi kelemahan dan timbulkan kalkulator.

SoapFormatter analisis contoh kelemahan deserialisasi

4.2 Pembacaan Fail

SoapFormatter analisis contoh kelemahan deserialisasi

Ini adalah coretan kod yang diambil daripada aplikasi semasa audit, hanya Anda perlukan untuk memberi perhatian sama ada pembolehubah laluan yang diluluskan dalam kaedah DeserializeSOAP boleh dikawal.

Atas ialah kandungan terperinci SoapFormatter analisis contoh kelemahan deserialisasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam