3

SSM框架审计学习-- 因酷网校在线教育系统审计

 2 years ago
source link: https://shu1l.github.io/2021/02/16/ssm-kuang-jia-shen-ji-xue-xi-yin-ku-wang-xiao-zai-xian-jiao-yu-xi-tong-shen-ji/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

SSM框架审计学习-- 因酷网校在线教育系统审计

2021-02-16

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

<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:

"><img src=1 onerror=alert(1)>

漏洞位置:UserController.java,功能为修改用户信息。

跟进对应的接口的实现类。发现并没有判断用户的权限。

继续跟进对应接口的实现类,直接引用mapper文件更新信息 。

首先注册两个账户,记下user.userId。

登录另一个账户,抓包,替换user.userId,即可越权修改对应id的用户信息。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK