前言

  因酷开源网校系统是由北京因酷时代科技有限公司以下简称(因酷教育软件)研发并推出的国内首家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里跑。

QQ截图20210213122138

可以看到这套系统中还有多处存在这个漏洞。

后台任意文件上传漏洞

源码审计

位置com/inxedu/os/common/controller/VideoUploadController.java,上传视频功能。

可以看到这里首先接收了fileType扩展名参数,然后仅仅判断了上传的文件名与fileType参数文件是否一致,就直接上传文件,然后返回了文件上传路径。

这里我们可以直接将fileType设置为jsp就可以直接上传jsp马。

漏洞复现
1
2
3
4
5
<form action="http://localhost:8080/video/uploadvideo" enctype="multipart/form-data" id="frmUpload" method="post">
<input name="uploadfile" type="file">
<input type ="text" name = "fileType" value="">
<input id="btnUpload" type="submit" value="上传">
</form>

构造上传表单

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的用户信息。