快捷搜索:  网络  CVE  渗透  后门  扫描  木马  黑客  as

探索基于.NET下完成一句话木马之Asmx篇

0×01 媒介

上篇先容了一般处理程序(ashx)的工作道理和完成一句话木马的过程,今天接着先容Web Service程序(asmx)下的工作道理以及怎么样完成一句话木马,当然先容之前笔者找到了一款asmx马儿 https://github.com/tennc/webshell/blob/master/caidao-shell/customize.asmx ,依旧是一个大马以下图:

探索基于.NET下实现一句话木马之Asmx篇

这个还只是对客户端的菜刀做了适配可用,暂时不相符一句话木马的特点哈,至于要打造一款居家旅行必备的菜刀马,还得从道理上弄清楚 asmx的运行过程。 

0×02 简介以及道理

Web Service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,无线黑客,也是一种web服务,Web Service的首要目标是跨平台的可互操作性,为了完成这一目标Web Service 完全基于XML(可扩大标记说话)、XSD(XML Schema)等自力于平台、自力于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。简单的来说Web Service具备三个要素SOAP(Simple Object Access Protocol)、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, SOAP用来描摹传递信息的格式, WSDL 用来描摹怎么样走访详细的接口, UDDI用来治理,分发查询webService ,也因此使用Web Service有许多优点,例如可以跨平台工作、部署升级珍爱起来简单方便、完成多数据多个服务的聚合使用等等。再结合下图说明一下WebService工作的流程

探索基于.NET下实现一句话木马之Asmx篇

无论使用什么工具、说话编写WebService,都可以使用 SOAP 协定通过 HTTP调用,创建 WebService 后,任何说话、平台的客户都可以涉猎 WSDL 文档来调用 WebService ,同时客户端也能够根据 WSDL 描摹文档生成一个 SOAP 要求信息并发送到Web服务器,Web服务器再将要求转发给WebService 要求处理器。

对于.Net而言,WebService要求处理器则是一个 .NET Framework 自带的 ISAPI Extension。Web要求处理器用于解析收到的SOAP要求,调用 WebService,然后生成相应的SOAP应对。Web服务器得到SOAP应对后,在通过HTTP应对的方式将其返归给客户端,但WebService也支持HTTP POST要求,仅需要在服务端增添一项设置即可。

0×03 一句话的完成

3.一、WebMethod

在Web Service程序中,要是一个公共要领想被外界走访调用的话,就需要加上WebMethod,加上[WebMethod]属性的公有要领就可以被走访,而没有加这个属性的要领就是不能被走访的。将 WebMethod 属性 (Attribute) 附加到 Public 要领表示希翼将该要领地下为 XML Web services 的一部分,它具备6个属性:Description 、EnableSession、MessageName、TransactionOption、CacheDuration、BufferResponse,为了更清晰的表述WebService请看下面这段代码

探索基于.NET下实现一句话木马之Asmx篇

客户端预览后

探索基于.NET下实现一句话木马之Asmx篇

这里声明成一个字符串类型的公共要领HelloWorld,要是此时在要领体内完成创建aspx文件,保存内容为一句话小马的话那么这个WebService就变成了服务后门,遵照这个推理就产生了C#版本的WebService小马,完成了两个功能,一个是创建文件,还有一个是执行CMD命令,核心代码以下: 

探索基于.NET下实现一句话木马之Asmx篇探索基于.NET下实现一句话木马之Asmx篇小马运行后执行whoami命令以后以默认XML格式归显数据,以下图 

探索基于.NET下实现一句话木马之Asmx篇

知道道理后就最先着手打造菜刀可用的一句话木马,以及一般处理程序类似通过Jscript.Net的eval要领去完成代码执行,前文有提到WebMethod存在多个属性且根据微软的官方文档 https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-1.1/1tyazy68%28v%3dvs.80%29 可以得出Jscript.Net中可以使用WebMethodAttribute 来替换[WebMethod]。

一句话完成的代码以下:

探索基于.NET下实现一句话木马之Asmx篇关上阅读器,测试结果以下 

探索基于.NET下实现一句话木马之Asmx篇

笔者遵照SOAP1.1的规范请求,发送要求的数据包就可以完成一句话代码执行,这里照样拿当前的日期时间作为攻击载荷,以下图 

探索基于.NET下实现一句话木马之Asmx篇

3.2、ScriptMethod

在探索WebMethod的时辰,发现VisualStudio有段注释以下图

探索基于.NET下实现一句话木马之Asmx篇当客户端要求的方式是AJAX的时辰会导入System.Web.Script.Services.ScriptService命名空间,笔者尝试去挖掘一下可能存在的新的攻击点 

探索基于.NET下实现一句话木马之Asmx篇

代码里ResponseFormat表示要领要返归的类型,通常是Json或者XML; UseHttpGet等于true表示前台的ajax是通过GET可以走访此要领,要是前台ajax通过POST,则报错。

根据C#中的代码可知需要设置WebMethod以及ScriptMethod才能正常玩转,而在Jscript.Net中完成这两个功能的分类是WebMethodAttribute类以及ScriptMethodAttribute类,终极

写出一句话木马服务端代码:

探索基于.NET下实现一句话木马之Asmx篇客户端输入 Response.Write(DateTime.Now)成功打印出当前时间,表示一句话成功运行!

探索基于.NET下实现一句话木马之Asmx篇

探索基于.NET下实现一句话木马之Asmx篇

可惜的是这类要领不支持.NET  2.0究其缘故起因是using System.Web.Script.Services;这个命名空间并不在System.Web中,而是在ajax扩大中需要额外装置ASP.NET 2.0 AJAX 

Extensions,所以在2.0的环境下绝量避免使用该要领。

0X04 菜刀连接

菜刀不支持SOAP的方式提交payload,直接连接asmx文件就会出现下图错误

探索基于.NET下实现一句话木马之Asmx篇

第一种解决要领可以本人写代码完成支持SOAP的客户端;

第二种办法参考asmx页面最下方给出的HTTP POST提交方式;

探索基于.NET下实现一句话木马之Asmx篇内陆环境下用菜刀连接没问题,可以正常连接

探索基于.NET下实现一句话木马之Asmx篇

探索基于.NET下实现一句话木马之Asmx篇

但通常部署到服务器上可能会遇到下面的提示

探索基于.NET下实现一句话木马之Asmx篇

解决上述的问题需要在web.config中设置webServices节点接收的Protoclos节点下需要包含HttpPost 

探索基于.NET下实现一句话木马之Asmx篇多数情形下程序开发者会支持HTTP POST要求,所以对此无须过于担心。笔者基于优化考虑将asmxWebMethodSpy.asmx进一步压缩体积后只有499个字节,asmxScriptMethodSpy.asmx也只有547个字节。 

探索基于.NET下实现一句话木马之Asmx篇

0×05 防御措施

1. 通过菜刀连接的方式,添加可以检测菜刀症结特征的规则;

2. 对于Web应用来说,绝量保障代码的安全性;

3. 对于IDS规则层面来说,上传的时辰可以加入WebMethodAttribute等症结词的检测

0×06 小结

1. 还有本文提供了两种方式完成asmx一句话的思路,当然还有更多编写一句话的技巧有待发掘,下次将先容另外一种姿势,敬请期待;

2. 文章的代码片段请参考 https://github.com/Ivan1ee ;

0×07 参考链接

https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-1.1/1tyazy68%28v%3dvs.80%29

https://github.com/tennc/webshell/blob/master/caidao-shell/customize.asmx

https://www.cnblogs.com/bpdwn/p/3479421.html

https://github.com/Ivan1ee

*

您可能还会对下面的文章感兴趣: