前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA审计班优秀作业 | 审计SQL注入漏洞

JAVA审计班优秀作业 | 审计SQL注入漏洞

作者头像
Ms08067安全实验室
发布2021-09-28 15:49:08
1.3K0
发布2021-09-28 15:49:08
举报

文章来源|MS08067 JAVA审计实战班课后作业

本文作者:刘志(JAVA审计实战班1期学员)

作业要求:

1. 下载实战项目源码,搭建项目环境

2. 审计SQL注入漏洞,并将审计流程记录下来。

一、环境搭建


1. idea导入项目

首先将下载的项目搭建起来,通过idea创建一个新项目,并选择我们下载好的cms:

此时会弹出提示窗,我们通过Maven创建项目,选择Maven project:

打开项目可能会发现源码文件加载不出来,这种情况只需要删除源码中的.idea文件夹即可:

删除.idea文件后,重新打开项目,即可加载出源文件,如下图:

2. 配置环境参数

项目加载成功后,我们还需要配置运行环境,使项目运作起来,首先JDK修改为1.8(或1.7)版本:

因为是Maven项目,修改Maven配置,选择我们自己的Maven工具地址:

接下来,还需要配置一下tomcat环境,选择local通过本地调试方式进行搭建:

选择tomcat版本,我本机安装的是8.5.31;注意:如果端口8080和本机其他服务冲突,这里可修改为其他端口运行:

最后添加运行环境,选择inxedu.war即可:

3. 修改数据库配置

运行环境配置完毕后,还需要连接本地数据库,找到project.properties文件,修改jdbc.host为本机(即数据库)ip地址,这里设置为环回口地址;然后将jdbc.username、password修改为数据库的用户名、口令即可。

注意:上图还需要将项目路径(contextpath)修改为tomcat中的url一致,即下图的url:

最后连接本地数据库,可以使用DBeaver或navicat:

连接成功后,导入cms文件包中的sql脚本:

执行后,创建成功我们需要的数据库:

4. 最后,返回idea,通过tomcat运行cms:

5. 项目运行成功,浏览器自动访问首页:

二、代码审计ssm架构


1. 框架判断

在代码审计之前,我们需要先判断一下该cms使用什么框架进行运作,首先查看web.xml文件,可以看到加载了spring核心配置文件applicationContext.xml:

applicationContext.xml配置如下:

同时,web.xml文件还加载了springmvc的配置文件spring-mvc.xml:

spring-mvc.xml配置如下:

查看spring核心配置文件applicationContext.xml,发现通过Spring整合mybatis配置:

找到Mybatis配置文件SqlMapConfig.xml:

因此可以该cms通过ssm框架搭建,即spring+spring mvc+mybatis。确定使用mybatis框架后,可知道mysql语句都写在Mapper.xml文件中,我们只需要一个一个去审计即可。

2. sql注入点一:ArticleMapper.xml

首先找到第一个mapper文件ArticleMapper.xml,找使用{}符引入变量的语句,因为使用{}符,不会对内容进行预编译等处理,可能存在注入,通过该思路可以找到下面这两个语句:

deleteArticleByIds,deleteArticleContentByArticleIds方法可能存在问题。

往上追溯这两个方法存在于接口ArticleDao中,传参为String类型,可能存在注入:

ArticleDao接口对应实现类ArticleDaoImpl:

继续追溯可发现ArticleServiceImpl类调用了这两个方法,且这里没做任何过滤;

全局搜索deleteArticleByIds,可以找到控制器AdminArticleController:

查看控制器信息,确定该接口url为/admin/article/delete,注入点参数为articelId:

全局搜/admin/article/delete,可以找到前端页面article-list.jsp:

路径为http://localhost:8080/inxedu_war/admin/article/article-list:

直接访问会跳到后台登陆界面,因该是做了session校验,我们需要先登陆,才能访问:

查看本地数据库,找到管理员口令:

通过cmd5进行密码破解,密码为111111:

这里我们通过管理员账户admin/111111进行登陆,登陆后跳转至后台首页:

访问http://localhost:8080/inxedu_war/admin/article/article-list,显示404,无法访问:

倒回去看控制器AdminArticleController,article-list被赋值给articleListPage:

可以看到/admin/article/showlist接口调用了articleListPage:

访问/admin/article/showlist,总算找到删除接口:

点击删除,抓包,可以看到是我们想要的接口,注入点为articelld:

输入单引号,顺利报错,此处存在sql注入:

报错页面如下图所示:

ArticleMapper.xml中原本的sql语句为:

由于没有回显,我们通过延时注入进行测试,响应包延迟返回,漏洞存在:

第一个楼的点验证完毕~

3. SQL注入点二:CourseFavoritesMapper.xml

4.再来看一个漏洞点,思路和上面一致,首先打开CourseFavoritesMapper.xml,查找$符,可以发现deleteCourseFavoritesById方法可能存在注入:

该方法存在于CourseFavoritesDaoImpl类中:

CourseFavoritesDaoImpl类在CourseFavoritesServiceImpl类中进行注入,并未发现对参数ids做过滤处理:

继续追溯会发现deleteCourseFavoritesById方法被以下两个控制器调用:

查看AppUserController控制器,找到deleteCourseFavoritesById方法:

以上过程同样未发现过滤,通过控制器确定路由为/webapp/deleteFaveorite,尝试访问:

传递参数id=1:

输入单引号,出现报错,因此可能存在注入:

5. CourseFavoritesMapper.xml文件中原sql语句为:

因此我们这里把圆括号进行闭合,通过时间盲注进行测试,响应包出现延时,漏洞存在:

漏洞二同样验证完毕。

三、总结


本次漏洞审计思路主要是先判断cms使用的框架,确定为mybatis后,根据上课所讲的,检查Mapper.xml文件是否使用${}对sql语句引入变量即可。

如果使用${},再一步一步往上追溯,查看调用过程中是否存在过滤(当然还要判断一下是否存在filter全局过滤,这个cms没发现有全局过滤),直到追溯到控制器文件,即可确认该注入点的路由,最后构造报文进行测试即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Ms08067安全实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章来源|MS08067 JAVA审计实战班课后作业
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档