突破IIS6上传限制:ASP文件合并器
一天晚上,刚刚打开QQ,就看到小企鹅的图标不断闪动,原来是一迷上脚本攻击的学生发来的求救消息:“获得了一个WebShell,但是可能服务器在IIS里限制了上传文件大小,cmd.exe就是传不上去,小一点的文件都可以传,是什么原因啊?”。没有哪个网管会BT到在IIS中把文件上传大小限制得连289K的Cmd.exe也传不上去的,肯定是IIS6.0的默认设置。于是我就回了一句:“是IIS6.0的默认设置引起的。”,“那有什么好的解决办法吗?”学生还不死心。因为自己急着要测试一个软件,想也没想就回复:“拆分、合并啊!”,这下子惹麻烦了,当学生继续询问:“拆分我会,但是如何合并?”时我才想起,Cmd.exe都无法上传,怎么执行“copy /b”命令呢?幸好自己脑子转弯比较快,ASP中的Adodb.Stream对象不是可以操作二进制文件的吗?那肯定可以实现文件合并的功能的。于是回复:“呵呵,用ASP代码实现吧!”
可惜该学生很不争气,几天后还是把我缠住,说什么网上找不到能够实现文件合并的ASP程序,说连新出的海洋6.0也没有这样的功能,甚至激我说老师吹牛……亏我还教过他ASP呢,一点不懂自己动手,丰衣足食的DIY精神,只会利用现成的工具怎么可能成为高手呢?为了不让自己的易做图失望,挽易做图师的一丝尊严,于是我花了一个小时写了这个ASP文件合并器,测试了一下,效果还挺好,配合海洋之类的木马,很好地解决了IIS6.0无法上传大于200K以上文件的限制。编程原理
Asp中的Adodb.Stream组件可以操作二进制文件,程序使用了该组件的几个重要的方法。
1. LoadFromFile方法
使用方法:Object.LoadFromFile(FileName)
说明:将FileName指定的文件装入对像中,参数FileName为指定的文件名。
2.Read 方法
使用方法:Object.Read(Numbytes)
说明:读取指定长度的二进制内容。
参数说明:Numbytes指定的要读取的找度,不指定则读取全部。
3.Write 方法
使用方法:Object.Write(Buffer)
说明:将指定的数据装入对象中。
4.SaveToFile 方法
使用方法:Object.SaveToFile(FileName,[Options])
说明:将对像的内容写到FileName指定的文件中核心代码:
为了方便调用,我写了一个子过程。程序代码
sub hb(Filename,newname)
’ Filename为要合并的文件名,用”|”放开,newname为要生成的新文件。
Filename=split(Filename,"|")
i=ubound(Filename)
redim fname(i),fstr(i)set fso = Server.CreateObject("Scripting.FileSystemObject")
for n=0 to i
fname(n)= server.MapPath(Filename(n))
if not fso.FileExists(fname(n)) then call back("文件"&name(n)&"找不到!")
next
set fso=nothing
’这里使用Scripting.FileSystemObject对象是为了判断文件是否存在,一个成形的代码总应该要有防死、纠错的功能。newname = server.MapPath(newname)
for n=0 to i
set dr=CreateObject("Adodb.Stream")
dr.Mode=3
dr.Type=1
dr.Open
dr.LoadFromFile(fname(n))
fstr(n)=dr.read
dr.close
next
‘将要合并的文件内容读到fstr数组中。set dr=CreateObject("Adodb.Stream")
dr.Mode=3
dr.Type=1
dr.Open
for n=0 to i
dr.write=fstr(n)
next
dr.SaveToFile newname,2
‘生成新文件。
dr.Close
set dr=nothing
response.write "新文件"&newname&"成功生成!"end sub
小提示:这个代码除了在入侵IIS6.0时会派上用场,在其它限制上传文件大小的主机中也能用。把写好的代码给学生,再认真做一番思想教育,什么不能用来做坏事等云云,学生学点脚本安全的知识也不是坏事。本来还想用VBS写一个VBS文件切割机,想想还是算了,这样的工具网上已经够多了,不能浪费时间。也许有人会怪我为什么不整合了文件上传功能,我想当大家需要用到这个程序的时候,一定已经获取了WebShell,我又何必多此一举呢?
学习黑客技术最大的乐趣莫过于自己编写小工具,我自己也就因为这一次的事才发现其实ASP功能挺强的,关键在于自己会不会去深入挖掘
补充:综合编程 , 安全编程 ,