AEM基础架构与安全边界

Adobe Experience Manager(AEM)作为企业级CMS,其核心由三部分组成:

  1. Dispatcher:前端缓存和防火墙,负责过滤恶意请求
  2. Sling框架:基于REST的内容处理引擎(攻击面最大)
  3. JCR仓库:Java内容存储库,节点数据可能存在权限问题

AEM架构示意图

典型漏洞场景分析

1. Sling脚本注入(CWE-94)

通过.html后缀注入服务器端脚本:

import requests
# 探测Sling Servlet解析漏洞
target = "http://aem.example/content/test.html"
payload = "${1+1}"
response = requests.get(f"{target}?param={payload}")
if "2" in response.text:
    print("存在Sling表达式注入")

2. JCR节点遍历(CWE-200)

利用CRXDE Lite查看敏感路径: 1. 访问/crx/de/index.jsp 2. 默认凭据admin:admin 3. 检查/etc/passwords等敏感节点

CRXDE界面

3. 默认配置缺陷

自动化扫描建议:

  • 使用aem-hacker工具包检测
  • 重点检查:
  • 未关闭的GraphQL端点
  • 开放的Sling Post Servlet
  • 旧版本Apache Felix控制台

测试工具链配置

OWASP ZAP优化策略

  1. /etc/login路径添加自定义扫描规则
  2. 启用Sling Injection主动扫描模板
  3. 设置*.example.com为排除域名(避免Dispatcher封禁)

Burp Suite插件开发

// 检测AEM版本信息
public void checkVersion(IHttpRequestResponse message) {
    String path = "/libs/cq/core/content/welcome.html";
    if(message.getUrl().getPath().contains(path)) {
        // 提取版本号的正则匹配逻辑...
    }
}

防护方案与审计

安全加固建议

  1. 配置Sling Filter拦截/etc路径请求
  2. 禁用开发工具(添加OSGi配置):
    <configurations>
        <property name="disable" type="Boolean">true</property>
    </configurations>

日志审计要点

  • 监控error.log中的异常堆栈
  • 设置警报规则:
  • 高频POST /bin/querybuilder.json请求
  • 非常规.jsp资源访问

实战挑战

访问测试环境(需Kali Linux):

docker run -p 4502:4502 aem-ctf:1.0

任务目标: 1. 获取/etc/shadow文件内容 2. 找到隐藏的管理员凭据 3. 提交PDF格式的分析报告(含漏洞CWE编号)

提示:尝试组合使用Sling POST和JCR节点遍历漏洞

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐