“工欲善其事,必先利其器”。本章将介绍使用虚拟机的硬件要求、Kali Linux系统的获取方式、Kali Linux中Metasploit、Cobalt Strike、Empire这3种渗透测试框架的使用方法、跨平台解决方案PowerShell的基本操作方法,以及一些提权辅助工具和Windows系统工具的使用方法。
通过本章的学习,读者将掌握攻击机的搭建和提升权限所需辅助工具的使用方法,为后续章节的实操阶段提供必要的支持,可以在实战流程中起到事半功倍的效果。
虚拟机是通过软件模拟出来的操作系统,可以根据用户的需求分配资源,定制硬件,指定RAM、CPU和硬盘等,并且支持创建快照。当虚拟机安装的系统出现错误或无法启动时,可以通过“恢复快照”功能来恢复到之前设置的正常系统状态。
为了防止对公共系统、计算机和网络的破坏,本书全部实验均在本地搭建的虚拟计算机和配置的虚拟网络下进行。使用虚拟机的好处是可以快速部署渗透测试人员所需要的环境并完成测试。
虚拟机软件可以选择VMware或VirtualBox,安装过程就不赘述了。若要安装虚拟机,则需要保证计算机软硬件满足以下条件:
❑应为Windows、Linux或Mac OS操作系统;
❑至少需要4GB运行内存,最好是8GB以上;
❑至少需要100GB的存储空间;
❑支持虚拟化的处理器。
Kali Linux是一款基于Debian的开源Linux发行版,适用于各种渗透测试任务。它包含大量实用工具和辅助程序,如Nmap、Metasploit、Burpsuite等,可以提供从信息收集到最终报告的完整服务。Kali Linux的功能非常强大,并且可以永久免费使用。现在,Kali Linux可以安装在各种平台上,包括云服务器、移动终端、U盘、虚拟机以及WSL(适用于Linux的Windows子系统)。
访问官网获取Kali Linux,选择Virtual Machines,如图2-1所示。
图2-1 获取Kali Linux
首先根据所使用的虚拟机软件下载对应的Kali Linux种子文件(如图2-2所示),然后加载种子文件,下载完整的Kali Linux系统文件。
图2-2 下载对应的种子文件
下载完成后解压,在虚拟机中打开,如图2-3和图2-4所示。
图2-3 解压虚拟机文件
图2-4 打开虚拟机文件
单击“开启此虚拟机”选项,使用账号和密码(账号和密码均为kali)即可使用这个渗透测试人员人手必备的神器,如图2-5和图2-6所示。
图2-5 Kali的登录界面
图2-6 Kali的桌面及内置工具分类
WSL是指适用于Linux的Windows子系统(Windows Subsystem for Linux)。使用WSL可以无须安装虚拟机而直接在Windows上运行Linux环境,包括使用Linux命令行,运行Linux应用程序。如果要使用WSL,那么当前系统版本必须为Windows 10 2004或更高版本(Build 19041及更高版本)。
Kali Linux可以在Windows系统上以WSL的方式运行,如图2-7所示。
图2-7 Kali Linux的WSL方式
首先启用Windows功能中的“适用于Linux的Windows子系统”,位置为控制面板→程序→程序和功能→启用或关闭Windows功能→适用于Linux的Windows子系统,启用后需重启计算机,如图2-8所示。
图2-8 启用WSL
或使用PowerShell cmdlet命令行以管理员身份执行命令来启用,如图2-9所示。
图2-9 命令行启用WSL
执行之后输入字母“Y”,重启计算机。
重启后打开Microsoft Store(微软商店),搜索Kali Linux,如图2-10所示。
单击“获取”按钮即可下载并安装Kali WSL,如图2-11所示。
按〈WIN+R〉组合键打开“运行”对话框,输入“kali”,稍作等待后创建账户和密码,如图2-12和图2-13所示。
创建完成后,便打开了Kali WSL命令行。当前Kali是削减版本,很多工具都没有安装,接下来需要做的是修改高速稳定镜像源,安装完整版Kali。
图2-10 在微软商店搜索Kali Linux
图2-11 获取Kali WSL
图2-12 运行Kali
执行以下命令修改镜像源文件,配置源如图2-14所示。Kali源可以通过搜索引擎搜索到。
图2-13 配置账户和密码进入Shell
图2-14 配置源
保存修改后,执行清除和更新缓存索引、更新软件包、更新依赖关系的命令,如图2-15所示。
图2-15 执行清除和更新命令
更新完成后,执行以下命令开始安装完整版Kali,如图2-16所示。
图2-16 安装完整版Kali
等待一段时间,下载和安装结束后,即可使用完整版Kali WSL。
1.Metasploit简介
Metasploit是一个非常强大且灵活的渗透测试框架,集成了发现漏洞、验证漏洞、扫描网络、逃避检测等多种功能,可以实现自动化攻击过程,提供快速而精确的渗透测试结果。因为Metasploit是一个基于Ruby开源的框架,所以提供了深度可定制化功能,渗透测试人员可随意访问代码并添加自定义模块。Metasploit包含庞大的漏洞库,当前有超过2200个的漏洞利用模块,涵盖Windows、Linux、Android、Java等系统和程序。Metasploit已经成为安全行业中最受欢迎的渗透测试框架之一,预装在Kali Linux中。
2.快速开始
(1)启动Metasploit
执行以下命令启动框架。msfconsole是默认的Metasploit控制台界面,它提供了与框架交互所需要的所有命令以及命令的制表符(Ta b键)补全功能,如图2-17所示。
执行以下命令来获取帮助,本节后续会列举一些常用的命令。
图2-17 msfconsole界面
(2)数据库
msfdb是一个支持与Metasploit联动的数据库管理工具,它用于存储使用MSF的过程中获取到的主机数据、漏洞利用结果和密码私钥等信息。另外,支持从Nessus或Nmap等外部工具向msfdb数据库导入扫描结果。msfdB还提供了结果导出的功能。
执行以下命令来查看数据库状态,如图2-18所示。
图2-18 查看数据库状态
执行以下命令来初始化数据库,如图2-19所示。该命令只需在第一次使用Metasploit时执行。
图2-19 初始化数据库
初始化完成后,自动连接到数据库,执行以下命令来查看数据库状态,如图2-20所示。
图2-20 查看数据库状态
在msfconsole命令行中,也可以使用以下命令来查看数据库连接状态。
连接数据库与否并不影响正常使用MSF。执行以下命令可导出数据库内容。
(3)模块
Metasploit内置了大量的利用模块。为了快速查找渗透测试工作需要使用的模块,可以在msfconsole中执行“search”命令来进行指定类型模块的搜索,命令如下:
以上命令的含义是查找在Windows平台中可被利用的本地权限提升的系统漏洞或应用程序漏洞的攻击模块,如图2-21所示。
❑参数“platform”指定操作系统或运行平台;
❑参数“type”指定利用模块类型。
图2-21 使用“search”命令查找模块
下面介绍MSF模块。
笔者当前使用的是MSF v6.1.39-dev版本,此版本包含七大模块,分别是auxiliary、encoders、evasion、exploits、nops、payloads、post,分别对应MSF框架的文件夹/usr/share/metasploit-framework/modules/中的7个文件夹,如图2-22所示。
图2-22 模块文件夹
表2-1列出了各模块的名称和功能,渗透测试人员可以根据不同的阶段来选择适合的模块。
表2-1 各模块的名称和功能
(续)
(4)执行攻击
当通过“search”命令找到适合的模块后,一般进行如下操作:
1)执行“use”命令加载该模块;
2)执行命令“show options”列出模块所需要配置的参数,Required值为yes代表该参数是必须设置的;
3)执行命令“set<参数><值>”来配置参数;
4)执行“set”命令指定payload;
5)配置payload所需的参数;
6)执行命令“exploit”或“run”来启动该模块。命令exploit可添加参数-j -z,此时的完整命令为“exploit-j-z”,功能是在后台运行payload并持续监听;
7)使用set命令设置完参数之后,可以执行命令“show missing”来列出遗漏的参数。
表2-2列举了一些“set”命令常用的参数。在设置好payload后,可以执行命令show advanced来列举出可配置的高级参数。
表2-2 “set”命令常用的参数
(5)Payload
Payload(攻击载荷)是对目标攻击成功之后在目标上运行的代码。MSF的Payload分为3种:Singles Payload、Stagers Payload、Stages Payload。
❑Singles Payload(单一载荷)通常是一个独立的程序,可执行简单的操作并退出,如运行一条命令、弹出计算器等。例如,windows/exec是一个单一载荷。
❑Stagers Payload是一小段代码,用于在攻击机和靶机之间创建自定义的通信通道和协议。这种Payload精简且可靠,可以将通信和实际攻击行为分开。使用Stagers Payload可以下载复杂的Payload,将其注入内存,传递执行。
❑Stages Payload是由Stagers Payload下载的有效负载,这种Payload可以提供没有大小限制的高级功能,如meterpreter。
当选择一个利用模块之后,执行命令“show payloads”可列出当前模块支持的Payload,如图2-23所示。
图2-23 列出当前模块可用的Payload
(6)msfvenom
msfvenom能够为渗透测试人员针对特定目标自定义生成各种格式的有效负载、木马、漏洞利用等。此外,它还可以对有效负载进行编码等操作,有助于突破防火墙或防病毒软件的保护,从而提高渗透测试的成功率。它的前身是msfpayload和msfencode。
执行以下命令可以列出所有可用的Payload(攻击载荷),如图2-24所示。
图2-24 列出所有可用的Payload
多数情况下,使用msfvenom生成的有效负载是结合MSF的监听模块exploit/multi/handler来使用的,若木马文件成功在目标机器运行,则handler模块会与目标机器建立起连接。这个过程一般称为“使用MSF反弹一个Shell”。如图2-25所示,此时获得了一个meterpreter Shell。
图2-25 meterpreter Shell
表2-3列举了msfvenom常用的参数。
表2-3 msfvenom常用的参数
表2-4列举了一些针对不同平台生成的常用Payload命令。
表2-4 针对不同平台生成的常用Payload命令
(7)meterpreter
前面提到,生成的有效负载在目标机器上运行成功,就获取到了meterpreter Shell。meterpreter是漏洞利用代码成功在目标机器上执行并与目标机器建立连接后返回的一个多功能会话,可以理解为是一个高级的远程控制。meterpreter的功能包括文件操作、网络操作、系统操作、用户接口操作、摄像头操作、提权操作、密码操作等。meterpreter存在和工作于目标的内存中,具有很高的隐蔽性。
表2-5列出了meterpreter Shell常用的命令。
表2-5 meterpreter Shell常用的命令
(续)
1.Cobalt Strike简介
Cobalt Strike是基于Java的C/S架构的后渗透测试平台。它能够支持多人团队进行有针对性的协同作战,并实现信息、会话和攻击资源的共享,如图2-26所示。此平台拥有非常强大的内网穿透能力和多样化的攻击方式。它还集成了端口转发、服务扫描、自动化溢出、木马生成、钓鱼攻击、站点克隆和浏览器自动攻击等多种功能。此外,该平台还提供了丰富的报告和日志功能,可帮助用户跟踪攻击过程、管理攻击策略和生成演示报告。尽管Cobalt Strike是商业软件,但在安全人员中非常流行,并被广泛应用于安全测试、漏洞评估和红队行动等领域。它还提供了可扩展的API和脚本语言,用户能够自定义和自动化攻击过程。
Cobalt Strike客户端使用图形化界面,操作更直观,执行自动化攻击更为便捷。
图2-26 Cobalt Strike协同操作
2.快速开始
(1)启动Cobalt Strike
teamserver(团队服务器)是Cobalt Strike的服务端部分,它可以接受客户端连接、Beacon回调,默认运行在50050端口。通过修改teamserver文件可以改变默认端口。
给予teamserver文件可执行权限后,执行以下命令启动团队服务端程序,如图2-27所示。
这个配置文件是Cobalt Strike可定制的Malleable C2文件,可以通过一些配置来改变与团队服务器之间通信时的流量特征和行为特征,使Cobalt Strike的流量变得灵活且难以检测,从而规避安全防护软件。终止日期的格式是“年-月-日”,在此日期后,有效负载将停止工作。服务器IP和密码是必需参数,配置文件和终止日期是可选参数。
图2-27 启动团队服务端程序
(2)建立连接
打开客户端(这里使用的是汉化版本),渗透测试人员可通过客户端连接到团队服务器,填写好团队服务器IP地址、密码、用户名等信息后即可连接,如图2-28所示。
图2-28 客户端界面
团队成员也可以选择“Cobalt Strike”→“新建连接”命令或单击快捷按钮中的 按钮来加入团队服务器,如图2-29所示。
图2-29 加入团队服务器
(3)功能介绍
Cobalt Strike的功能区域如图2-30所示。
图2-30 Cobalt Strike的功能区域
选择“Cobalt Strike”→“偏好设置”命令,打开“偏好设置”对话框,从中可设置页面字体颜色、控制台的颜色、拓扑图颜色等外观信息,如图2-31所示。
图2-31 Cobalt Strike偏好设置
查看或删除已信任的服务器指纹,如图2-32所示。
图2-32 Cobalt Strike服务器指纹设置
查看和删除已保存的连接配置信息,如图2-33所示。
图2-33 Cobalt Strike连接配置信息设置
(4)监听器
在目标服务器运行代码或执行任何攻击的基本要求是与目标机器建立连接。监听器(Listener)类似于MSF中的handler模块,在目标机器运行有效负载后等待Beacon回连到团队服务器,建立会话。Beacon是Cobalt Strike有效负载的名称,用于与Cobalt Strike服务器进行通信,提供远程访问和控制目标系统的功能。
选择“Cobalt Strike”→“Listener”命令,或单击快捷按钮中的 按钮,创建监听器。
表2-6是对Cobalt Strike几种监听器的简单介绍。
表2-6 Cobalt Strike几种监听器的简单介绍
(5)攻击模块
Cobalt Strike内置多种攻击方式。用户可根据需求、目标环境来选择和配置攻击模块。选择攻击方式,如图2-34所示。
图2-34 选择攻击方式
选择监听器,如图2-35所示。
图2-35 选择监听器
生成利用程序后在目标机器执行,如图2-36所示。
图2-36 在目标机器执行
当利用程序在目标服务器上执行成功后,会与团队服务器建立连接,在Cobalt Strike客户端的目标列表界面会列出已经上线的机器和机器的大致信息,如图2-37所示。
图2-37 建立连接
表2-7列出了Cobalt Strike的攻击模块。
表2-7 Cobalt Strike攻击模块
(6)交互
当与目标机器建立连接后,需要进行后续操作,如执行命令,那么此时可以选择已经建立连接的机器,单击鼠标右键,选择“会话交互”命令,即可返回一个命令执行对话框,可以进行文件操作、横向移动和转发端口等操作,如图2-38所示。
图2-38 选择“会话交互”命令
执行“help”命令查看帮助,如图2-39所示。
图2-39 查看帮助
Beacon默认是异步交互(低频慢速的通信模式)的,在输入命令后不会立即执行,而是进入队列,等待Beacon下次回连检测时接受,并逐条执行后回显。Beacon默认60s进行一次回连检测,执行命令“sleep 0”,将回连检测时间改为0,则交互模式变为同步交互。这样,执行命令可以加快回显速度,如图2-40所示。
图2-40 同步交互
Beacon的回连检测时间可根据实际情况来改变,执行命令“sleep 30”,意味着每隔30s进行一次回连检测。如果执行命令“sleep 30 15”,则是指以15%的抖动因素休眠30s,意味着Beacon在每次回连检测时将其睡眠时间最多改变15%。
为保证权限稳定,可通过进程注入功能将Payload注入一个不会消失且不会引起怀疑的进程上,从而获取一个新的Beacon,并将此Beacon设置为较长的睡眠时间,如图2-41所示。也可执行如下命令来实现上述操作。
图2-41 进程注入
注入成功后,会有新的连接建立,连接进程为我们选择注入的进程,如图2-42所示。
图2-42 注入成功
如果执行命令时出错,则执行命令“clear”可清除命令任务队列。
表2-8列出了常用的Beacon命令及其描述。
表2-8 常用的Beacon命令及其描述
(续)
(7)Aggressor脚本
Aggressor脚本是Cobalt Strike 3.0及以上版本中内置的脚本语言,可以理解为简化工作流程的宏脚本。Aggressor Script允许修改和扩展Cobalt Strike,是基于Sleep语言编写的。我们可以导入一些现成的脚本来让工作更加便捷。选择“Cobalt Strike”→“脚本管理器”命令,在脚本管理器中可加载脚本,如图2-43所示。
图2-43 脚本管理器
本书介绍的是本地权限提升,所以可以搜寻公开的脚本来加载,或编写提权的脚本来加载,如图2-44所示。
右键选择目标机器,选择“权限提升”命令,在打开的“权限提权”对话框中设定好监听器,选择提权脚本的方式,即可执行提权操作,如图2-45所示。
图2-44 加载脚本
图2-45 权限提权设置
1.Empire 4简介
Empire原项目已经停止更新,现在的Empire 4是由BC-SECURITY分叉而来的。
Empire 4是一个可快速部署的灵活的后渗透测试利用框架,它适用于红队和渗透测试人员,是之前的PowerShell Empire和Python EmPyre项目的合并版本。Empire 4支持多人协同作战,实现了无需powershell.exe即可运行PowerShell Agent的功能,可用于逃避检测的完全加密通信。
2.快速开始
(1)启动Empire
Empire 4内置在Kali Linux中,与Cobalt Strike类似,也是C/S架构。
执行以下命令可启动服务器端。
显示图2-46所示的画面时,说明Empire服务器端启动成功。
图2-46 启动服务器端成功
执行以下命令可启动客户端。
显示图2-47所示的画面时,说明Empire客户端启动成功。
图2-47 启动客户端成功
(2)连接服务器端
在客户端执行以下命令可连接服务器端。
服务器端和客户端都会回显连接成功,如图2-48所示。
图2-48 连接服务器端
若想要连接到其他服务器端,则可执行以下命令,如图2-49所示。
图2-49 连接其他服务器端
服务器端IP地址和账户、密码等连接配置信息默认保存在以下文件中,按需修改即可,如图2-50所示。
图2-50 连接配置文件
在服务器端设置的连接到本机的账户、密码等信息保存在以下文件中。
(3)创建监听
执行以下命令,创建不同种类的监听器,按〈Ta b〉键列出可用的监听器,如图2-51所示。
图2-51 可用的监听器
表2-9列出了Empire 4所支持的监听器及功能。
表2-9 Empire 4所支持的监听器及功能
以http监听器为例,执行以下命令可使用监听器,如图2-52所示。
图2-52 使用http监听器
执行命令“options”列出需要配置的参数,Required的值为True则为必填参数,False为可选参数。
执行命令“set<参数名称><值>”可设置某个参数的值,如图2-53所示。
图2-53 设置某个参数的值
执行命令“execute”可生成监听器,执行“listeners”命令可列出监听器,如图2-54所示。
如果某个参数配置错误或有变更,则可执行以下命令来修改监听器参数,如图2-55所示。
图2-54 生成并列出监听器
图2-55 修改监听器参数
执行命令“enable/disable/kill<监听器名称>”可启用、禁用或清除监听器。
(4)Stager
Stager是运行在目标机器上的恶意软件或代码。执行以下命令可列出可用的方式。
可以针对不同平台选择合适的利用方式,如图2-56所示。
图2-56 选择利用方式
执行以下命令,设置利用方式为Windows下的hta格式的木马。
执行命令“options”可列出需要配置的参数,Required的值为True则为必填参数,False为可选参数。
执行命令“set<参数名称><值>”来设置某个参数的值,如图2-57所示。
图2-57 设置某个参数的值
监听器是必须设置的。
执行命令“execute”可生成利用程序,如图2-58所示。
图2-58 生成利用程序
在目标机器上执行后建立连接,会显示有些活动的agent进入,如图2-59所示。
图2-59 成功建立连接
(5)交互
执行命令“agents”可以列出所有的agent及其信息,包括IP、用户名等,如图2-60所示。
图2-60 列出所有的agent及其信息
为了区分agent,可执行以下命令来修改agent的名称,如图2-61所示。
图2-61 修改agent名称
执行以下命令,与agent交互,如图2-62所示。
图2-62 与agent交互
执行命令“help”可查看帮助。
执行命令“display”可列出agent的一些属性,如图2-63和图2-64所示。
图2-63 列出目标机器信息
图2-64 列出目标机器系统版本
从agent下载文件到本机,如图2-65所示。
图2-65 下载文件到本机
下载的文件默认保存在文件夹/var/lib/powershell-empire/server/downloads/<agent名称>的子目录中。
执行命令“history”可查看已经执行的任务和任务回显信息,如图2-66所示。
图2-66 查看任务及回显信息
执行命令“info”可查看完整的agent属性,如图2-67所示。
执行命令“script_import”可将本地PowerShell文件上传至agent内存中,如图2-68所示。执行命令“script_import-p”弹出“Select file”(选择文件)对话框,从中可选择需要上传的文件,如图2-69所示。
图2-67 查看完整的agent属性
图2-68 将本地PowerShell文件上传至agent内存中
执行以下命令,运行已经上传到内存中的PowerShell文件,如图2-70所示。
图2-69 “Select file(选择文件)”对话框
图2-70 执行PowerShell文件中的函数
执行以下命令,在agent上执行cmd命令,如图2-71所示。
从本机上传文件到agent,如图2-72所示。
图2-71 执行cmd命令
图2-72 上传文件至agent
执行命令“upload-p”可弹出“Select file”对话框,从中选择文件进行上传,如图2-73所示。
图2-73 选择上传文件
执行以下命令,获取agent的进程信息,如图2-74所示。
图2-74 获取agent进程信息
执行以下命令,获取agent桌面截图,如图2-75所示。
图2-75 获取agent桌面截图
屏幕截图文件默认保存在/var/lib/powershell-empire/server/downloads/<agent名称>/Get-Screenshot/文件夹中(该路径为绝对路径),如图2-76所示。
图2-76 截图保存的位置(图中路径为相对路径)
执行以下命令可进行键盘记录,如图2-77所示。
图2-77 进行键盘记录
(6)模块
Empire 4提供了大量的辅助功能,这些功能以模块和插件的形式存在。目前,Empire 4内置了400多个模块,分别使用PowerShell、Python和C#编写。
表2-10列出了Empire 4的几大模块及功能。
表2-10 Empire 4的模块及功能
使用模块的方法如下:
执行命令“usemodule<模块名称>”来使用模块,如图2-78所示。
图2-78 使用模块
Required为True代表该参数是必填的。
执行命令“set<参数名><参数值>”来添加参数,配置好参数后,执行命令“execute”启动模块即可,如图2-79所示。
图2-79 设置参数并启动模块
什么是PowerShell?
PowerShell是一个以.NET Framework技术为基础的跨平台任务自动化解决方案,它由命令行、脚本语言和管理框架组成,并可运行于Windows、Linux和Mac OS操作系统上(使用PowerShell Core自动检测字符编码并识别Linux和Windows下的换行符,使其能够跨平台运行)。PowerShell是一种现代化命令行工具,它的Shell不仅包含其他流行的Shell功能,还支持.NET对象,并内置了上百种cmdlet工具。这些功能使其完全能够处理日常的系统管理任务,并具有极高的功能性和灵活性。
渗透测试人员使用PowerShell的好处是:
1)有多种方法运行PowerShell代码或脚本,可以将PowerShell利用脚本(扩展名为.ps1)下载到本地导入后使用,还能将PowerShell代码从远程服务器加载至内存中运行,实现无文件落地。很多安全产品都难以检测到它的活动。
2)PowerShell是一个强大的脚本语言,可以轻松编写脚本来完成各种任务,如收集系统信息、利用代码等。
3)PowerShell是Windows操作系统的一部分,与其他Windows工具集成得非常好,如Windows Management Instrumentation(WMI)和Active Directory。
4)PowerShell提供了访问Windows API的能力,这使得渗透测试人员能够使用PowerShell来执行各种高级任务,如注册表修改、进程注入等。
5)PowerShell拥有丰富的模块和插件生态,这使得渗透测试人员能够轻松地扩展其功能并获得更多的工具和技能。
现在越来越多的渗透测试工具和利用代码使用PowerShell开发,可扩展性很强。
在PowerShell命令行中可以通过“$PSVersionTable”内置变量来查询PowerShell版本信息,回显字段中PSVersion字段的值即为版本号,如图2-80所示。
也可以通过内置变量的值“$host.Version.ToString()”来查看版本,如图2-81所示。
PowerShell cmdlet是PowerShell中由动词和名词组成的用于执行特定任务的命令,如“Get-Process”“New-Item”等。PowerShell内置了大量的cmdlet命令,用于执行各种日常操作,如查询系统信息、修改系统设置、管理服务和进程等。
图2-80 查看版本方法1
PowerShell的执行策略可以限制脚本的运行,防止未经授权的更改和访问,从而减少系统被攻击的风险,提高系统安全性。默认情况下,PowerShell的执行策略是Restricted(受限制的),可以根据需求来更改执行策略。
图2-81 查看版本方法2
执行cmdlet命令“get-executionpolicy”可查看当前的执行策略,如图2-82所示。返回值为Restricted,则代表当前执行策略不允许导入脚本运行。
图2-82 查看当前执行策略
在此策略下是无法导入脚本的,会报错,如图2-83所示。
图2-83 导入脚本失败
当需要更改当前的执行策略时,以管理员身份执行命令“Set-ExecutionPolicy<策略名称>”即可。如果想允许所有脚本导入并运行而不显示警告消息,则以管理员身份执行cmdlet命令“Set-ExecutionPolicy Bypass”后输入“y”即可,如图2-84所示。
图2-84 修改执行策略为允许任意脚本
表2-11列出了策略名称和策略含义。
表2-11 策略名称和策略含义
这里执行cmdlet命令设置的执行策略默认是设置给本地所有用户的,可以执行以下cmdlet命令查看PowerShell执行策略列表,如图2-85所示。
图2-85 执行策略列表
❑MachinePolicy:组策略为计算机上的所有用户设置的执行策略;
❑UserPolicy:组策略为计算机上的当前用户设置的执行策略;
❑Process:为当前PowerShell会话设置的执行策略;
❑CurrentUser:为当前用户设置的执行策略,存储在HKEY_CURRENT_USER注册表子项中;
❑LocalMachine:为所有用户设置的执行策略,存储在HKEY_LOCAL_MACHINE注册表子项中。
如果以上全部的执行策略均为Undefined,则有效的执行策略为Restricted。
由于设置执行策略需要管理员权限,而提权的目的就是获得管理员权限,那么当前获取到一个CmdShell时,该怎么绕过这个执行策略呢?
把PowerShell脚本上传至目标服务器后,cmd绕过执行策略导入脚本,执行如下命令可成功导入脚本,如图2-86所示。
或
图2-86 绕过执行策略并加载脚本
执行如下命令可以从远程服务器加载PowerShell脚本至内存中,如图2-87所示。
图2-87 加载PowerShell脚本到内存中
在cmd命令行下执行如下命令,加载远程脚本并执行脚本中的函数,如图2-88所示。
图2-88 在cmd命令行下加载脚本并执行脚本中的函数
在实战过程中,可以为PowerShell命令添加“-NoProfile”“-w hidden”等参数,完整命令行如下:
❑参数-w即-WindowStyle,为窗口模式,设置为hidden则隐藏窗口;
❑-NoProfile表示不加载PowerShell的配置文件;
❑-noexit表示执行后不退出Shell;
❑-ep bypass表示绕过执行策略。
添加这一系列参数,可以使渗透测试人员的行为更加隐蔽。
当在WebShell中执行命令时,经常会遇到由于引号转义等问题而导致命令执行失败的情况。将要执行的命令或文件进行base64编码,可以有效地避免发生字符解析、转义等问题。为了方便,直接使用PowerShell渗透测试框架nishang中的脚本Invoke-Encode.ps1进行编码,如图2-89所示。命令如下:
图2-89 调用nishang中的脚本编码
编码后的文件保存在encodedcommand.txt文件中,那么此时想要加载payload.ps1,就可以执行:
WinPEAs(Windows Privilege Escalation Awesome Scripts)是一组基于PowerShell和C#编写的脚本集合,用于帮助安全研究人员和渗透测试人员发现Windows系统中的潜在漏洞和提升权限的机会。运行此程序需.NET大于或等于4.5.2版本,可以从GitHub上获取可执行文件、批处理文件或源代码自行构建。
表2-12列出了WinPEAs常用的参数及功能。
表2-12 WinPEAs常用的参数及功能
PowerUp是基于PowerShell开发的Privesc模块下的一个脚本,包含多个功能函数,用于检查Windows服务器中可能导致权限提升的错误配置。表2-13列出了PowerUp常用的函数及其功能。
表2-13 PowerUp常用的函数及其功能
(续)
调用全部模块检测的命令如下:
SharpUp是PowerUp的.NET版本。表2-14列出了SharpUp常用的模块及功能。
表2-14 SharpUp常用的模块及功能
(续)
调用全部模块检测的命令如下:
Accesschk是一个Sysinternals(Windows系统工具集)命令行工具,可以通过直观的界面快速列出特定用户或组对资源(包括文件、目录、注册表项、全局对象和Windows服务)的访问权限。表2-15列出了Accesschk常用的参数及其功能。
表2-15 Acessschk常用的参数及其功能
下面列举了一些在提权过程中常用的命令。
❑检查用户或用户组对服务的访问权限。
❑检查驱动器中所有弱文件夹的权限。
❑检查某个驱动器的所有弱文件权限。
❑检查某个注册表项的权限。
icacls是Windows系统内置的工具,可用于显示或修改指定文件的自主访问控制列表(DACL),并将存储的DACL应用于指定目录中的文件。在权限提升阶段,常用的功能就是显示文件或文件夹的DACL。cacls是适用于低版本Windows的工具,现已弃用。执行以下命令可查看某文件或文件夹的DACL,如图2-90所示。
图2-90 查看DACL
或
表2-16列出了icacls命令的返回值及其含义。
表2-16 icacls命令的返回值及其含义
(续)
下面列举了一些在提权过程中常用的命令。
❑列出Windows程序安装文件夹中的Everyone、Users组、经过身份验证的组具有完全访问权限的项目。
❑列出Windows程序安装文件夹中的Everyone、Users组、经过身份验证的组具有修改权限的项目。