兜兜零元 发表于 2024-8-3 03:55:53

基于springboot架构项目的白盒审计经验分享

一、背景

我是承影战队的zava,代码审计是信息安全研究员、白帽子以及渗出测试工程师须要掌握的一门技巧。在弊端挖掘过程中,分析弊端产生原理以及怎样利用弊端,都要求我们必须至少掌握一门开发语言。java语言由于其面向对象、良好的跨平台执行、高可移植性以及具有丰富的内置类库的特点在市场上占有率极高,以java语言开发的CMS也不计其数。
内容管理体系(Content Management System,CMS)是一种位于Web 前端服务器和后端办公体系之间的软件体系。内容的创作职员、编辑职员、发布职员使用内容管理体系来提交、修改、审批、发布内容。随着科技与信息的高速发展,CMS的开发也越来越个性化。然而在功能、性能和效率全面进步的同时,安全题目也逐渐暴暴露来,逻辑弊端、框架弊端等各类业务弊端不停被白帽子发现,
本文从一个简单的基于springboot框架的CMS所需各组件的开发过程正向分解分析,结合一个开源springboot架构的项目举行白盒审计,辅助黑盒工具,旨在提供一种从开发过程分析到黑白盒正向挖掘CMS弊端的经验分享。
二、springboot先容

Spring是Java企业版的轻量级取代品,通过依赖注入和面向切面编程,用简单的Java对象实现了EJB的功能。但是Spring用到了很多xml设置,这种重量级设置也是spring的一个重大缺点。
springboot是一个构建在Spring框架顶部的项目。在springboot框架中已经嵌入了tomcat,jetty,Undertow等web容器,因此在使用springboot开发时不需要摆设WAR文件,只需要通过自己的启动器(Starter)来,简化项目的构建立置。
三、springboot项目搭建

3.1情况设置

本地摆设情况:jdk-8u-102,Idea2022,mysql 8.0.31、maven3.8.6
3.2 springboot项目搭建步骤

新建springboot项目:
https://img-blog.csdnimg.cn/img_convert/3df1386b5beaf1443364725b72a4f687.jpeg
添加web依赖:
https://img-blog.csdnimg.cn/direct/c082bd5d1e7f4ce38379d5e13136f4b7.jpeg
springboot项目布局:
https://img-blog.csdnimg.cn/img_convert/fd8fcfabbc3ed6a1567bffe531d46718.jpeg
SpringbootdemoApplication:作为springboot项目的启动类,它是基于main方法来运行的,目的是启springboot项目 。
application.yml:修改端口号和上下文路径
springboot的pom设置文件
https://img-blog.csdnimg.cn/img_convert/dc02f932acafa258649255d37fe79153.jpeg
在maven的POM里,我们可以看到springboot引入的一个紧张依赖:spring-boot-starter-web,这是springboot的web启动器,查看依赖图可以发现其导入了很多web依赖,这里只附上一部分依赖图:
https://img-blog.csdnimg.cn/img_convert/d01f5c42d54a2fe1552acb139f9dbba2.jpeg
3.3启动springboot项目

修改端口号:springboot默认端口号是8080,这里我们修改为8088,防止测试时端口辩论。
https://img-blog.csdnimg.cn/img_convert/7873c081cd1837773498d1f0680a47b8.jpeg
运行springboot启动类
https://img-blog.csdnimg.cn/img_convert/2cc56f3197e8bb8d50ffd2897f3b145f.jpeg
访问springboot项目:访问127.0.0.1:8088,这里我们已经乐成搭建起了一个简单的springboot项目。
https://img-blog.csdnimg.cn/img_convert/9f7aee4e988b09b34e8630f96093bff4.jpeg
四、基于springboot架构CMS组件分解分析

springboot作为一个轻量级框架,自己已经集成了很多容器,并且spirngboot可以集成各类组件,从而快速提拔开发效率,下面我们简单先容一下在开发CMS时spirngboot集成个组件的过程,所用到的组件有Spring Security、Mybatis、Freemaker、Thymeleaf。
4.1 springboot集成Spring Security

Spring Security先容

Spring Security是一个高度自定义的安全框架。利用Spring的IoC特性和AOP功能,为体系提供了声明式安全访问控制功能,淘汰了为体系安全而编写大量重复代码的工作。
引入依赖

下面我们简单启动一个Spring Security项目,由于Spring Security已经被Springboot集成,可直接引入启动器:spring-boot-starter-security
https://img-blog.csdnimg.cn/img_convert/66a6d6542fd771fa70eac3dd32d09249.jpeg
运行Spring Security项目

在欣赏器内访问127.0.0.1:8080/html会自动显示如下界面:
https://img-blog.csdnimg.cn/img_convert/fdb6a1ba7120dd2c6f081c6ed60cfd61.jpeg
默认用户名为user,password内置于控制台;
https://img-blog.csdnimg.cn/direct/a85d2c3a7fff409a8ff01b5e33b2063b.jpeg
输入账户密码,乐成跳转springboot首页;
https://img-blog.csdnimg.cn/direct/4eaa8a4510a8479494a10beebf3c90d7.jpeg
UserDetailsService

当spring security未做任何设置的时间,账号和密码是由其自定义生成的,然而在实际项目中,账号和密码都是从数据库中查询出来的。所以我们需要通过自定义认证逻辑,这里只需要实现UserDetailsService接口即可。
https://img-blog.csdnimg.cn/img_convert/8a5e8c6ce3b4b7125be097e0544ef17c.jpeg
4.2 springboot集成Mybatis

Mybatis先容

MyBatis 是一个 Java 持久化框架,它将 Java 对象映射到数据库表,并提供 SQL 映射 API 来对数据库执行 CRUD(创建、读取、更新、删除)操纵。 在 MyBatis 应用程序的上下文中,DAO(数据访问对象)层通常负责抽象与数据库交互的细节,并为应用程序的其余部分在访问数据时使用提供一个干净、简单的接口。
引入Mybatis依赖:
https://img-blog.csdnimg.cn/img_convert/c6c30e6fceafc2e225edd68f1ec61a8e.jpeg
查看依赖:
https://img-blog.csdnimg.cn/img_convert/829135d7fb84649c3b65f59824b66bbb.jpeg
写入设置文件:这里我们在application.yml设置文件中添加上数据库的设置信息。
https://img-blog.csdnimg.cn/img_convert/203add3f1481928dc629230e40beaf20.jpeg
controller层代码编写:
https://img-blog.csdnimg.cn/img_convert/667cddbc138afc9bb174b34f8cadf539.jpeg
service层代码编写:
https://img-blog.csdnimg.cn/direct/845e9248d59347918e260607318eeba7.jpeg
设置mapper.xml文件:保证namespace同mapper文件路径名相一致。
https://img-blog.csdnimg.cn/img_convert/1c8f8e564b93faf8381b39afa447eb7b.jpeg
代码效果展示:添加数据。
https://img-blog.csdnimg.cn/img_convert/6b5e0db1e391057b521d4572bcba3211.jpeg
https://img-blog.csdnimg.cn/img_convert/3bc3f3ebe400775b2a8f64b9c7f0b4c7.jpeg
查询数据:
https://img-blog.csdnimg.cn/img_convert/79c3e29ab1fe0f157c7aa770d0db963a.jpeg
4.3 springboot集成freemaker

freemaker先容

FreeMarker是一款免费模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、设置文件、源代码等)的通用工具。
引入依赖:
https://img-blog.csdnimg.cn/img_convert/6d8b06a57d3f872108aedd3e807f7a84.jpeg
controller层代码编写:
https://img-blog.csdnimg.cn/img_convert/254e64ad7b2ef254d68d27af60a6e7ce.jpeg
创建模版文件:在resources目次下创建.ftlh文件,作为渲染数据的模版。
https://img-blog.csdnimg.cn/img_convert/505deecbce9f85184ec1914206269085.jpeg
https://img-blog.csdnimg.cn/img_convert/8f910c862317f6b22335c7edd2c865cf.jpeg
启动项目:
https://img-blog.csdnimg.cn/direct/cfcf3d7cd3994517b9d047ffa98878c6.png
4.4 springboot集成Thymeleaf

Thymeleaf先容

Thymeleaf是一种实用于 Web 和独立情况的当代服务器端 Java 模板引擎。用 Thymeleaf 编写的 HTML 模板仍然像 HTML 一样看起来和工作,让应用程序中运行的实际模板继承作为有用的操持工件工作。
引入依赖:
https://img-blog.csdnimg.cn/direct/547deea73d734cdbbdfb13941ed1e476.jpeg
controller层代码编写:
https://img-blog.csdnimg.cn/img_convert/4dabbdc9d7624ab8e96c58d68892166c.jpeg
创建模版文件:在resources目次下创建index.html文件,作为渲染数据的模版。
https://img-blog.csdnimg.cn/img_convert/d731d57574098d6928b006ce5b5491ad.jpeg
测试文件:
https://img-blog.csdnimg.cn/img_convert/92590af086e7a5341dcd5ed88d2d9815.jpeg
五、白盒审计MCMS体系

以上对springboot框架和各类组件已经有了一定的了解,下面我们对某个开源体系举行代码审计。MCMS是一套完备开源的Java CMS,基于SpringBoot 2架构,前端基于vue、element ui。目前该CMS最新版本为5.2.11,论坛上也有很多大牛对该体系做过代码审计分析,本文是对该体系的5.2.1版本举行一个白盒审计,并结合部分黑盒辅助,提供一种代码审计思路分享。
5.1 项目情况搭建

导入项目:这里选择将源码下载到本地再由IDEA导入项目。源码下载地址为:https://gitee.com/mingSoft/MCMS/releases。
https://img-blog.csdnimg.cn/img_convert/1dd07689f1160dfca4fe09b7ce1d2c45.jpeg
设置mysql数据库:导入源码数据库。
https://img-blog.csdnimg.cn/img_convert/dc7a102f0fb67e3a939a4b9d5f5a03cb.jpeg
修改.yml设置文件:设置文件的数据库名要保持一致,数据库账户密码改为自己账户密码。
https://img-blog.csdnimg.cn/img_convert/ce25444b5449f5249f66aec3761c9b3c.jpeg
运行启动类启动项目:访问http://127.0.0.1:8080/ms/login.do。出现如下页面代表项目启动乐成,默认账户密码:msopen/msopen。
https://img-blog.csdnimg.cn/img_convert/f321ddd77fd2935aa4cb093dc0f58e76.jpeg
5.2 白盒审计MCMS体系

查看项目依赖文件

在pom.xml中可以看到很多熟悉的组件,如:log4j、freemaker、fastjson、shiro、mybatis等等,由于这些组件经常爆出高危弊端,所以在审计过程时可以重点关注一下依赖组件的版本和弊端情况。
https://img-blog.csdnimg.cn/img_convert/ea05a6537190f3aae69b75b45a4ff526.jpeg
重点关注Mybatis的xml设置文件

Mybatis的DAO 层通常实现为一组接口,每个接口定义一组方法,用于对存储在数据库中的数据执行各种操纵。要在应用程序中使用 MyBatis,通常还需要设置一个 .xml的SQL映射文件,该文件定义要用于 DAO 接口中每个方法的 SQL 语句。与任何其他持久化框架或数据库访问工具一样,假如使用不当,MyBatis 也轻易受到 SQL 注入攻击,例如使用"                                 "                         符号来表示参数占位符时极易产生                         s                         q                         l                         注入风险,用户可以通过输入恶意的参数来绕过程序的防御步伐。对每一个                         D                         A                         O                         层的                         .                         x                         m                         l                         设置文件举行搜索,发现一处使用                              "符号来表示参数占位符时极易产生sql注入风险, 用户可以通过输入恶意的参数来绕过程序的防御步伐。 对每一个DAO层的.xml设置文件举行搜索,发现一处使用                  "符号来表示参数占位符时极易产生sql注入风险,用户可以通过输入恶意的参数来绕过程序的防御步伐。对每一个DAO层的.xml设置文件举行搜索,发现一处使用的sql语句参数:(select id FROM cms_category where find_in_set(‘${categoryId}’,CATEGORY_PARENT_IDS)>0))。该参数位置很可能存在sql注入。
https://img-blog.csdnimg.cn/img_convert/2ecd5cbd72e8eae089a3812dd20b9260.jpeg
根据categoryId这个参数,快速搜索使用了该参数的类,在包net.mingsoft.cms.action.web和包net.mingsoft.cms.action.web下均存在categoryId参数。
https://img-blog.csdnimg.cn/direct/a09b3a6d5bf3431aa71493c783b263a7.jpeg
https://img-blog.csdnimg.cn/img_convert/d91a019842dcf8a23cc932fd9521f172.jpeg
定位到ContentAction.java,找到/list接口,可以看到content对象没有任何过滤直接被传参进来;
https://img-blog.csdnimg.cn/img_convert/841de9c8a7121f75c60489a8f8d8a86d.jpeg
搜索对应前端页面,这里发现web端无论点击任何功能点url栏均未变革。
https://img-blog.csdnimg.cn/img_convert/bf238d6d0cdeeb5abf8ce2ddd7120935.jpeg
https://img-blog.csdnimg.cn/img_convert/5d3a100063abfb2ca019f8e3561520d2.jpeg
对页面抓包,可以在burp中发现隐藏的接口:
https://img-blog.csdnimg.cn/img_convert/96ce69f865cb65bf86c42d009e0e6319.jpeg
这里我们构造http://127.0.0.1:8080/ms/cms/content/list;
https://img-blog.csdnimg.cn/img_convert/bb4ce92d22b0141b679faecac804330f.jpeg
随后加入含有categoryId的参数;
https://img-blog.csdnimg.cn/direct/e507613344c14f2ab6a84e7f8d5b74b0.jpeg
这里借助sqlmap工具对该注入点测试,乐成爆出数据库。
https://img-blog.csdnimg.cn/direct/f939ce692aee4b7790902786c3c92e29.jpeg
征采背景的文件上传点

我们在模版管理处发现一个上传位置,并且做了白名单处置惩罚,只答应上传zip文件;
https://img-blog.csdnimg.cn/img_convert/a176e2a213dc7bda164319a2fbe678e2.jpeg
对后端代码全局搜索发现前端js确实做了过滤;
https://img-blog.csdnimg.cn/img_convert/34e06d5ce19b2bc993b53bc45bcdf816.jpeg
这里我们上传一个名为pwd的文件夹,上传完毕后在后端代码处也发现了上传位置,但内部的文件没有剖析。
https://img-blog.csdnimg.cn/img_convert/eff2f47dd98d9f99b4fe7c44122080a0.jpeg
https://img-blog.csdnimg.cn/img_convert/55398eae466900f38b38300047528bcf.jpeg
从前面的前端js我们可以知道它只答应上传html和png、jpg类的图片格式,这里我们在pwd内上传一张图片,通过前端url定位后端源码的file/uploadTemplate.do处;
https://img-blog.csdnimg.cn/img_convert/3452ef93129a055b581a4a297754d8e1.jpeg
这里利用全局扫描搜索file可以找到文件上传的接口
https://img-blog.csdnimg.cn/img_convert/cdd90b86b439099b3be5926d545f58ff.jpeg
抓包后可以发现文件的路径名,访问文件:
https://img-blog.csdnimg.cn/img_convert/eeb63a3b67ac067e22e8afabb927ddf0.jpeg
https://img-blog.csdnimg.cn/img_convert/98647fc657e29c2557c78b7366916e34.jpeg
所以对背景对文件上传点我们要多多把稳,轻易出现上传弊端。
分析轻易出现高危弊端的组件

首先通过全局搜索发现shiro位置。
https://img-blog.csdnimg.cn/direct/e2951686a3934157bacbf5ae425fce6b.jpeg
在背景的登陆页面是存在shiro框架的,也可以通过工具直接爆破一下,但是这里是没有密钥泄漏的,我们通过源码也没有搜索到密钥泄漏。
https://img-blog.csdnimg.cn/img_convert/6b9a775b82e6c6940e53bae9df0ef5a4.jpeg
5.3 审计思路总结

针对上述项目的白盒审计,最后总结一下:
(1) 对于静态java代码的审计工作,我们首先要对项目对每一个条理和功能点首先有所了解,对springboot架构的项目首先可以看它的.yml设置文件和启动类,找到项目启动点;
(2) 针对输入传入后端的位置我们一定要特别注意,尤其是传参没有过滤的地方极轻易产生注入风险;
(3) 要经常利用idea中的快捷键,快速定位关键函数的位置,找到函数调用的利用链;
(4) 在白盒没有思路的时间,我们可以利用一些工具举行黑盒辅助,以更好的提拔我们的工作效率
六、参考链接

https://www.365seal.com/y/QgV081ENVw.html
https://www.modb.pro/db/180555
网络安全成长路线图

这个方向初期比力轻易入门一些,掌握一些基本技能,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成hei客大神,这个方向越今后,需要学习和掌握的东西就会越来越多,以下是学习网络安全需要走的方向:
https://img-blog.csdnimg.cn/direct/48c584496f33463d9c900a9989f33fbd.png#pic_center
# 网络安全学习方法
​ 上面先容了技能分类和学习路线,这里来谈一下学习方法:
​ ## 视频学习
​ 无论你是去B站或者是油管上面都有很多网络安全的相关视频可以学习,当然假如你还不知道选择那套学习,我这里也整理了一套和上述成长路线图挂钩的视频教程,完备版的视频已经上传至CSDN官方,朋友们假如需要可以点击这个链接免费领取。网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
https://img-blog.csdnimg.cn/direct/2b2eed70c73c4dada71f9be914293d36.jpeg#pic_center

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于springboot架构项目的白盒审计经验分享