01WebPages配置项
在 .NET 应用程序中,"webpages:Enabled" 是一个用于启用或禁用 Web 页面功能的配置项。当它的值为 "true" 时,表示启用了 Web 页面功能,允许在应用程序中使用 .cshtml 或 .vbhtml 文件。而当它的值为 "false" 时,表示禁用了 Web 页面功能,应用程序将不支持直接解析.NET Web 页面。
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="webpages:Enabled" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.8"/>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>
这段配置通常出现在 .NET Web 应用程序的 Web.config 文件中.此文件中包含了 <appSettings> 节点,其中定义了一个名为 "webpages:Enabled" 的键,并将其值设置为 "true"。这样,.NET Web 应用在任意目录下均可以直接解析运行cshtml扩展名。
而.NET MVC 框架主流的模板文件cshtml基于Razor 视图引擎,Razor 视图是 MVC 框架中用于呈现 HTML 内容的一种方式,它具有灵活的语法和强大的功能,使开发者能够轻松地将 .NET 代码嵌入到 HTML 中,实现动态生成内容。
另外这段代码还包含了一些其他常见的配置,例如 <compilation> 和 <httpRuntime>,用于指定编译选项和运行时选项。这些配置项在 ASP.NET Web 应用程序中通常也会出现,并且可能会根据应用程序的需求进行调整。
因此在一些实战攻防的场景下有的站点开启了配置,也可以尝试上传cshtml获取webshell。
02相关阅读
到了.NET MVC 3.0时代,微软MVC框架为忠实的粉丝们提供了两种共存的视图引擎,WebForm Engine(.aspx)和 Razor Engine(.cshtml),默认情况下框架从现有 .NET Page页面、Master母版页 和ascx用户控件类型中继承的自定义类型作为视图,引擎的变化直接导致语法发生变化,aspx 中经常使用 <% %>这种代码样例,如果写这段代码的人没有良好的缩进和对齐习惯的话,一段逻辑较为复杂的代码就会堆砌着杂乱无章的<% %>匹配它们就是一件头疼的事情,会让读者望而生畏。而在cshtml中则改为@{ } 这种更为简洁的写法,"@"来标记一段C#代码,并帮我们进行了内部的闭合,并且支持与HTML混写,这种代码编程的风格让人感觉回到了经典的ASP时代, 它们之间的关系如下图
目前只能在 MVC3 或更高版本等支持 Razor 的框架里使用 cshtml,@是Razor中的一个重要符号,它被定义为Razor服务器代码块的开始符号。例如视图中直接写C#代码输出日期
<p>@DateTime.Now.ToString()</p>
而且在Razor视图引擎中我们还可以使用@{code}来定义一段代码块,由于Razor支持代码混写,在代码块中插入HTML、在HTML中插入Razor语句都是可以的,代码如下
@{ var myMessage = "dotnet安全矩阵"; }
<html>
<body>
<p>欢迎关注: @myMessage</p>
</body>
</html>
03实战WebShell
cshtml视图引擎获取外部参数的方式主要有3种,第一种使用传统WebForm窗体的System.Web.HttpContext对象Request方法获取
System.Web.HttpContext.Current.Request["content"]
第二种使用System.Web.Mvc.WebViewPage类的属性HttpContextBase获取
@Context.Request["content"]
第三种还可以直接使用WebPageRenderingBase类定义的虚方法Request获取
Request["content"]
实现Webshell的代码不多,只是在@{}代码块里加上启动进程的功能即可,值传递的方式依旧采用base64编码,访问/ViewPage1.cshtml?content=dGFza2xpc3Q= 即可返回tasklist执行后的结果数据,demo如下
有关工具已发表于星球,师傅们可自行查阅资料。
04视频深度讲解
为了更清晰的说明该配置项开启后带来的风险和危害,我们单独录制一个高清视频深度还原开启和关闭后不同的解析状态,这样更加便于学习和掌握。
05.NET安全知识库学习
为了更清晰的说明该配置项开启后带来的风险和危害,我们为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。只需199元就可以加入我们。
目前dot.Net安全矩阵星球已成为中国.NET安全领域最知名、最活跃的技术知识库之一,从.NET Framework到.NET Core,从Web应用到PC端软件应用,无论您是初学者还是经验丰富的开发人员,都能在这里找到对应的安全指南和最佳实践。
星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。
星球文化始终认为授人以鱼不如授人以渔!加入星球后可以跟星主和嘉宾们一对一提问交流,20+个专题栏目涵盖了点、线、面、体等知识面,助力师傅们快速成长!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。
我们倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。
我们还有一个会员专属的星球陪伴群,加入的成员可以通过在群里提出问题或参与论的方式来与其他成员交流思想和经验。此外还可以通过星球或者微信群私聊向我们进行提问,以获取帮助迅速解决问题。