蓝凌OA WechatLoginHelper.do SQL注入漏洞复现分析

蓝凌OA的wechatLoginHelper.do接口处存在SQL注入漏洞,攻击者可以利用 SQL 注入漏洞获取数据库中的信息(管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

漏洞简介

蓝凌OA的wechatLoginHelper.do接口处存在SQL注入漏洞,攻击者可以利用 SQL 注入漏洞获取数据库中的信息(管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

资产测绘搜索语句

hunter:app.name="Landray 蓝凌OA

0.png

路由与鉴权分析

通过分析web.xml配置文件,我们可以发现以下路由定义。

7.png

定义了一个名为 springmvc 的 Servlet,并将其映射到多个 URL 模式。包括所有以 /data/ 开头的 URL,所有以 /api/ 开头的 URL,所有以 .do 结尾的 URL。

查看KmssSpringDispatcherServlet,分析可以知道继承DispatcherServlet,并添加了一些自定义的初始化和处理逻辑。自定义的上下文创建、刷新处理逻辑、异常处理以及静态资源处理。用于接收并处理所有进入的 HTTP 请求。由此我们知道*.do路由为springmvc架构。

6.png

我们可以发现配置文件design.xml中的配置,这个配置文件中定义了一些与“第三方微信”模块相关的设置。有包含模块定义、请求权限、首页配置和微信集成后台配置。

5.png

path="wechatLoginHelper*":这个属性定义了请求的路由模式。也就是路由以 wechatLoginHelper 开头,后面可以跟随任意字符的路由的defaultValidator属性="true"这个属性表示对于该路由的请求验证使用默认验证器。在这里,它被设置为 true,也就是任何用户都可以访问这个请求,无需权限验证。

相应的design.xml加载流程在/sys/config/design/SysConfigs.java中,这里就不过多解释。

漏洞分析

通过查看相应配置的spring-mvc.xml文件,可以发现如下定义,将"/third/wechat/wechatLoginHelper.do" URL 映射到 WechatLoginHelperAction类。

4.png

查看WechatLoginHelperAction类定位到漏洞方法edit相应代码。

3.png

先从从请求中获取 openidnicknameimage 和用户 ID (uid) 的参数。这里输入的uid会传参给id,然后进行身份验证判断,if (id == null || "".equals(id))这里方id为空表示用户未登录。后续会通过方法UserUtil.getKMSSUser() 获取当前用户对象,然后通过user.getUserId()方法获取id。因为id为注入点,这里直接让id不为空就可跳过判断。

然后会通过getServiceImp(request).findList("fdEkpid='" + id + "'", null);方法进行id查询,这里也是注入点,可以看到uid从输入到进入findList方法,除了一次是否为空的判断,没有任何过滤。

这里继续跟进findList方法到DAO层。

2.png

通过调用 createHbmQuery 方法,创建了一个 Hibernate 查询(Query)对象。然后通过**list()**方法执行查询,并将结果放入 rtnList 中并返回查询的结果列表。

我们继续分析是否有回显,findList方法将查询到的值传给l,随后进行判断if (l == null || l.size() == 0)检查查询结果是否为空,为空则表明该用户尚未创建配置,然后进行相应配置。若不为空,则配置存在,取出第一个配置对象 wc,然后根据请求参数更新 wfwc 的属性。没有报错的话,最后会通过return getActionForward("edit", mapping, wf, request, response);转发到编辑视图,获得回显。

漏洞复现

1.png

注入出管理员密码.

参考

https://blog.csdn.net/qq_39342001/article/details/137354047

1 条评论

liangjian
结尾那里没有成功啊,那个是fdId, 并不是fdPassword