揭秘Windows 95漏洞:利用CIFS共享密码绕过实现入侵

本文详细介绍了在CTF比赛中如何利用Windows 95的CIFS共享密码绕过漏洞(MS00-072),通过公开工具实现密码破解和文件共享访问,为后续远程代码执行奠定基础。

Jump ESP, jump!: 黑客入侵Windows 95,第一部分

在一次CTF比赛中,我们遇到了非常古老的系统。事实证明,入侵这些恐龙时代的系统并不容易,因为现代工具如Metasploit没有针对这些老式系统的漏洞利用程序,当然,没有Metasploit,我们的“133t黑客技能”也无用武之地…… :)

但我有一个想法:这可以是一个很有趣的小研究。

黑客入侵的规则如下:

  • 只能使用公开可用的工具进行入侵,不能开发新工具。这是一个给脚本小子的CTF,我们不能写代码!
  • 只允许无需用户交互的入侵(基于IE的漏洞利用不在范围内)。
  • 需要即时远程代码执行。例如,如果我能将恶意软件放到C盘并修改autoexec.bat,我仍然没有完成,因为在真实的CTF中没有人会为我重启机器。但如果我能重启机器,那也可以。
  • 我没有物理访问权限。

我选择了Windows 95作为目标。首先,我需要获取一个正版的Windows 95安装程序,所以我访问了微软在线商店并从官方站点下载了它。

我在虚拟化环境中安装了它(记得,你需要启动软盘才能从CD安装),安装界面让我充满了怀旧之情。“更易使用”、“更快更高效”、“高性能”、“友好”、“直观界面”。谁不想要这些呢? :)

现在我有了一台可用的Windows 95机器,设置TCP/IP很容易,让我们尝试入侵它!

我的第一个工具总是nmap。让我们扫描这台机器!下面我展示了结果中有趣的部分:

1
2
3
4
5
6
7
8
PORT      STATE           SERVICE       VERSION
139/tcp   open            netbios-ssn
137/udp   open|filtered   netbios-ns
138/udp   open|filtered   netbios-dgm
Running: Microsoft Windows 3.X|95
OS details: Microsoft Windows for Workgroups 3.11 or Windows 95
TCP Sequence Prediction: Difficulty=25 (Good luck!)
IP ID Sequence Generation: Broken little-endian incremental

第一个令人兴奋的事情是没有端口445!端口445是从NT 4.0才开始有的。如果你检查所有著名的Windows漏洞利用(例如MS03-026、MS08-067),它们都使用端口445和命名管道。但Windows 95上没有命名管道!

因为我是Nessus猴子,让我们在上面运行一次免费的Nessus扫描!

只发现了一个关键漏洞:

Microsoft Windows NT 4.0 Unsupported Installation Detection

没什么用,Nessus!但至少它是免费的。

接下来,我尝试了GFI Languard,什么都没有。它检测到机器是Win95,开放的TCP端口,以及一些UDP端口为开放(误报),仅此而已……

让我们尝试另一个免费的漏洞扫描工具Nexpose。结果好多了:

  • CIFS NULL Session Permitted
  • Weak LAN Manager hashing permitted
  • SMB signing not required
  • Windows 95/98/ME Share Level Password Bypass
  • TCP Sequence Number Approximation Vulnerability
  • ICMP netmask response
  • CIFS Share Readable By Everyone

我认为以下漏洞目前对我没用:

  • Weak LAN Manager hashing permitted - 没有用户交互或服务查看网络,无用(我可能错了,稍后会检查)
  • TCP Sequence Number Approximation Vulnerability - 不感兴趣
  • ICMP netmask response - 不感兴趣
  • CIFS Share Readable By Everyone - 除非文本文件中有密码,否则无用

但我们有两个有趣的漏洞:

  • CIFS NULL Session Permitted - 这可能有趣,我稍后会检查……
  • Windows 95/98/ME Share Level Password Bypass - BINGO!

让我在这里引用Nexpose:

“3.2.3 Windows 95/98/ME Share Level Password Bypass (CIFS-win9x-onebyte-password)

Windows 95/98/ME文件和打印共享服务中的一个缺陷允许未经授权的用户通过发送密码的第一个字符来访问文件和打印共享。由于猜测密码所需的尝试次数有限,暴力攻击可以在几秒钟内完成。

已使用密码P建立到共享TEST的连接。”

微软方面的漏洞描述:

http://technet.microsoft.com/en-us/security/bulletin/ms00-072

例如,如果密码是“Password”(不带引号),客户端发送密码“P”(不带引号)且长度为1,客户端就会被认证。为了找到密码的其余部分,攻击者将长度增加到2,并开始猜测第二个字母,直到达到“PA”并再次被认证。由于Windows 95中的共享密码不区分大小写,“Pa”和“PA”也会被接受。攻击者可以继续增加长度并逐个猜测下一个字母,直到获得完整的“PASSWORD”(因为最大长度是8个字符)。

我相信在Windows 95中,ALT+033到ALT+255之间的所有字符都可以用于共享密码,但由于不区分大小写,我们有196个字符可用,最大长度为8个字符。在最坏的情况下,这意味着我们可以在1568次请求内猜出完整密码。有趣的是,共享密码(默认情况下)不与任何用户名/账户关联,并且无法通过暴力破解锁定。

幸运的是,有一个很棒的工具可以利用这个漏洞:

Share Password Checker

让我们看看这个工具的实际操作:

W00t w00t,它在不到2秒内暴力破解了密码!

查看wireshark转储,我们可以看到它是如何完成的:

如你所见,在转储的中间部分,我们可以看到它已经猜到了“PASS”部分,并正在暴力破解第五个字符,它发现“W”是正确的第五个字符,然后开始暴力破解第六个字符。

如果我们在CTF中运气好,整个C盘共享具有完全读写访问权限,我们可以将我们的团队标识符写入c:\flag.txt。但如果我们想要远程代码执行呢?敬请关注,这将是本文下一部分的主题。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计