SSM框架审计学习-- 因酷网校在线教育系统审计
Contents
前言
因酷开源网校系统是由北京因酷时代科技有限公司以下简称(因酷教育软件)研发并推出的国内首家Java版开源网校源代码建站系统,并免费提供给非商业用途用户使用,是用户体验最好、运营功能最全、性价比最高的在线教育软件。
第一次上手一个SSM框架的审计,主要学习一下审计的思路。主要参考自先知社区这篇文章:JAVA代码审计 | 因酷网校在线教育系统 - 先知社区 (aliyun.com)
java分层思想
常见的JavaWeb项目分层:
视图层(View 视图)
控制层(Controller、Action 控制层)
服务层(Service)
业务逻辑层BO(business object)
实体层(entity 实体对象、VO(value object) 值对象 、模型层(bean
持久层(dao- Data Access Object 数据访问层、PO(persistant object) 持久对象)
pom.xml
审计一套系统,可以先看看pom.xml中加载了那些组件 ,如果这些组件中本身存在漏洞,就可以直接利用这些漏洞。
web.xml
程序启动时tomcat会首先加载web.xml中的配置 。通过web.xml完成DispathcheServlet的声明,并将我们的请求转发到springmvc中。我们可以首先查看web.xml中是否配置了全局过滤器。判断是否能够bypass。
applicationContext.xml
applicationContext.xml是spring核心配置文件,这里会加载一些其他的配置文件。
spring-mvc.xml
sping-mvc.xml文件中主要的工作是:启动注解、扫描controller包注解;静态资源映射;视图解析(defaultViewResolver);文件上传(multipartResolver);返回消息json配置。
后台Sql注入漏洞
源码分析
我们已经知道了系统采用mybatis,mybatis最常见的注入就是使用${},直接就来找$
符号,看看哪些是直接调用了$
来进行取值并且没经过过滤的。
找到了一处,我们逆向追踪调用逻辑,寻找是否含有过滤并且参数我们是否可控。
可以看到接口的实现类里并没有对传入的ids参数进行过滤。继续追踪。
跟踪到deleteArticle函数。全局搜索。
可以看到控制层直接获取了articelId参数,这里的参数我们是可控的。
漏洞复现
首先登录后台。找到文章管理部分,选择删除,抓包。
直接扔到sqlmap里跑。
可以看到这套系统中还有多处存在这个漏洞。
后台任意文件上传漏洞
源码审计
位置com/inxedu/os/common/controller/VideoUploadController.java,上传视频功能。
可以看到这里首先接收了fileType扩展名参数,然后仅仅判断了上传的文件名与fileType参数文件是否一致,就直接上传文件,然后返回了文件上传路径。
这里我们可以直接将fileType设置为jsp就可以直接上传jsp马。
漏洞复现
1 | <form action="http://localhost:8080/video/uploadvideo" enctype="multipart/form-data" id="frmUpload" method="post"> |
构造上传表单
XSS漏洞
源码审计
漏洞位置:CourseController.java,功能点为前台查询课程处。
我们知道${queryCourse.courseName}是spring的EL表达式。代表queryCourse这个实体类下面courseName的值,我们geng
漏洞复现
找到搜索课程处,插入漏洞payload:
1 | "><img src=1 onerror=alert(1)> |
越权漏洞
源码审计
漏洞位置:UserController.java,功能为修改用户信息。
跟进对应的接口的实现类。发现并没有判断用户的权限。
继续跟进对应接口的实现类,直接引用mapper文件更新信息 。
漏洞复现
首先注册两个账户,记下user.userId。
登录另一个账户,抓包,替换user.userId,即可越权修改对应id的用户信息。