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

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

0×01 媒介

本文是探索.NET三驾马车完成一句话木马的完结篇,要是前两篇没有看的同砚可以阅读FreeBuf 地址(ashx一句话 、 asmx一句话),至于这三篇文章包含的代码片段已经同步到笔者的 github上,要是有需求请自取。 那么闲话少叙,归回正题。SVC是 .NET WCF程序的扩台甫至于有什么作用那还得先谈谈WCF。 

0×02 简介以及道理

WCF (WindowsCo妹妹unication Foundation) 是微软为构建面向服务的应用程序所提供的统一编程模型,能够解决不同应用程序域,不同平台之间的通讯问题。WCF统一了多重分布式手艺:Webservice、.NetRemoting、.Net企业服务、微软的新闻行列步队(MSMQ),在WCF的结构中有下面几个概念:

1. 契约(ServiceContract): 契约是属于一个服务地下的公共接口,定义了服务端地下的服务要领、使用的传输协定、可走访的地址和传输的新闻格式等等,简单的说契约的作用就是告诉我们能干什么;

2. 地址(Address): 在WCF框架中,每一个服务都具有唯一的地址,其他服务或者客户端通过这个地址来走访到这个服务;

3. 绑定(Binding): 定义了服务与外部通讯的方式。它由一组称为绑定元素的元素而构成,这些元素组合在一块儿形成通讯基础结构;

4. 闭幕点(EndPoint): 闭幕点是用来发送或接收新闻的,一个闭幕点由三个要素组成,分别是:地址、绑定以及契约;

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

对于本文来说只要要把握契约的使用即可,下面通过一个简单的demo来演示 

探索基于.NET下实现一句话木马之SVC篇上面的代码中[ServiceContract]是接口Iservice1声明的特性,表示这个是一个契约;[OperationContract]在接口要领DoWork上声明表示该要领是一个对外的服务,遥程客户端能够调用到这个要领;定义TestService类去完成接口,并且完成接口里的DoWork要领,要领体内返归当前的日期时间;简要的说明后通过Visual Studio调试以下:

探索基于.NET下实现一句话木马之SVC篇点击WCF测试客户端右侧 “ 调用“ 成功返归了当前的时间效果,这就是一个简单的WCF程序的定义以及调用。

0×03 SVC小马的完成

通经常使用IDE生成的WCF文件由三部分组成,要是要完成WCF的小马,需要将三部分整合到一个文件中,扩台甫是svc。新建WCF的时辰三个文件默认名分别为Service1.svc 、Service1.svc.cs 、IService.cs ,整合代码分两步走,第一步先将接口文件IService.cs里的代码块放入Service.svc.cs文件中;第二步将Service1.svc.cs文件以及Service1.svc合并; 终极三块代码整合一块儿,再加上完成了创建aspx马儿以及CMD执行命令的功能,俨然诞生了一个WCF的小马,黑客工具,代码以下: 

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

输入ver命令,返归执行效果。 

探索基于.NET下实现一句话木马之SVC篇把文件部署到IIS7下然后走访 http://IP/service2.svc?singleWsdl  

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

看到这段wsdl中包含了定义的cmdShell要领,还有对应返归的webShellResponse这个xml元素节点,将来命令执行的效果整个位于webShellResult节点之间,若想可视化的 操作还需要借助SoapUI这款工具来完成调用,工具下载地址网上有很多,笔者下载的是5.2.1版本,装置新建项目后选择添加 ”Add WSDL“ 

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

点击OK后可见左边多出了代码里定义的两个要领,点击节点下的Request 按钮就可以发送要求测试了。

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

到此虽然小马已经完成,但不是笔者的目标,笔者指望的照样随意传入一句话就可以到达任意执行的目的,所以还得继续往下转化。

0X04 菜刀连接

根据C#版本的小马加上之前两篇文章中行使Jscript.Net的语法就可以很容易写出一句话小马服务端,查看C#中 ServiceContract元数据可以看出本质上就是ServiceContractAttribute,OperationContract对应的是OperationContractAttribute。以下图

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

在Jscript.Net中完成这两个功能的分类是WebMethodAttribute类以及ScriptMethodAttribute类,终极写出一句话木马服务端代码:

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

关上SoapUI 输入 DateTime.Now.ToString() ,成功打印出当前时间。

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

实在要求的数据是一条SOAP新闻,也是一个普通的XML文档,但必须要包含Envelope 命名空间、不能包含DTD引用以及XML处理指令;

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

Envelope元素是SOAP新闻的根元素,它的存在就可认为这个XML是一个SOAP新闻、Body元素包含预备传送到新闻终极端点的数据,上面的tem:exec以及tem:text元素是应用程序专用的元素,并不是标准SOAP的一部分,发送HTTP要求的时辰只要修改tem:Ivan就可以完成任意代码执行,至此SVC版本的一句话小马也已经完成。这里还需要注意一点,web.config里必须要设置。

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

其中最症结的当属 httpGetEnabled= true ,要是不设置这个选项阅读的时辰会看到以下的提示

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

好在遇到上述设置的概率不大,因开发环境下Visual Studio会自动添加这个选项到设置文件中去,开发人员在部署的时辰基于习性会拷贝到生成环境下,所以大概率支持HTTP要求。可惜的是菜刀暂时不支持SOAP新闻返归的数据格式,笔者考虑的解决方案重写客户端来支持SOAP新闻返归;还有就是基于优化考虑将svcLessSpy.svc进一步压缩体积后只有339个字节。

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

0×05 防御措施

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

2.   对于IDS规则层面来说,上传的时辰可以加入OperationContractAttribute、ServiceContractAttribute、eval等症结词的检测

0×06 小结

1.   Svc大有替换asmx的趋向,也是微软未来主推的服务,信赖会有越来越多的.NET应用程序支持WCF,svc一句话木马被攻击者恶意行使的概率也会越来越多;

2.   目前中国菜刀还不支持svc扩大,需要改进或者有前提的可以开发一款属于svc以及asmx一句话木马专属定制的工具;

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

0×07 参考链接

https://docs.microsoft.com/en-us/dotnet/framework/wcf/getting-started-tutorial

https://www.cnblogs.com/oec2003/archive/2010/07/21/1782324.html

*

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