漏洞原理
MS17-010
漏洞出现在 Windows SMB v1
中的内核态函数 srv!SrvOs2FeaListToNt
在处理 FEA(File Extended Attributes)
转换时,在大非分页池 (Large Non-Paged Kernel Pool)
上存在缓冲区溢出。
函数 srv!SrvOs2FeaListToNt
在将 FEA list
转换成 NTFEA(Windows NT FEA) list
前会调用 srv!SrvOs2FeaListSizeToNt
去计算转换后的 FEA lsit
的大小,因计算大小错误,而导致缓冲区溢出。
影响版本
Windows
版本包括但不限于:
WindowsNT
,Windows2000
、Windows XP
、Windows 2003
、
Windows Vista
、Windows 7
、Windows 8
,Windows 2008
、
Windows 2008 R2
、Windows Server 2012 SP0
漏洞利用
在现在来说永恒之蓝漏洞算是有点老的漏洞了,Metasploit
上已经有集成 payload
了,但是其危害确实是很大的,因为只要用它打进去似乎直接就是 system
权限,所以还是拿出来复现了一下。
没打
cve-2017-0143
漏洞的补丁的机器,都可以尝试。
环境
攻击机:kali (192.168.1.58)
目标机:Windows Server 2008 R2 Standard 7601 Service Pack 1 (192.168.1.108)
漏洞利用
端口扫描查看目标机开 455 端口没,没开就不用考虑下一步了
然后就是直接启用 msf,去查 cve-2017-0143 的集成模块search cve-2017-0143
|
|
是能看到目标机上的永恒之蓝漏洞是可以利用的,接下来就是使用攻击模块了
|
|
同时选择载荷(shell code),这里用的是回连至客户端(shell) 的 payload
|
|
这里我用的本地监听端口是 8888,默认是 4444,然后直接run
就行了
这里能看到进来直接就是 system
权限。
如果目标机还开了 3389
端口的话,还可以尝试去获取用户登录密码。
先用 hashdump
获取 hash
值。
mimikatz
是一个知名的密码提取神器。它支持从 Windows
系统内存中提取明文密码、哈希、PIN
码和Kerberos
凭证等,meterpreter
中集成了这款工具
执行 load kiwi
即可加载该工具,然后运行命令 creds_all
, 导出 hash
|
|
拿到用户登录的账户密码就可以尝试远程连接了,如果连接请求被拦截了,可以尝试将端口转发到攻击机的本地端口进行连接
|
|
碰到 Core(error): tcp_connect(), unable to connect to 192.168.1.108
这种情况,那就是防火墙没有开启,使用 enable_rdp
脚本开启
|
|
该脚本位于 /usr/share/metasploit-framework/modules/post/windows/manage/enable_rdp.rb
通过 enable_rdp.rb
脚本可知:
-
开启 rdp 是通过 reg 修改注册表
-
添加用户是调用 cmd.exe 通过 net user 添加
-
端口转发是利用的 portfwd 命令