RPC-exploit - MS08-067
Last Update:
Word Count:
Read Time:
MS08-067 (aka CVE-2008-4250) 漏洞复现
前期准备
RPC漏洞
- RPC是什么
RPC
(Remote Procedure Call
, 远程过程调用)是操作系统的一种消息传递功能,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP
或UDP
,为通信程序之间携带信息数据。在OSI
网络通信模型中,RPC
跨越了传输层和应用层。RPC
使得开发包括网络分布式多程序在内的应用程序更加容易。
微软的描述为:“一种能允许分布式应用程序调用网络上不同计算机的可用服务的消息传递实用程序。在计算机的远程管理期间使用”
RPC的三个过程
通讯协议
比如:你需要找人在国外干活,那么你可以直接飞过去或者打电话或者通过互联网的形式,去找人,这个找人的过程就是通讯协议
寻址
既然要找人干活,肯定要知道地址在哪,飞过去需要找到详细地址,打电话需要知道电话号码,互联网需要知道IP是多少
数据序列化
就是说,语言需要互通,才能够让别人干活,之间需要一个大家都懂的语言去交流
攻击RPC漏洞
攻击
RPC
漏洞其实就是攻击DCOM
接口,二者相关联DCOM
(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口。利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象,DCOM
基于组件对象模型COM
,COM
提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口
复现环境
- 攻击机:kali-linux-2022.4-vmware-amd64
- 靶机:Windows XP SP3
复现工具
MSF
即
Metasploit Framwork
,是一个综合性的渗透测试工具,集成信息收集、漏洞扫描、漏洞利用以及提权等功能的工具,目前安装的kali
都自带MSF
Nmap
即
Network Mapper
,是一款开源免费的网络发现(Network Discovery
)和安全审计(Security Auditing
)工具。一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap
可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。
漏洞介绍
MS08-067漏洞是通过MSRPC over SMB
通道调用Server
服务程序中的NetPathCanonicalize
函数时触发的,而NetPathCanonicalize
函数在远程访问其他主机时,会调用NetpwPathCanonicalize
函数,对远程访问的路径进行规范化,而在NetpwPathCanonicalize
函数中发生了栈缓冲区内存错误,造成可被利用实施远程代码执行。
Windows
的Server
服务在处理特制RPC请求时存在缓冲区溢出漏洞,远程攻击者可以通过发送恶意的RPC
请求触发这个溢出,导致完全入侵用户系统,SYSTEM
权限执行任意指令。对于Windows 2000
、XP
和Server 2003
,无需认证便可以利用这个漏洞 ,对于Windows Vista
和Server 2008
,可能需要进行认证。
影响范围
1 |
|
漏洞复现
目标
获取C:\GIFT\
目录下的flag
检测通信
首先获取攻击机与靶机各自的IP
地址
攻击机(
kali
)IP:192.168.80.128
靶机(
Windows XP
)IP:192.168.80.130
并且要保证二者能互相通信
kali能ping通xp
xp能ping通kali
如果发现出现超时等Error
,则可能是xp
的防火墙未关闭,关闭即可
检查靶机是否开启了445
端口,在cmd
中执行netstat -an
即可
如图所示TCP 0.0.0.0:445
的状态为LISTENING
,则说明端口445
已被打开
为什么是”445”端口?
端口的作用
我们知道,一台拥有IP地址的主机可以提供许多服务,比如
Web
服务、FTP
服务、SMTP
服务等,这些服务完全可以通过1个IP
地址来实现。那么,主机是怎么区分不同的网络服务呢?显然不能只靠IP
地址,因为IP
地址与网络服务的关系是一对多的关系,实际上是通过“IP
地址+端口号”来区分不同的服务的。需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台
WWW
服务器时,WWW
服务器使用“80
”端口与你的电脑通信,但你的电脑则可能使用“3456
”这样的端口。如下图所示:端口的分类
端口共
1-65535
号,知名端口范围从0
到1023
,这些端口号一般固定分配给一些服务,大家尽量不要使用。比如21
端口分配给FTP
服务,25
端号分配给SMTP
邮件传输协议服务,80
端口分配给HTTP
服务,135
端口分配给RPC
远程过程调用服务等等。动态端口的范围从
1024
到65535
,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024
端口就是分配给第一个向系统发出申请的程序,在关闭程序进程后,就会释放所占用的端口号。注意,端口冲突就不能正常工作。同时,动态端口号也常常被病毒木马程序所利用,如冰河默认连接端口号是
7626
、WAY 2.4
连接端口号是8011
、Netspy 3.0
连接端口号是7306
、YAI
病毒连接端口号是1024
等等。常见的端口
黑客通过端口可以干什么
信息收集
目标探测
服务判断
系统判断
角色分析
445端口
参考链接:https://blog.csdn.net/qq_36119192/article/details/83279527
比如
2017
年危害全球的永恒之蓝,就是利用的445
端口。445
端口就是利用SMB(Server Message Block)Windows
协议族,用于文件共享、打印共享的服务。445
端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化公开服务器打开139和445端口是一件非常危险的事情。 如果有
Guest
帐号,而且没有设置任何密码时,就能够被人通过因特网轻松地盗看文件。如果给该帐号设置了写入权限,甚至可以轻松地篡改文件。也就是说在对外部公开的服务器中不应该打开这些端口。通过因特网使用文件服务器就等同自杀行为,因此一定要关闭445
端口。对于利用ADSL
永久性接入因特网的客户端机器可以说也是如此。
漏洞扫描
利用kali
的Nmap
工具对靶机进行信息搜集,先进入nmap
得漏洞插件目录,检查ms08-067
模块
1 |
|
现在使用命令nmap --script=vuln 192.168.80.130
对靶机进行漏洞扫描:主机存活,445
端口开放,且存在MS08-067
漏洞。
执行msfconsole
,进入MSF
用search ms08-067
命令查看可利用模块
使用use exploit/windows/smb/ms08_067_netapi
进入模块里,并用show options
查看使用说明
其中RHOSTS
代表靶机地址,此时为空,需要我们手动设置,而LHOST
代表攻击机,IP
已被自动设置,使用set rhost 192.168.80.130
设置靶机地址
使用exploit
进行渗透攻击,并使用shell
直接跳转到靶机命令行
找到flag.txt
后使用type
打开即可
flag:flag{n1ce_try_0f_MS08_067}
漏洞分析
MS08-067漏洞是通过MSRPC over SMB
通道调用Server
服务程序中的NetPathCanonicalize
函数时触发的,而NetPathCanonicalize
函数在远程访问其他主机时,会调用NetpwPathCanonicalize
函数,对远程访问的路径进行规范化,而在NetpwPathCanonicalize
函数中发生了栈缓冲区内存错误,造成可被利用实施远程代码执行。
1 |
|
在路径规范化的操作中,服务程序对路径字符串的地址空间检查存在逻辑漏洞。攻击者通过精心设计输入路径,可以在函数去除[…\]
字符串时,把路径字符串中内容复制到路径串之前的地址空间中(低地址),达到覆盖函数返回地址,执行任意代码的目的。
通过IDA Pro
打开C:\windows\system32\netapi32.dll
,找到漏洞所在的NetpwPathCanonicalize
函数并双击。通过观察其流程图CFG
可知,此函数并没有直接进行输入路径和规范化,而是调用了下级函数CanonicalizePathName
来进行路径整理,将待整理的路径字符串进行规范化,然后再保存到预先分配的输出路径缓冲区buffer
中,最终造成缓冲区溢出漏洞。