通过微前台绕过鉴权执行SQL分析的方法

如何搜索公开类”Action”并发现潜在漏洞

当我们搜索这样的内容时:”public\Wclass\W\w{0,}Action”,有时会意外发现一些漏洞,比如最近发现的任意SQL执行漏洞。

简要说明

在对登录账号进行判断是否为admin/sysadmin账号后,获取Action参数,判断是否为”getDatasBySql”参数,然后直接调用该方法。该方法会检查HTTP实例并获取SQL和数据源参数,并执行SQL语句。如果执行成功,则将布尔参数设置为true,并返回SQL数据的JSON数组;否则,返回空回显。为了利用漏洞,可以构造类似于以下的访问链接:

http://127.0.0.1/mobilemode/Action.jsp?invoker=com.weaver.formmod

el.mobile.mec.servlet.MECAdminAction&action=getDatasBySQL&datasource=&sql=select%20\*%20from%20SystemSet

流程

  1. 登录权限验证: 在 /formmodel/mobile/mec/servlet/MECAdminAction.java 中对登录用户进行权限验证,判断是否为 admin 或 sysadmin。
  2. 获取用户会话: 在 /formmodel/mobile/manager/MobileUserInit.java 中通过HTTP请求获取会话参数 sessionkey,并进行处理。
  3. 查询用户权限: 在 /mobile/plugin/ecology/service/AuthService.java 中进行用户权限查询。
  4. 检查管理员权限: 在 /mobile/plugin/ecology/service/HrmResourceService.java 中根据用户ID查询是否为管理员权限。
  5. 关键步骤: 在 /formmodel/mobile/manager/MobileUserInit.java 中关键步骤是检查特定值是否为1,用于判断管理员权限。
  6. 执行SQL语句: 最终在 /formmodel/mobile/mec/servlet/MECAdminAction.java 中执行SQL语句。

可用利用链/调用方式

  • 寻找 getAction() 方法,并通过 URL 参数访问该方法。
  • 可以全局搜索 “getAction” 来找到调用该方法的地方。
  • 最终利用可通过以下方式进行:
图片[1]-通过微前台绕过鉴权执行SQL分析的方法-山海云端论坛

http://127.0.0.1/mobilemode/Action.jsp?invoker=com.weaver.formmodel.mobile.mec.servlet.MECAdminAction&action=getDatasBySQL&datasource=&sql=select%20*%20from%20HrmResourceManager&noLogin=1

图片[2]-通过微前台绕过鉴权执行SQL分析的方法-山海云端论坛

回顾鉴权解密

  • 在 formmodel/mobile/manager/MobileUserInit.java 中提到了关于 str 的内容,但具体作用尚不明确。
  • getUser() 方法中的 userkey 是可由用户控制的 URL 参数,是否能够伪造一个密钥呢?
  • 通过 /formmodel/mobile/security/EDUtil.java#decrypt 方法进行解密操作,其中的密钥可在 /formmodel/mobile/MobileModeConfig.java#getSecurityKey 找到。
  • 最终在 /formmodel/mobile/security/EDFactory.java 中找到了配置文件的密钥。
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容