面对内容不断变化的屏幕,双手运指如飞不断输入各种入侵指令,这是电影中典型的黑客形象。事实上,除了应对少数突发情况之外,黑客们通常不会“亲自”去处理诸如扫描、连接和设置后门等常规任务,而是通过编写的脚本或程序去代劳,其中最简易和实用的程序就是批处理。
批处理入门
批处理是一种上手简易、成力巨大的脚本工具。早在DOS时代,系统管理员已经将批处理广泛应用于系统维护与入侵检测,在黑客的扫描和入侵中也不乏它的身影。那么,什么是批处理脚本?
它又是怎样运行的呢?本节将为大家解答这两个常见的入门问题
什么是批处理
在前面4章的学习中,我们掌握了数以百计的命令,通过运行这些命令,可以获取相关的资讯并完成添加账户、建立共享等相关工作,还可以打开指定的端口为下一次的连接做充分准备,但是,如果要多次重复相同的工作,逐一手动输入命令是一件费时费力且让人厌倦的工作,于是,批处理(Batch)应运而生。
顾名思义,批处理就是一种批量执行命令、处理事件的方法。它广泛应用于DOS、Windows、UNIX、Linux系统,甚至Photoshop等应用程序内部也提供批处理图片的功能。对于黑客而言,熟练掌握批处理的制作方法和参数应用,然后根据自己的实际需要制作出相关的批处理脚本,就可以大幅度降低手动输入的强度,从而提升入侵效率。例如,成功使用溢出获得Shell后,只需上传一个预先制作的批处理文件,然后输入文件名执行批处理,即可获得相应的管理员账号。是不是比输入长串命令更为方便快捷呢?
范例1
添加登录密码为123、账户名为admin的账户,并将此账户加至管理员组。
A1.png
当然,以上只是一个最简单的范例,接下来我们将深入了解批处理豹运行程序,并详细学习批处理参数、流程控制,并剖析典型的批处理实例,让大家掌握这门技术并运用在实战中。图5-1为批处理执行后新增的账户
A2.png
批处理如何运行
系统管理人员钟爱批处理脚奉,除了因为它编写简单之外,更重要的是它的运行方式灵活多变,可以满足不同的用户环境,而黑客钟爱批处理脚本,主要看重它无孔不入的自动执行方式,不费吹灰之力即可自动完成指定的入侵工作。下面来看一看批处理脚本如何在系统中运行。
在DOS与Windows操作系统中,批处理脚本是一个以BAT为扩展名的明文脚本程序,由DOS的command.com、WindowS的CMD.exe命令解释器解释并执行。图5-2为Windows7中的BAT脚本文件图标。
A3.png
在执行方面,批处理脚本与COM、EXE等可执行程序相似,可以通过以下方式触发。
·直接在图形界面双击执行。
·在命令行界面输入名称(可附加参数),并按IEnterl键执行。
·加入Windows启动项目,随Windows启动自动执行。
·可以使用sc命令将批处理注册为服务,让它随Windows启动自动执行。
除了以上的方式之外,批处理脚本还具有脚本的特性,可作为脚本通过组策略进行配置,5-3。
·附加于组策略,作为启动、关机脚本,在系统开机后或关机前自动执行。
·附加于组策略,作为某一用户的登录、注销脚本,在该账户登录或注销时自动执行。
A4.png
此外,批处理作为特殊的脚本,在取特殊的名称并置于指定位置时,即使不修改任何系统配置,也会随系统自动运行。这一点对于想让远程电脑自动执行指定操作的黑客而言,显得尤为实用。
·Autoexec.bat,以此命名井放置于系统分区根目录的批处理脚本,将在系统启动时自动执行。
·Winstart.bat,以此命名并放置于Windows安装目录的批处理脚本,将在系统启动时自动执行
批处理编程基础
批处理程序看似复杂,事实上,它与其他程序源代码一样,由变量、流程控制语句、输入输出语句、注释等组成。当黑客逐一了解这些基础内容,具备入门级的批处理脚本编写及分析批处理源程序的能力后,即可结合前面所学习的命令行知识,编写一些实用的攻防脚本,这样可以大幅减少枯燥又重复的工作
回显控制
对于管理员设置的批处理程序而言,即使在执行批处理时出现窗口并呈现回显信息,并不会有什么影响。而对于黑客而言,回显很可能暴露他们处心积虑潜藏的批处理,所以必须小心对待命令执行的回显问题。
.@:“@”通常用于一行的起始位置,表示运行时不显示该行命令。(命令执行的结果输出不受“@”影响。)由于@的作用范围窄,为了达到批处理静默执行的目的,它通常与echo配台使用。
.echo
A5.png
echooff代表不显示随后执行的命令,echoon代表显示随后执行的命令。除此之外,echo还用于显示设计人员预定的提示信息。
范例2
不显示执行命令,将z分区中的a.exe复制至c:\windows
A6.png
范例3
显示执行命令,将z分区中的a,exe复制至c:\windows。
A7.png
显而易见,无任何回显的批处理程序在执行时更具隐蔽性
批处理变量详解
任何程序在开始学习时都需要掌握变量的使用方法,学习批处理也不例外。批处理可用的变量,包括参数变量和环境变量。
1.参数变量
参数变量一共有10个,分别是%0-%9。这类变量与环境变量相比,最突出的特点是可以直接接收用户附丁批处理程序后的字串,并将各字串自动代入相应的变量。下面来看一个小例子
范例4
根据参数新增账户,并将新增账户添加至管理员组(第一个参数为账户名,第二个参数为密码
A8.png
当执行sample04.batHackerpw时,会自动建立一个账户名为Hacker,密码为pw的账户,井将此账户加入administrators组。
A9.png
2.环境变量
参数变量只有10个,假如在较复杂的程序中需要使用10个以上的变量时,就需要使用环境变量了。环境变量的变量名称由大写、小写英文字母及数字组成,使用set命令赋值,在引用时必须使用%字符括起来。以下为set设置环境变量的三种典型用法
A10.png
范例5
演示预定义的批处理变量,以及如何让用户手动输入变量内容
A11.png
需要注意的是.WindowsXP系统已经预定义了三十多个环境变量。自定义环境变量时,应避免与这些预定义环境变量冲突。当然,用户也可以直接使用这些预定的环境变量,以获得当前系统相关的配置信息。
·ALLUSERSPROFILE:应用程序通用设置目录。
·APPDATA:应用程序个性化设置目录。
·CommonProgramFiles:程序通用组件目录。
.COMPUTERNAME:主机名称。
·ComSpec:cmdshell解释程序,例如C:\Windows\system32\cmd.exe。
·HOMEDRIVE:系统驱动器。
·HOMEPATH:用户个人目录。
·NUMBEROF—PROCESSORS:处理器数量。
·Os:操作系统类型。
·Path:默认路径。
·PATHEXT:可直接执行程序扩展名。
·PROCESSOR—ARCHITECTURE:处理器种类。
·PROCESSOR_IDENTIFIER:处理器简要信息。
·PROCESSOR—LEVEL:处理器级别。
·PROCESSOR_REVISION:处理器版本。
·ProgramFiles:默认程序路径。
·PROMPT:命令提示符样式。
·SystemDrive:系统驱动器。
·SystemRoot:系统目录。
·TEMP=临时文件放置位置。
·TMP=临时文件放置位置
·USERDOMAIN:所在域名。
·USERNAME:当前登录用户名称。
·windir:系统目录
输入控制
虽然批处理程序以批量快速处理为主要任务,但在实际使用过程中常常会遇到与用户交互的情况。以下分别介绍如何处理输入请求。
1.自动应答
一些命令在执行过程中需要用户确认,例如执行del*.*.-命令时会询问用户是否确定删除,只有按下Y或N键,程序才会继续执行命令。假如要让命令自动应答,解决方法有以下两个:
·方法一:
A12.png
2.用户输入指定的内容
用户在批处理执行前可以通过在批处理程序后附加参数的方式,将要输入的内容通过参数传递至参数变量,具体的范例可参阅“5.2.2批处理变量详解”范例4的内容。
在批处理执行过程中,假如需要输入指定内容,可以使用环境变量并通过set/P变量=”提示”语句要求用户输入内容,具体的范例可参阅“5.2.2批处理变量详解”中范例5的内容、
输出过滤与信息收集
在批处理过程中可能有大量的输出内容,如果不加筛选全部呈现在屏幕上,相当多重耍内容会一闪而过,让人难以了解执行的结果。例如使用nmap手动扫描一批主机,它反馈的信息比较繁杂,若只想获得打开445端口电脑的IP地址列表,就可以使用批处理的过滤及信息收集功能了。
1.重定向处理
批处理默认的输出设备是屏幕。为了获得远程主机执行的批处理结果,黑客可以将输出重定向为文本文件,这样,所有内容均记录在文本中,待黑客随时下载和查阅。重定向的符号为“>”和“>)”,其中“>”会清除重定向目标的内容后写入新内容:而“>>”只会另起一行追加新内容到重定向目标设各,而不会改动原有的内容。
范侧6
将netvlew命令的结果输出并保存至net,txt文本文件内
A13.png
2.管道
管道“l”的作用是将上一个命令处理的结果传递给下一个命令继续处理。由于DOS并非一个面向对象的程序设计语言,上—个命令处理完毕的内容均以字符串的方式转送给下一个命令,所以,管道通常与find、fmdstr等命令配合,用于筛选出有用的输出结果,以方便阅读。
范倒7
使用findstr筛选netview命令输出结果,仅保留肯“\\”号的行
A14.png
批处理流程控制——跳转语句和条件判断语句
批处理支持条件判断语句、循环语句、跳转语句及外部批处理调用语句这四种流程控制语句,可以实现复杂流程控制操作。下面将介绍call、g。to、if三个语句的用法,用于循环的for语句,由于其结构较复杂,将在下一小节单独介绍。
(1)call命令格式及参数
call语句的作用有两个:一是用于调用其他批处理程序:二是快速跳转至指定的标签处。善用Call语句,可以让程序模块快速制作出结构复杂的批处理脚本。
命令格式:
A15.png
参数说明:
.[Drive:】[Path]FileName:用于指定需要调用的其他批处理程序。
·BatchParameters:非必要参数,用于指定执行程序时的附加参数。
.label[arguments]:用于指定需要跳转的指定标签。
范例8
考虑到安全因素,管理员有时会变换日志的储存位置。黑客们假如想了解管理员将日志藏到哪里,可以参考下面的批处理设置处理制作一个查询脚本。
这个批处理由主程序main.bat与子程序readreg.bat组成,其中主程序提出查询要求,予程序响应并查询注册表,将结果返回给主程序。
●Main.bat
A16.png
*readreg.bat
A17.png
执行效果
A18.png
(2)If命令格式及参数
if语句是一个典型的判断分支流程。根据判断的内容进行分类,它可以细分为以下三种用法
A19.png
·逻辑表达式:在逻辑比较时,批处理不能使用“>”、“<”等符号,必须使用以专用的比较运算符才能完成比较运算
≯等于EQU(或一)
》不等于:NEQ
》小于:LSS
≯小于或等于:LEQ
≯大'r:GTR
≯大于或等于:GEQ
·返回值:语句执行失败时返回l,执行成功时返回0
范例9
检测指定目录中是否存在trojan.exe文件,如果没有凌文件,则从指定的fip中下载及执行
A20.png
范例10
判断添加用户操作是否成功并返回提示信息。
A21.png
(3)goto命令格式及参数
goto语句用于直接跳转至指定的标号(label),它通常与if判断语句、for循环语句结合使用
A22.png
范例11
以下是一个判断用户输入lP地址是否有效的批处理程序,当发现lP地址无效时,马上跳转至fail段提示用户输入的lP地址有误
A23.png
批处理流程控制——循环语句
一般命令假如使用/?参数查看帮助,通常只有寥廖几行说明,但是假如用户在命令行中输入for/?,将可以看到超过50行的说明介绍,所以将它列为最复杂的流程控制命令并不为过。
for是批处理中唯一的循环流程控制命令,它主要有以几项功能:
①循环处理目录。
②循环处理目录内的文件及子目录。
③循环指定的次数
④读取文本文件,以文本文件的内容作为参数,批次执行循环体语句。
1.for命令格式殛参数-循环处理目录
for命令可以批处理大量具有相同特性的目录,如批量重命名、批量删除、批量执行等。
A24.png
.变量名:此处定义的变量用于保存每次循环时从集合取出的目录名称。需要注意的是,此变量只能以单字母命名,并且严格区分大小写。假如在for语句中使用%o/na变量,而在待循环执行的命令中使用%%A,系统便认为这是两个不同的变量。
·集合:指定的一个或多个目录。允许使用?和*通配符。
范例12
将指定的文件散布至各个子目录下。
A25.png
假如执行此批处理的目录下有dirl和dir2两个子目录,而dirl下方又有dirl-1子目录,那么,执行以上批处理后,Trojan.exe文件将分别复制至dirl、dir2两个子目录,并不会复制至dirl-l子目录。
A26.png
2.for命令格式及参数·循环处理目录内的文件及子目录
for命令可以通过,R参数,批量处理某一目录下的子目录及其所包含的所有文件。
A27.png
【驱动器:】路径用于指定命令执行的范例。如果不指定驱动器或路径,将默认操作范围为当前目录。
范例13
将C分区中所有doc文件的扩展名改为hm。虽然这个语句很短,但是可以快速修改数以千计的doc文件扩展名。假如中招的用户不懂批处理,手动修改将十分浪费时间与精力
A28.png
3.for命令格式及参数一循环指定的次数
for命令使用,L参数,就可以提供计数循环执行功能。
A29.png
·起始值,步进,终止值:这三个值将决定循环执行的次数。当for语句开始执行时,程序将比较起始值和终止值,如果起始值比终止值小,则执行待循环执行的命令,然后将起始值加上步进值,再次比较起始值与终止值,如果起始值比终止值小,则继续循环执行,否则跳至下一条语句。
.%变量名:此处定义的变量用于:保存不断变化的起始值(注意变量前的百分号只需--个),例如for几%iI;N(1,1,5)DOecho%i,便显示为12345。
·目录名称:此变量只能以单字母命名,并且严格区分大小写。假如u/o%a而在待循环执行的命令中使用%A,系统将认为这是两个不同的变量。
范倒14
小恶作剧,打开100个命令行窗口
范倒15
以下是一个利用局域网共享传播木马的批处理。在这个批处理中,首先利用netview了解目前已经开机并与本机存在共享连接关系的电脑列表,然后根据列表进一步查找共享文件夹,将Trojan.exe复制至共享文件夹,并设置于12点激发trojan.exe。
当然,以卜的程序只是一个雏形,它还有很多不完善的地方,例如没有检测本机是否已复制trojan+exe,是否已添加了计划任务等。不过,从这个批处理范例中,不难看出循环流程控制可以快速完成大量重复的工作。
4.for命令格式及参数。解读文本文件及处理命令输出结果
for命令添加/F参数后,可以解读指定的文本文件及分析处理命令的输出结果。这是for命令最复杂的用法。它的语法如下:
A32.png
参数部分,中文注解部分很容易理解,这里仅重点说明eol=、skip=、delims=、tokens-和usebackq。
在没有添加这些参数之前,for/R以行为单位处理资料,但是有时我们只需要输出某行中的一小部分内容,怎么办呢?这五个参数正是为解决这个问题而设计。灵活运用这些参数可忽略不必要的行,或者将一行内容分解为几个部分,以方便取用。
·eol:忽略以指定字串起始的行。
·skip:跳过前面指定的行数。
.delims;用于将行内容分割为几个部分,默认以空格、Tab为分割点,也可以在等号后指定其他分割点。
·tokens:指定取用的列序号,例如tokens-2,3的意思就是取用第2和第3列内容。
·usebackq:用r读取包含空格的文件名。
范倒16
获取本机开放的TCP端口。
执行效果如下:
这个范例比较复杂,下面我们来分析一下。首先netstat-ano的输出内容如下_:
在处理时,首先使用skip=2去掉前面两行,然后使用“eoI=U”筛选去除“U”起始的行,接着使用“tokens=2,4”取第2列和第4列。在循环体内,使用if判断第4列是否为“LISTENING”,若结果为真,对第2列使用for,r循环分解。使用“eol=[”筛选以“【”起始的行,使用“delims-:”指定分割标记为“:”,最后取分割的第2列,即可获得不重复的TCP端口。
批处理实例应用——快速入侵
3.1上传下载
由于Windows系统中的fip命令支持脚本功能,所以在所有上传、下载操作中,批处理程序最容易实现的就是FTP上传及下载。需要注意的是,上传和下载所需的时间较长,建议利用VBS脚本配合隐藏执行窗口。
范例17
该范例将会释放出vbs脚本(用于隐藏窗口)及ftp执行脚本,然后根据fP脚本完成上传或下载操作。
循环追杀任务管理器
任务管理器是一个令黑客头痛的工具,用户可以利用它轻易找出一些偷偷执行的木马,并能中止黑客安插的各种非法程序,所以,相当多病毒和木马均附带禁用任务管理器的功能。下面我们来看看如何用批处理达到同样的效果。
范倒19
执行以下程序时会释放出killtaskmgr.bat、hide.vbs两个文件。通过hide.vbs隐藏kilkaskmgr.bat的执行窗体,在背景每隔3秒检测任务管理器是否载入,如果发现任务管理器处于运行状态,马上关闭其对应的线程。
删除系统日志
出于安全方面的考虑,微软的日志记录服务无法使用netstop命令暂停或停用,要使用命令行删除系统日志,必须借助第三方工具,这里推荐使用elsave(国内著名程序员-,小榕的作品)。
范例20
全面清除应用程序、安全及系统日志。该批处理需要使用elsave工具。该工具可阻进入http://*******网址下载获取
用户在执行该范例时,需提供lP地址、可登录的账户名称及密码。例如要清除192.168.1.67这台电脑的日志,其账户名称为admin、密码为pw,则执行以下命令:
典型批处理病毒分析
具有强大功能的批处理,如果黑客加以利用,完全可以达到近似病毒的效果,更妙的是,几乎所有杀毒软件都视之为病毒程序。
这里我们来分析一个样本,此样本具有以下四项功能:
·屏蔽杀毒软件:
·修改注册表;
·利用局域网共享目录复制、传播:
·在设定的时间自动重启系统。
范倒21
批处理实例应用2——系统安全加固
批处理程序并非黑客的专利,它也可以用于系统安全加固方面,协助管理员快速完成一些重复的、机械的工作。例如收集局域网的MAC、IP地址对应列表,绑定IP/MAC防御ARP欺骗,防御AuroRun娄的U盘病毒等
批处理绑定MAC
在客户端将通信的IP地址与MAC地址绑定,可以对局域网内最常见的ARP欺骗攻击起到一定的防御作用,但是制作lP地址与MAC地址列表并完成绑定却是一项烦琐的工作。这时我们可以借助以下批处理程序来提升工作效率。
范例22
获取局域网的MAC地址、lP地址对应列表
A46.png
A47.png
A48.png
范倒23
读取文奉文件,绑定MAC与IP地址。
建议将此脚本命名为autoexec.bat,并放置在C分区,以便在系统启动时能自动执行。假如脚本与Mac+txt不在同一文件夹内,则需要指定文件的路径
AutoRun类病毒免疫程序
AutoRun类病毒的传播原理是修改Autorun.inf文件。当用户双击打开磁盘时,系统自动载入该文件,并立即运行指定的木马或病毒主程序。
了解此原理后,结合Windows文件系统在同一目录下无法写入与子文件夹完全同名的文件(包含扩展名)这一特性,就可以设计出一个免疫批处理程序,只需删除磁盘中的autorun.inf文件,并在每一个磁盘下生成名为Autorun.inf的文件夹。即可达到免疫该类病毒的目的。
范例24
该范例提供了两项功能:第一项是删除autorun,inf文件并建立相应的目录,让本机所有磁盘免疫Autorun类病毒:另一项功能是删除autorun.inf目录,恢复至免疫前的状态
A49.png
A50.png
删除所有分区的默认共享
Windows默认共享所有分区。不过不用担心,因为只有具有管理员权限的用户才能访问这些分区。假如,你想做得彻底一些,那么可以参考以下范例,制作一个批处理程序清除掉这些默认共享。
范例25
清除所有分区默认共享的批处理程序
A51.png
A52.png
防范黑客使用批处理入侵及攻击
批处理程序与其他程序一样,也需要拥有相应的权限才能完成指定的工作,例如黑客获取一个User账户后,执行新建账户并加入管理员组的批处理程序的操作将会失败,所以,防范黑窖使用批处理入侵最根本的方法是严格管理系统的账户安全。
由于系统存在溢出漏洞等原因,黑客依然可能取得管理员权限的Shell.并使用批处理程序攻击和入侵系统,因此,管理员应参考本节的内容防范这类攻击
修改组策略禁用批处理
杀毒软件、防木马软件对黑客私人制作的批处理脚本束手无策。假如系统管理员想解决这个问题,可以尝试禁用命令解释器,让批处理脚本无法运行。毕竟正舰的应用软件极少使用批处理的地方,从大局而言禁用批处理利大于弊,弊端是命令行随之停用,无法使用相关的管理命令,会给系统管理工作带来不便。禁用批处理的方法如下
禁用批处理后,该用户登录后,便无法使用命令提示字符及批处理文件了。若强行运行批处理或开启命令提示符窗口,将会出现“命令提示符己被系统管理员停用”的提示信息,
5-7
限制命令解释器的使用权限
上一小节介绍的方法仅对当前登录的用户有效,假如要限制所有账户使用命令解释器,那么,可以参考以下方法修改命令解释器的执行权限,这样就可以杜绝黑客通过Telnet、计划任务等方式偷偷运行批处理程序。
本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法行为。