java 网校 代码_JAVA代码审计 | 因酷网校在线教育系统

本文由红日水清 编写,如有不当,还望斧正。

0x00 CMS简介:

因酷

核心框架—Spring Framework

视图框架—Spring MVC

持久层框架—MyBatis 3

0x01

JDK 1.8.8

Tom

My

IntelliJ

0x02: 系统

1、首先导入

b72679fa2df96c8644d0a8491b5855cf.png

2、在

77b8355a272261539c6e5aa583681f1e.png

3、配置Tomcat

f0afd78ec41bfb75d9dba8081aa519cb.png

4、导入项目时会下载maven下的包,启动时会读取配置文件,所以刚刚导入项目和运行Tomcat时都会有一些慢

2fb0dad80a3f7ab63614173bfec0abe7.png

0x03: 前置知识:

1、maven结构:

f5c62138b68329eb059ceecb4d5335fe.png

2、Mybatis:

Mybatis 是作为一款半

但是Mybatis不意味着一定的安全,它总共有两个{ 和 ${id}

#{id} :相当于

${id} :是未经过预编译,仅仅取输出变量的值

3、Spring MVC工作流程:

1.用户发送http请求给前端控制器(DispatcherServlet),前端控制器(DispatcherServlet)接到http请求后查询HandlerMapping,然后选择合适的控制器(Controller)。

2.控制器(Controller)根据不同的业务逻辑调用不同的服务方法/业务对象来获取

3.前端控制器(DispatcherServlet)根据返回的逻辑视图名,在ViewResolver的帮助下,选择相应的视图(View)进行渲染。

4.当View确定后,前端控制器(DispatcherServlet)就把模型数据传给视图(View),以便渲染视图,响应用户的发出的请求。

313251a3839705ea1b59a51f95a1e7b8.png

4、Spring:

充当了

Spring的两大核心

控制反转(IoC)/依赖注入(DI)

面向切面编程(

可以与第三方框架良好整合,降低框架的使用难度,提供对各种优秀框架的支持,如Struts、Hibernate等

降低Java EE

依赖注入特性将组件透明化,降低耦合度

0x04: 源码审计:

这里只是抛砖引玉给大家讲一下java

1、XSS

CourseController.java 这里

@Autowired注解 是自动连接属性传递的时,Spring会将这些传递过来的值或者引用自动分配给那些属性以便我们利用,这里我们可以调用

跟进接口,可以看到定义接口的一些方法,我们可以找到查询课程相关的接口,其中第61行 queryCourseList接口 是根据不同条件查询课程列表

2778132829b730aeb21b1e5416092c36.png

再根据查询相关的接口在定义接口的实现类里查询具体实现的方法,如49行,在 CourseMapper 中进行数据库查询,直接返回一个

d1261ce79b6606186ec4a00cf17eedf4.png

316ff7f7b3b0ae7fc66fac64a9d428e8.png

这里是 CourseMapper 中对应查询queryCourseList的sql语句

b51846104ccac18b7d7303f16fad703a.png

然后直接将内容返回到前台的页面上,其实 ${queryCourse.courseName} 是一个EL表达式,代表queryCourse这个实体类下面courseName的值,就是我们查询课程的内容

bd0baf8e6b15444bededdbc0b0bc1227.png

1a0fbde4539a0cadaa86c30c6ac940f5.png

2、越权漏洞

漏洞触发点 UserController.java

a1996615dc198635f770b8edb9336aa0.png

我们跟进定义的接口,并进入接口的实现类来看看修改用户信息内容中是否有用户权限判断

32dd67cf1dea7d16f682fae591c684a0.png

第91行,接口实现类中并未做任何用户身份合法性的校验,对请求没进行

d33d9bce0e681c24c63a91c0a5bf6532.png

直接引用

e292018ccefcb7dd6af69d6ff1252c2c.png

这里直接贴图,抓包修改对应的user.userId

a514e70095322a76d81a5e945298464f.png

e52f9ed4721b253fa2d5d00d91d38008.png

84dd823088fc0ec2c7457b32dbd82ef6.png

24f06718079057ca491001f81e07af72.png

3、SQL注入漏洞

AdminArticleController.java

2bba0414b5c4141421fa2af7fcab9cbe.png

接口和接口实现类

0ec93294365af028ab44a6dc37f5eb08.png

0a91325768744f733c8575cc531a002c.png

关键点在这里,我们上面提过Mybatis用${}直接拼接,会产生注入

2583faec5b6cf6395ba1f89c8b7b236f.png

c68f7699cfb69709670322cc1679a669.png

4b0e29fb524fadf8229af1420993ed07.png

类似的注入点和其他漏洞还有很多,只要大家细心就会找到的。这里只是提出三个比较有代表性的漏洞举个例子,让大家对SSM框架的审计有一个思路。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值