漏洞简介
红海云eHR系统中的BossIndexController(BossIndex.mc、BossIndex.mob等多个方法)模块存在SQL注入漏洞。攻击者可通过构造恶意SQL查询语句,绕过系统认证,实现对数据库的非法访问,获取敏感信息(如用户凭证、个人数据等),甚至在特定条件下可能导致数据库被完全控制,影响范围包括数据访问权限和系统控制权限。
影响版本
fofa语法
body="/RedseaPlatform/skins/images/favicon.ico"
漏洞分析
未授权路由
先看下 web.xml 里对于这些.mc、.mb和.mob后缀是如何校验的
最开始的CharacterEncodingFilter基础校验,编码校验,这里没有权限校验

接着往下看,进入AuthenticationProcessingFilter过滤器

这里是权限校验,校验.mc后缀,因此网上看到的poc都没有使用此后缀,因为需要权限校验!
接下来进入常见的dispatcherServlet过滤器

如图所示,这里没有权限校验,支持的url后缀列表如
*.mc
*.mob
*.mb
/messageInteface
/cdata
/fdata
/devicecmd
/getrequest
/getrequest.none
/token
/ectpdata
SQL注入
接下来进入本文的正题 BossIndexController ,看下它的实现逻辑

如图所示,支持的路由有"/BossIndex.mc", "/BossIndex.mob" 两种,结合之前的权限分析可知,我们可选择/BossIndex.mob 达到未授权访问此接口的目的。
getNumOfMembers
再看需要的参数params = {"method=getNumOfMembers"} 对应的 getNumOfMembers 方法里
String tree_code = req.getParameter("struTreeCode"); 参数struTreeCode ==> tree_code 然后 tree_code 被直接拼接进 sql1 和 sql12 sql语句后,无任何过滤或校验处理直接执行拼接后的SQL语句,从而造成SQL注入漏洞。其他几个方法亦如此,存在同样的sql注入漏洞,下面简单记录下它们的实现。
getNewStaffJoin

getNewStaffLeave

getNewStaffRetire

getJoinAndLeaveStaff

getTodayKaoQin

getEarlierWorkStaff

getAbsenceStaff

所有上述这些方法均存在一个或多个参数的直接拼接导致的SQL注入漏洞。
漏洞复现
POST /RedseaPlatform/BossIndex.mob HTTP/1.1
Host: redseaplatform.mrxn.net
Content-Type: application/x-www-form-urlencoded
method=getNumOfMembers&struTreeCode=SQLI_POC

成功延 6 秒(执行三次)

