
影响版本
3.5,3.6,3.6sp,5.0,5.0sp,5.1,5.1sp
poc
延时1.5s
1 | GET /u8cloud/openapi/so.saleorder.briefing?appcode=huo&isEncrypt=N |
漏洞原理
朴实无华的语句拼接
漏洞分析
路由映射分析
主要讲一下怎么分析出来路由的。
首先是看了一篇文章,知道了url是:/u8cloud/openapi/so.saleorder.briefing?appcode=huo&isEncrypt=N,也知道了漏洞类:u8c.bs.so.saleorder.action.SaleOrderBriefingAction
https://mp.weixin.qq.com/s/nwSs8mU_H-OBWTk2ZBxC9w
之后去idea全局搜索u8cloud/openapi:
找到了对应的servlet:nc.bs.framework.server.extsys.ExtSystemInvokerServlet
之后给漏洞类打上断点:
然后就能慢慢分析前面的调用栈了。
现在去找为什么so.saleorder.briefing能映射到漏洞类。看漏洞类前一个调用栈:
断点处,从so.saleorder.briefing找到了对应的漏洞类,于是跟进方法u8c.bs.invoke.bp.JSONInvokeBP#queryConfigVO:
再跟进u8c.bs.config.BillConfigFileParse#queryConfigVO:
发现是从/api/config里取,用everything搜索一下:
成功找到:
最后用环境搭建时的bat脚本,把所有.config文件copy到一起再添加到idea库中,方便后续直接在idea中查询:
请求参数分析
注意到,请求中是有get参数的:?appcode=huo&isEncrypt=N
分析一下这两个参数的作用。
具体逻辑在u8c.server.APIOpenController#forWard
首先是appcode,必须和枚举类当中的一个相等:
接下来是isEncrypt参数,具体逻辑如下:
会对我们的数据进行一次解密,isEncrypt代表原数据是否加密,不加密的话就会直接返回原数据。所以需要传入N。
SQL注入
都是简单的拼接,唯一要注意的就是用SQL Server的语法注入,然后由于执行三次查询,所以延时注入的时间会变成3倍:
漏洞修复
用了参数化查询,做了预编译: