漏洞公告:
https://security.yonyou.com/#/patchInfo?identifier=563f888c335e4824a7a3c08353e597dd

下载漏洞补丁可以看到对u8c.impl.uap.def.action.RefDefAPIQueryAction做了非法字符和关键词的校验

查看相关路由\webapps\u8c_web\WEB-INF\web.xml

跟进nc.bs.framework.server.extsys.ExtSystemInvokerServlet#doAction方法,ExtSystemServerEnum是一个枚举类,我们的request.getRequestURI()必须以/u8cloud/yls、/u8cloud/extsystem/dst、/u8cloud/api/、/u8cloud/openapi/四个常量之一为开头。
当我们访问/u8cloud/openapi/,然后serviceName就被赋值为u8cloud_openapi


继续往下跟进到getServiceObject()方法,会根据serviceNamei去找对应的类,也就是/modules/uap/META-INF/P_API.upm中的配置,找到u8c.server.APIOpenServletForJSON类



跟进u8c.server.APIOpenServletForJSON#doAction方法

跟进u8c.server.APIOpenController#forWard方法,创建了InputDataVO对象,然后调用arseInputParameter获取传入的参数needStackTrace、trantype、isEncrypt、uniquekey并赋值


继续往下可以看到获取传入的appcode并做校验,必须包含枚举类ExtSystemKeyEnum中的值,并且当appcode等于lbsj、esn、huo、ubz时就会跳过token的校验


继续往下跟进,这里会通过一系列反射调用u8c.impl.invoke.json.InvokeWithJSonImpl#invoke->u8c.bs.invoke.bp.JSONInvokeBP#invoke->u8c.bs.config.BillConfigFileParse#queryConfigVO,根据传入serverName的值也就是/u8cloud/openapi/后的路径uapbd.refdef.query,从对应配置文件uapbd.config中读取对应的类



最终到了开始的的u8c.impl.uap.def.action.RefDefAPIQueryAction类,可以看到直接拼接refName并执行sql语句


1 | POST /u8cloud/openapi/uapbd.refdef.query?appcode=huo&needStackTrace=123&trantype=&isEncrypt=N&uniquekey= HTTP/1.1 |