蓝盟IT外包,在.NET中隐藏具有只读Web路径的web  shell

发布者:上海IT外包来源:http://www.lanmon.net点击数:1920


在最近的渗透测试中,我们找到了容易受到CVE-2020-1147影响的SharePoint实例。 为了避免可能部署到主机上的EDR解决方案,系统要求您在不执行命令的情况下构建web  shell。 由于目标SharePoint服务器在IUSR用户下以最小的特权运行,因此无法利用反序列化漏洞(CVE-2020-1147 )在Web目录中轻松创建web  shell。 我记得以前运行PowerShell命令时,很容易发现攻击,所以需要更隐蔽的方法!
本文介绍了在代码执行漏洞但Web目录不可写的情况下如何创建web  shell。 理论上,由于代码在Web应用程序中运行,我们考虑了以下两个解决方案。
使用C#创建全面的web  shell

我最喜欢使用web  shell,但大部分强大的. NET是HTML和C#代码的混合体。 因此,清理这些代码并将其作为纯C#代码执行是非常困难和耗时的。 我的解决方案是使用aspnet_compiler命令从其临时编译文件中获取aspx  web  shell的C#代码。


另一个问题是,如果您想与嵌入式web  shell进行交互,当易受攻击的页面和web  shell想要完全不同的HTTP请求时,可能需要使用易受攻击的功能,并且完全不适用。 因此,URL和正文的所有web  shell相关参数和HTTP动词、内容类型、Cookie和其他自定义标头在使用代码执行后,必须以某种方式封装,以便在服务器端重新创建。 自定义JavaScript代码可以处理某些封装任务,但捕获HTTP请求的所有必要方面可能并不容易。 因此,使用代理处理请求似乎是更好、更简单的方法。 例如,可以编写Burp  Suite扩展程序,通过使用代码执行问题来捕获对第一个加载的web  shell的所有请求。 此扩展将web  shell参数封装在使用代码发送来执行问题的HTTP请求的标头中。 标头的使用可能会受到限制。 特别是当web  shell请求包含大参数(例如,上载文件)时。 但是,代理替换字符串确保了服务器端可以重新创建具有HTTP正文、内容类型、HTTP动词、URL参数等适当参数的预期HTTP请求,以使web  shell正常工作。 请注意,允许在反射写入中使用HTTP请求的只读参数(例如表单参数)是非常容易的。 另一个重要的是清除在运行web  shell代码之前可能创建的HTTP响应。 此外,为了防止意外数据干扰来自web  shell的预期响应,需要在执行web  shell后结束响应这个技术看起来是可行的,但很复杂,每次操作都需要向服务器发送大量的web请求,以降低潜在的发现风险,所以我没有使用它。
恶意使用. NET虚拟路径提供程序创建虚拟文件(ghost文件)
. NET允许您定义虚拟路径,以向文件系统以外的存储源提供虚拟文件。 此功能非常强大,因为它也可以用来替换缓存或未编译的现有文件。 这意味着通过替换现有的. NET文件(例如. aspx、 svc、 ashx、 asmx等)来显示攻击者的期望内容,也有助于钓鱼和其他系统攻击。 SharePoint本身也用同样的方法创建ghost页面和非托管页面!
该解决方案对测试器来说具有最小的复杂性,因为它可以将web  shell直接嵌入初始漏洞利用代码中。 YSoSerial.Net项目的GhostWebShell.cs文件显示了为在易受攻击的Web应用程序中运行web  shell而创建的代码。

要使用此代码,可以对webshellContentsBase64参数中的web  shellcontsbase文件的内容进行base-64编码。 webshellType参数包括web  shell扩展,targetVirtualPath参数包括在服务器上创建的虚拟路径。 请不要更改这些参数以外的参数。 如果需要更多的自定义,代码中的注释就足够了。

文/上海蓝盟  IT外包专家

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部