jshERP3.0 代码审计
2023-2-16 20:20:0 Author: xz.aliyun.com(查看原文) 阅读量:23 收藏

Fastjson反序列化漏洞

可以看到 使用的fastjson的1.2.55版本
这里找一下Parse或者ParseObject函数 全局搜索一下
src/main/java/com/jsh/erp/utils/StringUtil.java中的getInfo方法中 发现调用

而 search参数正是由前端输入而来 ,也就是说 参数可控 导致fastjson反序列化

可以看到前端的任意一个搜索 字符都是search
{"@type":"java.net.Inet4Address","val":"wswq9o.dnslog.cn"}
url编码

修复建议

1.提高版本,使用高版本的jar包
2.在反序列化的时候提供白名单,禁止白名单以外的类被反序列化

SQL注入

这套CMS 他的数据持久层使用的Mybatis框架
刚开始看Mapper的配置的时候 发现了很多的拼接符号

当我以为我的春天终于来了
但是当我一层一层的查看

countsByAccountHead 这个sql语句对应的mapper

查看它的调用情况

最后在Controller层似乎发现了参数可控,经过debug发现 参数只有apiName可控。别的都不可控

继续查找又前端可控参数search调用的
在xml中选一个接口 src/main/resources/mapper_xml/PersonMapperEx.xml

查看它对应的接口的调用情况

可以看到调用search 且参数可控 ,查看它的调用情况
src/main/java/com/jsh/erp/service/person/PersonComponent.java

最终还是到这里
这里的name处存在sql注入
这里我一直在查找前端为name的参数

在角色管理处 发现此参数

验证成功 确实存在sql注入

修复建议

在使用Mybatis这种持久性框架的时候 尽量使用预编译,在遇到order by这些函数 不能执行预编译的时候 写一个过滤类。

XSS

插入XSS 尝试是否可以插入

在备注处 写入xss<script>alert('hack')</script>

出现弹窗,查看包

根据路径去看一下代码逻辑

可以看到 这就是 把前端传入的info参数和rows参数通过
String beanJson = body.getInfo();
String rows = body.getRows();
传入 并且并未做任何的过滤
进入addDepotHeadAndDetail方法 查看关于 rows参数的处理

这里是 对数据rows没有做任何处理,进入saveDetials查看里面对setRemark处理

之后就执行sql 把参数插入到数据库中
之后我也测试了别的插入的地方 发现似乎整个web项目对xss都没有过滤

修复建议

1.编写过滤类,在用户输入处均调用此类
2.使用如下代码进行转义

String string = HtmlUtils.htmlEscape(userinput); //转义
String s2 = HtmlUtils.htmlUnescape(string); //转成原来的

登录绕过

查看过滤器

分别设置了filterPath 和 ignoredUrl的值
然后看doFilter的操作

java中的正则中^和$分别代表行的开头和结尾

三个if绕过登录
1.访问的url不为空,并且存在doc.html,register.html,login.html即可绕过登录,访问下一个过滤器
2.访问的url中如果存在…/a.ico/…/ (V2.0版本可以…/a.css/…/,…/a.png/…/),也可以绕过认证请求
3.访问url中如果以/user/login,/user/registerUser,/v2/api-docs等字符开头的时候,也可以绕过认证请求。
测试:

这里的../表示回到上个目录,因为/v2/api-docs 是两层 所以也回了两次上层目录。

修复建议

使用shiro,Spring-security等安全框架

Spring-boot信息泄露

一般来讲,知道 spring boot 应用的相关接口和传参信息并不能算是漏洞,但是可以检查暴露的接口是否存在未授权访问、越权或者其他业务型漏洞。

参考

https://blog.csdn.net/weixin_42282189/article/details/120355304


文章来源: https://xz.aliyun.com/t/12174
如有侵权请联系:admin#unsafe.sh