本文由红日安全成员: 水清云影 编写,如有不当,还望斧正。
因酷开源网校系统是由北京因酷时代科技有限公司以下简称(因酷教育软件)研发并推出的国内首家Java版开源网校源代码建站系统,并免费提供给非商业用途用户使用,是用户体验最好、运营功能最全、性价比最高的在线教育软件。
核心框架—Spring Framework
视图框架—Spring MVC
持久层框架—MyBatis 3
下载地址: http://down.admin5.com/jsp/132874.html
1、首先导入源码,修改相关的配置信息,注意要和数据库的信息相对应
2、在pom.xml中把端口号改成8080,这个可根据自己的实际情况去修改,我这里端口设置的是8080,所以端口号改成8080
3、配置Tomcat
4、导入项目时会下载maven下的包,启动时会读取配置文件,所以刚刚导入项目和运行Tomcat时都会有一些慢
src/main/java src/main/resources src/main/webapp
Mybatis
是作为一款半自动化的持久层框架,因为sql语句都要我们自己手动编写还要注意安全问题,所以Mybatis在一定程度上帮我们避免了这些问题 {id}
和 ${id}
#{id}
:相当于JDBC中的PreparedStatement,预编译处理参数,可以有效的避免注入
${id}
:是未经过预编译,仅仅取输出变量的值
1.用户发送http请求给前端控制器(DispatcherServlet),前端控制器(DispatcherServlet)接到http请求后查询HandlerMapping,然后选择合适的控制器(Controller)。
2.控制器(Controller)根据不同的业务逻辑调用不同的服务方法/业务对象来获取模型数据(Model),并返回ModelAndView(模型数据和逻辑视图名)给前端控制器(DispatcherServlet)。
3.前端控制器(DispatcherServlet)根据返回的逻辑视图名,在ViewResolver的帮助下,选择相应的视图(View)进行渲染。
4.当View确定后,前端控制器(DispatcherServlet)就把模型数据传给视图(View),以便渲染视图,响应用户的发出的请求。
充当了管理容器的角色,用来管理Spring MVC和Mybatis工作的,充当程序中的桥梁或者说管理者
控制反转(IoC)/依赖注入(DI)
面向切面编程(AOP)
这里只是抛砖引玉给大家讲一下java代码审计的流程,基于SSM框架的一个思路,如果大家有时间可以深入挖掘一下这套程序,一定会有比较多的收获
漏洞发生在搜索课程名称,我们定位到 CourseController.java
这里
@Autowired注解
是自动连接属性传递的时,Spring会将这些传递过来的值或者引用自动分配给那些属性以便我们利用,这里我们可以调用 CourseService
接口里面的方法
跟进接口,可以看到定义接口的一些方法,我们可以找到查询课程相关的接口,其中第61行 queryCourseList接口
是根据不同条件查询课程列表
再根据查询相关的接口在定义接口的实现类里查询具体实现的方法,如49行,在 CourseMapper
中进行数据库查询,直接返回一个list集合
这里是 CourseMapper
中对应查询queryCourseList的sql语句
然后直接将内容返回到前台的页面上,其实 ${queryCourse.courseName}
是一个EL表达式,代表queryCourse这个实体类下面courseName的值,就是我们查询课程的内容
漏洞触发点 UserController.java
我们跟进定义的接口,并进入接口的实现类来看看修改用户信息内容中是否有用户权限判断
第91行,接口实现类中并未做任何用户身份合法性的校验,对请求没进行权限控制
直接引用mapper文件更新信息
这里直接贴图,抓包修改对应的user.userId
AdminArticleController.java
删除文章页面,从前台接收articelId参数
接口和接口实现类
关键点在这里,我们上面提过Mybatis用${}直接拼接,会产生注入
类似的注入点和其他漏洞还有很多,只要大家细心就会找到的。这里只是提出三个比较有代表性的漏洞举个例子,让大家对SSM框架的审计有一个思路。