渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

  • A+
所属分类:安全文章

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x00 前言

通过ASP.NET的VirtualPathProvider类能够创建虚拟文件,实现以下效果:虚拟文件不存在于服务器的文件系统,但是能够对其动态编译并提供访问服务。ysoserial.net的GhostWebShell.cs提供了一种可供学习的利用思路。

本文将要介绍虚拟文件的利用方法,在ysoserial.net的GhostWebShell.cs基础上介绍Exchange下的利用方法,开源代码,记录细节,给出防御建议。

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x01 简介

本文将要介绍以下内容:

· VirtualPathProvider在Exchange下的利用

· DotNet反序列化在Exchange下的利用

· 防御检测

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x02 VirtualPathProvider在Exchange下的利用

参考资料:

https://docs.microsoft.com/en-us/dotnet/api/system.web.hosting.virtualpathprovider?view=netframework-4.8

在实现上需要继承VirtualPathProvider类并重写两个方法:FileExists和GetFile,注册VirtualPathProvider并创建实例后,实现虚拟文件的创建

示例代码:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

通过这种方式实现的Webshell,虽然能够隐藏真实的文件内容,但是需要依赖文件,容易被清除,隐蔽性不够。

而利用ysoserial.net的GhostWebShell.cs恰恰能够解决这个问题,提高隐蔽性。

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x03 DotNet反序列化的利用

参考代码:

https://github.com/pwntester/ysoserial.net/blob/master/ExploitClass/GhostWebShell.cs

测试环境:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

对于这两个位置的.Net反序列化命令执行,不再需要合法用户的凭据。

这里选择%ExchangeInstallPath%FrontEndHttpProxyowaautherrorFE.aspx,对应的generator为042A94E8

使用ysoserial.net生成ViewState的参数如下:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

使用如下代码发送ViewState:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

一句话的测试代码:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

使用AntSword连接时,需要设置HTTP HEADERS,内容如下:

Name:  Value

Value: 00HGAT3K0AXHV2RF2W0G

Base64后的字符为:

PCVAIFBhZ2UgTGFuZ3VhZ2U9IkpzY3JpcHQiJT48JQppZihSZXF1ZXN0LkhlYWRlcnNbIlZhbHVlIl09PSIwMEhHQVQzSzBBWEhWMlJGMlcwRyIpCnsKZXZhbChSZXF1ZXN0Lkl0ZW1bImFudHN3b3JkIl0sInVuc2FmZSIpOwkKfQplbHNlCnsKUmVzcG9uc2UuUmVkaXJlY3QoIi9vd2EvYXV0aC9lcnJvckZFLmFzcHg/aHR0cENvZGU9NDA0Iik7Cn0KJT4=

替换GhostWebShell.cs中的webshellContentsBase64。

完整的Python实现代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/ExchangeDeserializeShell-NoAuth-ghostfile.py

代码支持两个位置的反序列化执行,分别为默认存在的文件%ExchangeInstallPath%FrontEndHttpProxyowaautherrorFE.aspx和%ExchangeInstallPath%FrontEndHttpProxyecpauthTimeoutLogout.aspx,能够自动生成带有Webshell功能的GhostWebShell.cs,使用ysoserial.net生成ViewState并发送。

完整的C#实现代码已上传至github,地址如下:

https://github.com/3gstudent/Homework-of-C-Sharp/blob/master/SharpExchangeDeserializeShell-NoAuth-ghostfile.cs

代码功能同上,可直接编译并执行,不再依赖ysoserial.net

注:

为了便于在Exchange下进行测试,我将GhostWebShell.cs修改成了aspx文件,可以直接访问进行测试,代码地址如下:

https://github.com/3gstudent/test/blob/master/PageLoad_ghostfile.aspx

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x04 防御检测

利用虚拟文件创建的ASP.NET Webshell,不再需要写入aspx文件,在防御上可监控临时目录下产生的编译文件,默认位置:

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

需要注意的是攻击者在产生编译文件后可以进行删除。

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
0x05 小结

本文介绍了虚拟文件的利用方法,针对Exchange环境,分别介绍了VirtualPathProvider和DotNet反序列化的利用,给出防御建议。

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

本文始发于微信公众号(嘶吼专业版):渗透技巧——利用虚拟文件隐藏ASP.NET Webshell

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: