快速审计记录(四)--某管理系统
nihao123123 发表于 河南 漏洞分析 1115浏览 · 2024-02-09 05:40

SQL注入查找

Mybatis审计技巧,众所周知,MyBatis支持两种参数符号,一种是#,另一种是$,#使用预编译,$使用拼接SQL。在SQL语句中使用like,order by,in语句中,使用 #{} 会将对象转成字符串,形成 order by \"user\" desc 造成错误,因此很多研发会采用${}来解决,从而造成SQL注入
查看mapper文件,或者全局搜索${

找到一处这里使用的是$拼接符号
其对应的mapper的dao层如
查看此方法被那个controller调用
在可控参数处插入SQL语句查询SELECT SCHEMA_NAME AS NAME FROM information_schema.SCHEMATA LIMIT 0;
尝试debug 可以看到前端传入的SQL语句已经被执行了

失败的目录穿越

查看代码
发现没有对../进行过滤,尝试挖掘
get请求/WMS/commons/fileSource/download/../1.txt,发现返回404,才发现他的value的值如下value = "download/{fileName:.+}"这里直接拼接/../springboot会解析到上层接口
如下写法即可直接解析/../

@RequestMapping(value = "/download/**", method = RequestMethod.GET)
public void downloadFile(@PathVariable String fileName, HttpServletResponse response) throws IOException {
    // ...
}

要想在这个接口进行目录穿越就要如下请求/WMS/commons/fileSource/download/supplierInfo.xlsx/../1.txt
但是被@PathVariable注解取出参数为1.txt,,所以此处并无任意文件读取。

越权

请求包如下

登录普通用户,使用普通用户的cookie进行操作,即可删除成功
查看代码也没有看到鉴权的地方

通读后端的api都没有做相关的鉴权处理,只对cookie的sid的值做了判断。

未授权

我想看看它的鉴权系统是怎么做的,这里他用的shiro做的权限配置

Shiro的认证流程如下:

  1. 用户提交登录请求
  2. Shiro Filter拦截请求
  3. Shiro Filter根据请求的URL配置,判断是否需要进行身份认证
  4. 如果需要进行身份认证,Shiro Filter将请求转发给认证器
  5. 认证器根据用户的身份信息进行认证
  6. 如果认证成功,Shiro Filter将请求转发给目标资源
  7. 如果认证失败,Shiro Filter将返回登录页面

其中安全管理器是Shiro的核心,负责Shiro的所有安全操作。安全管理器需要配置以下几个属性:

  • Realm:用于认证和授权的领域
  • 记住我管理器:用于记住用户的登录状态
  • 认证器:用于进行身份认证
  • 授权器:用于进行权限授权

再看shiro的配置的时候,发现一个控制URL权限信息的地方

查看其中对应的白名单创建类如下

这个类用于构建一个定义权限规则的 Map 结构。该 Map 将 URL 路径映射到对应的过滤器链,用来控制对这些 URL 的访问权限。
这里在请求的时候,在路径上添加这些前缀即可 /css/,/js/,/fonts/,/media/,/pagecomponent/,/account/checkCode/

存储型XSS


查看接口处进行debug

查看dao层

之后就是调用mapper.xml中的对应的sql语句

没有任何对XSS的过滤,所里理论上不止这一个接口,所有跟数据库又交互的地方,应该都有XSS

shiro


版本很老,shiro的721是1.4.2版本之后,也就是说自2019年之后shiro的漏洞 它都有。攻击方法具体参考如下:https://www.jianshu.com/p/833582b2f560

小结

这个管理系统后台没有上传点和模板管理处,无法RCE。只针对从各个功能点的缺陷进行审计。

0 条评论
某人
表情
可输入 255