SoapFormatter analisis contoh kelemahan deserialisasi
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.
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
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,
Lihat definisi antara muka IRemotingFormatter dan ketahui bahawa ia juga mewarisi IFormatter
3.2 Vektor serangan—ActivitySurrogateSelector
Kerana jenis proksi bersiri mesti melaksanakan antara muka System.Runtime.Serialization.ISerializationSurrogate, ISerializationSurrogate berada dalam the Framework ClassLibrary Definisinya adalah seperti berikut:
Kod 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:
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
Angka berikut mentakrifkan kelas PayloadClass untuk melaksanakan antara muka ISerializable, dan kemudian mengisytiharkan koleksi Senarai generik dalam kaedah GetObjectData untuk menerima data jenis bait
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.
Gambar 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.
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.
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.
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
Memandangkan 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-vulnerability
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.
4.2 Pembacaan Fail
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!

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

Artikel ini mengkaji perolehan sistem audit keselamatan operasi. Ia memperincikan kategori tipikal (perkakasan, perisian, perkhidmatan), peruntukan belanjawan (CAPEX, OPEX, Projek, Latihan, Kontingensi), dan kenderaan kontrak kerajaan yang sesuai (GSA SCH

Artikel ini memperincikan tanggungjawab keselamatan penting bagi jurutera DevOps, pentadbir sistem, kakitangan operasi IT, dan kakitangan penyelenggaraan. Ia menekankan mengintegrasikan keselamatan ke dalam semua peringkat SDLC (DevOps), melaksanakan akses yang mantap c

Artikel ini meneroka peranan dan kemahiran yang diperlukan DevOps, keselamatan, dan jurutera operasi IT. Ia memperincikan tugas harian, laluan kerjaya, dan kemahiran teknikal dan lembut yang diperlukan untuk masing -masing, menonjolkan peningkatan kepentingan automasi, c

Artikel ini membezakan sistem audit Keselamatan Operasi (OPSEC) dan Keselamatan Rangkaian (NETSEC). OPSEC memberi tumpuan kepada proses dalaman, akses data, dan tingkah laku pekerja, sementara NETSEC berpusat pada infrastruktur rangkaian dan keselamatan komunikasi. Kunci

Artikel ini mengkaji DevSecops, mengintegrasikan keselamatan ke dalam kitaran hayat pembangunan perisian. Ia memperincikan peranan pelbagai jurutera DevOps, merangkumi seni bina keselamatan, automasi, pengurusan kelemahan, dan tindak balas insiden

Artikel ini mengkaji kemahiran penting untuk kerjaya operasi keselamatan yang berjaya. Ia menyoroti keperluan kepakaran teknikal (keselamatan rangkaian, SIEM, platform awan), kemahiran analisis (analisis data, kecerdasan ancaman), dan kemahiran lembut (CO

DevOps meningkatkan keselamatan operasi dengan mengautomasikan pemeriksaan keselamatan dalam saluran paip CI/CD, menggunakan infrastruktur sebagai kod untuk kawalan yang lebih baik, dan memupuk kerjasama antara pembangunan dan pasukan keselamatan. Pendekatan ini mempercepatkan RULNERABI

Artikel ini butiran keselamatan dan penyelenggaraan (O & M) keselamatan, menekankan pengurusan kelemahan, kawalan akses, pemantauan keselamatan, perlindungan data, dan keselamatan fizikal. Tanggungjawab utama dan strategi mitigasi, termasuk proacti
