深入挖掘windows脚本技术

上传人:子 文档编号:43446619 上传时间:2018-06-06 格式:DOC 页数:8 大小:33KB
返回 下载 相关 举报
深入挖掘windows脚本技术_第1页
第1页 / 共8页
深入挖掘windows脚本技术_第2页
第2页 / 共8页
深入挖掘windows脚本技术_第3页
第3页 / 共8页
深入挖掘windows脚本技术_第4页
第4页 / 共8页
深入挖掘windows脚本技术_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《深入挖掘windows脚本技术》由会员分享,可在线阅读,更多相关《深入挖掘windows脚本技术(8页珍藏版)》请在金锄头文库上搜索。

1、深入挖掘深入挖掘 WindowsWindows 脚本技术脚本技术深入挖掘 Windows 脚本技术收藏此页 打印【IT168 知识库】? 深入挖掘 Windows 脚本技术 深入挖掘 Windows 脚本技术 转自:Xfocus Teamhttp:/ Security Teamhttp:/www.ph4nt0m.org创建时间:2004-11-20文章属性:原创文章提交:zzzevazzz (zzzevazzz_at_)深入挖掘 Windows 脚本技术-zzzEVAzzz http:/www.ph4nt0m.org2004-11-18-【目录】1,前言2,回顾 WSH 对象3,WMI 服务4

2、,脚本也有 GUI5,反查杀6,来做个后门7,结语8,参考资料【前言】本文讲述一些 Windows 脚本编程的知识和技巧。这里的 Windows 脚本是指“Windows Script Host“(WSH Windows 脚本宿主),而不是HTML 或 ASP 中的脚本。前者由 Wscript 或 Cscript 解释,后两者分别由 IE 和 IIS 负责解释。描述的语言是 VBScript。本文假设读者有一定的 Windows 脚本编程的基础。如果你对此还不了解,请先学习Windows 脚本技术1。【回顾 WSH 对象】得益于 com 技术的支持,WSH 能提供比批处理(.bat)更强大的功

3、能。说白了,wsh 不过是调用现成的“控件”作为一个对象,用对象的属性和方法实现目的。常用的对象有:WScriptWindows 脚本宿主对象模型的根对象,要使用 WSH 自然离不开它。它提供多个子对象,比如 WScript.Arguments 和 WScript.Shell。前者提供对整个命令行参数集的访问,后者可以运行程序、操纵注册表内容、创建快捷方式或访问系统文件夹。Scripting.FileSystemObject主要为 IIS 设计的对象,访问文件系统。这个恐怕是大家遇到最多的对象了,因为几乎所有的 Windows 脚本病毒都要通过它复制自己感染别人。ADODB.StreamAct

4、iveX Data Objects 数据库的子对象,提供流方式访问文件的功能。这虽然属于数据库的一部分,但感谢微软,ADO 是系统自带的。Microsoft.XMLHTTP为支持 XML 而设计的对象,通过 http 协议访问网络。常用于跨站脚本执行漏洞和 SQL injection。还有很多不常见的:活动目录服务接口(ADSI)相关对象 功能涉及范围很广,主要用于 Windows 域管理。InternetExplorer 对象 做 IE 能做的各种事。Word,Excel,Outlook 对象 用来处理 word 文档,excel 表单和邮件。WBEM 对象 WBEM 即 Web-Based

5、 Enterprise Management。它为管理 Windows 提供强大的功能支持。下一节提到的 WMI 服务提供该对象的接口。很显然,WSH 可以利用的对象远远不止这些。本文挂一漏万,谈一些较实用的对象及其用法。先看一个支持断点续传下载 web 资源的例子,它用到了上面说的 4个常用对象。Copy to clipboardCODE:if (lcase(right(wscript.fullname,11)=“wscript.exe“) then? ? ?判断脚本宿主的名称? ?die(“Script host must be CScript.exe.“)? ? ? ? ? ? ? ?脚

6、本宿主不是 CScript,于是就 die 了end ifif wscript.arguments.count1 then? ? ? ? ? ? ? ? ? ? ?先判断参数个数是否大于 1? ?filename=wscript.arguments(1)? ? ? ? ? ? ? ? ? ? ? 再访问第二个参数else? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?如果没有给出文件名,就从 url 中获得? ?t=instrrev(url,“/“)? ? ? ? ? ? ? ? ? ? ? ? ? ?获得最后一个“/“的位置? ?if t=0 or t=len(

7、url) then die(“Can not get filename to save.“)? ? 没有“/“或以“/“结尾? ?filename=right(url,len(url)-t)? ? ? ? ? ? ? ? ? ? ?获得要保存的文件名end ifif not left(url,7)=“http:/“ then url=“http:/“&url? ? ? ? ?如果粗心把“http:/”忘了,加上set fso=wscript.createobject(“Scripting.FileSystemObject“)? ?FSO,ASO,HTTP 三个对象一个都不能少set aso=w

8、script.createobject(“ADODB.Stream“)set http=wscript.createobject(“Microsoft.XMLHTTP“)if fso.fileexists(filename) then? ? ? ? ? ? ? ? ? ? ? 判断要下载的文件是否已经存在? ?start=fso.getfile(filename).size? ? ? ? ? ? ? ? ? ? 存在,以当前文件大小作为开始位置else? ?start=0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不存在,一切从零开始? ?fso.createtext

9、file(filename).close? ? ? ? ? ? ? ? ?新建文件end ifwscript.stdout.write “Connectting.“? ? ? ? ? ? ? ? ?好戏刚刚开始current=start? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?当前位置即开始位置do? ?http.open “GET“,url,true? ? ? ? ? ? ? ? ? ? ? ? ?这里用异步方式调用 HTTP? ?http.setrequestheader “Range“,“bytes=“&start&“-“&cstr(start+20480) 断点

10、续传的奥秘就在这里? ?http.setrequestheader “Content-Type:“,“application/octet-stream“? ?http.send? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?构造完数据包就开始发送? ?for i=1 to 120? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 循环等待? ? ?if http.readystate=3 then showplan()? ? ? ? ? ? ? ?状态 3 表示开始接收数据,显示进度? ? ?if http.readystate=4 then exit for

11、? ? ? ? ? ? ? ?状态 4 表示数据接受完成? ? ?wscript.sleep 500? ? ? ? ? ? ? ? ? ? ? ? ? ? 等待 500ms? ?next? ?if not http.readystate=4 then die(“Timeout.“)? ? ? ? ? ?1 分钟还没下完 20k?超时!? ?if http.status299 then die(“Error: “&http.status&“ “&http.statustext) 不是吧,又出错?? ?if not http.status=206 then die(“Server Not Supp

12、ort Partial Content.“) 服务器不支持断点续传? ?aso.type=1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?数据流类型设为字节? ?aso.open? ?aso.loadfromfile filename? ? ? ? ? ? ? ? ? ? ? ?打开文件? ?aso.position=start? ? ? ? ? ? ? ? ? ? ? ? ? ? ?设置文件指针初始位置? ?aso.write http.responsebody? ? ? ? ? ? ? ? ? ? ? ?写入数据? ?aso.savetofile filename,2?

13、 ? ? ? ? ? ? ? ? ? ? ?覆盖保存? ?aso.close? ?range=http.getresponseheader(“Content-Range“)? ? ? ? ? ?获得 http 头中的“Content-Range“? ?if range=“ then die(“Can not get range.“)? ? ? ? ? ? ?没有它就不知道下载完了没有? ?temp=mid(range,instr(range,“-“)+1)? ? ? ? ? ? ? ? ?Content-Range 是类似 123-456/789 的样子? ?current=clng(left

14、(temp,instr(temp,“/“)-1)? ? ? ? ? ? ?123 是开始位置,456 是结束位置? ?total=clng(mid(temp,instr(temp,“/“)+1)? ? ? ? ? ? ? ?789 是文件总字节数? ?if total-current=1 then exit do? ? ? ? ? ? ? ? ? ?结束位置比总大小少 1 就表示传输完成了? ?start=start+20480? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 否则再下载 20kloop while truewscript.echo chr(13)&“Download (“&total&“) Done.“? ? ? ? ?下载完了,显示总字节数function die(msg)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函数名来自 Perl 内置函数 diewscript.echo msg? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号