现在的位置: 网页制作教程网站制作经验 >正文
asp语言高级教程

ASP如何合并文件

发表于2016/10/29 网站制作经验 0条评论 ⁄ 热度 2,067℃
导语:利用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合并文件的编程原理

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指定的文件中

ASP合并文件的核心代码

为了方便调用,我写了一个子过程。

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功能挺强的,关键在于自己会不会去深入挖掘。

  • 暂无评论