可以看到 使用的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.在反序列化的时候提供白名单,禁止白名单以外的类被反序列化
这套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<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 应用的相关接口和传参信息并不能算是漏洞,但是可以检查暴露的接口是否存在未授权访问、越权或者其他业务型漏洞。
https://blog.csdn.net/weixin_42282189/article/details/120355304