如何搜索公开类”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
流程
- 登录权限验证: 在 /formmodel/mobile/mec/servlet/MECAdminAction.java 中对登录用户进行权限验证,判断是否为 admin 或 sysadmin。
- 获取用户会话: 在 /formmodel/mobile/manager/MobileUserInit.java 中通过HTTP请求获取会话参数 sessionkey,并进行处理。
- 查询用户权限: 在 /mobile/plugin/ecology/service/AuthService.java 中进行用户权限查询。
- 检查管理员权限: 在 /mobile/plugin/ecology/service/HrmResourceService.java 中根据用户ID查询是否为管理员权限。
- 关键步骤: 在 /formmodel/mobile/manager/MobileUserInit.java 中关键步骤是检查特定值是否为1,用于判断管理员权限。
- 执行SQL语句: 最终在 /formmodel/mobile/mec/servlet/MECAdminAction.java 中执行SQL语句。
可用利用链/调用方式
- 寻找 getAction() 方法,并通过 URL 参数访问该方法。
- 可以全局搜索 “getAction” 来找到调用该方法的地方。
- 最终利用可通过以下方式进行:
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
回顾鉴权解密
- 在 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 中找到了配置文件的密钥。
暂无评论内容