漏洞原理
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 命令