Java代码审计| Spring框架思路篇

相信小伙伴们通过Java代码审计入门篇对Java的环境和工具有了一定的了解,重点掌握了Tomcat部署使用、IDEA部署WEB项目与调试、Maven项目管理工具的使用。Java的WEB框架是Java进阶课程,当要进行Spring的漏洞分析,要有一定的Java代码知识储备。

Java后端标准的学习路线:JavaSE->JavaEE->Java Web框架

Spring是Java最核心,最重要的框架。

0X01 审计环境准备

▲▲▲

当进行Spring的代码审计(Spring某一个组件包进行分析)时,首先要有相应Spring项目源码,要让没有编写代码经验的朋友从头编写一个Spring的漏洞环境还是有一点难度的,所以要学习Spring代码审计第一步要知道如何查找环境,复现环境。

1. 方法一(spring-messaging为例)

在docker中获取Spring漏洞环境源码(默认已有docker环境) docker漏洞环境靶场(http://vulhub.org/#/environments/)

查看Spring漏洞信息: docker漏洞环境(https://hub.docker.com/u/vulhub/) 查看你要拉取镜像与方法(或docker中使用搜索 docker search spring-messaging)。

拉取镜像: docker pull vulhub/spring-messaging:5.0.4。

查看拉取的镜像。

运行镜像(容器)。

访问主机的8080,这一步已拿到漏洞的环境,可以进行POC的验证。

查看容器ID与启动时运行的命令,可以看到使用命令为java -jar,就能知道环境里面的源码是个jar包。

进入容器并且找到源码。

将容器中的文件复制到本地。

将jar放入jd-gui就能看到相应的源代码。

同样在本地也可以使用java -jar运行打包成jar的项目。

扩展: 如果复制出来的是个war,则只要放入tomcat下的webapps目录,运行tomcat就能生成相应的源代码,并且部署了项目,根据tomcat加war名可访问项目。

2. 方法二

如果再未接触过docker情况下,可以到github(https://github.com)搜索环境源码(此方法搜索的源码准确性低),不一定存在相应的漏洞,要修改相应的代码,才能复现漏洞。

0X02 Spring框架审计思路

▲▲▲

先熟悉Spring已爆出的各个影响版本、漏洞造成原因、漏洞流程。

第一步:审计时先查看项目是否使用有漏洞的jar包版本(查看Spring的配置文件,但现在的项目都是Maven管理jar包,所以先查看Maven的配置文件pom.xml与.iml文件)。

从图中可以看出项目使用Spring Framework 5.0.4并且使用spring-websockets 模块所以猜测可能存在Spring Messaging 远程命令执行漏洞。

第二步:再查看项目是否使用了造成漏洞类与方法或可能造成漏洞的危险类与方法(项目导入IDE搜索问题类、问题方法) IDEA中 Ctrl+Shift+T(全局搜索类,包括jar包)。

回车就能进入类所在的位置。 Ctrl+Shift+A\t+N(全局搜索方法,包括jar包)。

第三步:满足前两步,接下来就可以运行初步的POC动态调试确定是否可以利用漏洞(使用IDEA的Debug),在造成漏洞的类与方法处打上断点进行流程分析。

分析和调试数据流程,构造poc。

0X03 小小总结

▲▲▲

此篇讲述如何得到Spring审计的Demo,审计源码,提供Spring框架审计思路初步判定是否存在漏洞,剩下就是构造POC,动态调试分析修改POC。下期斗哥将带来Java代码审计Spring框架知识篇将讲述Spring框架构造POC要必备的知识。

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2018-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

Resin介绍及其使用配置

Resin是一个提供高性能的,支持 Java/PHP 的应用服务器。目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者、开发人员和低流量网站使用;一种是...

1343
来自专栏有困难要上,没有困难创造困难也要上!

使用docker-compose创建spark集群

1962
来自专栏别先生

关于yum网络版仓库(本地yum仓库的安装配置,如果没网了,做一个局域网内的yum仓库)

2017-11-13 22:49:48 1:两种方式:     a、每一台机器都配一个本地文件系统上的yum仓库 file:///packege/path/ ...

21010
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

1862
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Java

Java和JVM(Java的虚拟机)是许多软件所必需的,包括Tomcat,Jetty,Glassfish,Cassandra和Jenkins。

1.4K2
来自专栏纯洁的微笑

springcloud(六):配置中心git示例

随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更,都会引起一系列的...

33310
来自专栏吴伟祥

logging总结 - log4j2使用流程[归档存储]

<web-app> 2.5 以前要多个依赖 log4j-web,还需要在web.xml配置listener、filter

2742
来自专栏cloudskyme

WSO2 ESB(1)

什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线。WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,...

3924
来自专栏FreeBuf

weblogic安全配置二三事

*本文原创作者:shewey,本文属FreeBuf原创奖励计划,未经许可禁止转载 1、引言 前段时间Java的反序列化漏洞吵得沸沸扬扬,因工作原因需要对webl...

4125
来自专栏大魏分享(微信公众号:david-share)

应用服务器到底是个啥?| 从开发角度看应用架构2:对Java EE应用进行打包和部署!

3342

扫码关注云+社区

领取腾讯云代金券