freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Java代码审计一IDEA搭建简单Web项目(一)
2022-01-25 15:53:00
所属地 台湾省

0x01 前言

从今天开始正式接触Java代码审计了,之前一直在做PHP的代码审计但为了业务需要以及自己兴趣爱好这方面的驱动下,决定开始学习Java代码审计,而且Java在一些大型开发项目中应用较为广泛,所以在做老本行渗透测试的时候经常会遇到Java的站点,所以想要安全走的更长远代码是一定要懂得。

之前认为学习代码审计必须要把开发基础全部掌握才能开始后面的审计,后来在学习基础的过程中发现这个过程很痛苦,而且坚持不了多久就会放弃。所以我准备换个学习的思路,就是遇到问题解决问题,在实战的基础上去学习(前提必须是有一门语言基础的情况下,如果纯小白的话建议先学一门语言,例如PHP)。

0x02 Java前置知识

我想大部门想入门Java代码审计的小伙伴都跟我有同样的想法,就是Java毕竟是纯面向对象的一门语言学起来比较抽象,而且开发框架也是种类繁杂,甚至就像我一样连一个简单的Web项目也搭不起来,更别说审计了。但是一切事情总得有开始,只要开始了就会有收获。

1.Maven

Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。

这种又是大白话,如果没明白maven是什么,那么上面这句话跟没说一样,我自己觉得,Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)。

详细关于Maven的基础知识以及安装教程请参考链接:https://www.cnblogs.com/whgk/p/7112560.html

  • pom.xml

XML格式显示所有依赖包的版本、名称、配置等信息。

1643013002_61ee638a479bad85afab6.png!small?1643013002865

  • IDEA创建Maven项目

打开IDEA,选择Meven项目(IDEA自带Meven),其他默认即可。

1643013313_61ee64c140931a5f3c432.png!small?1643013313568

1643013889_61ee6701db5cecdcbefd9.png!small?1643013890205

一个简单的Meven项目结构就创建好了(Meven配置阿里云加速的方法可在百度自行搜索)。

1643014189_61ee682dab1229183c41c.png!small?1643014190055

2.Mybatis

1643025149_61ee92fdd632727326a6d.png!small

MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  • MyBatis如何安装?

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>  
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId> <version>x.x.x</version>
</dependency>
  • IDEA中安装mybatis

在【File】菜单下找到【Settings】,然后再【Plugins】下在搜索栏中输入【MyBatis Plugin】,然后点击【Install】:

1643026181_61ee97051ba1d0399ffc2.png!small

重启IDEA后,MyBatis插件已成功安装。

1643026515_61ee98538555a40bf9f0a.png!small

3.SpringBoot

SpringBoot是一款基于JAVA的开源框架。目的是为了简化Spring应用搭建和开发流程。是目前比较流行,大中小型企业常用的框架。正因为极大简化了开发流程,才收到绝大开发人员的喜爱。SpringBoot核心原理是自动装配(自动配置),在这之前,开发一个JavaWeb,Spring等项目要进行很多配置,使用了SpringBoot就不用在过多考虑这些方面。并且在SpringBoot中还内置了Tomcat。

  • 使用SpringBoot框架搭建一个简单的Web项目

首先在IDEA安装SpringBoot插件。

在【File】菜单下找到【Settings】,然后再【Plugins】下在搜索栏中输入【SpringBoot Assistant】,然后点击【Install】:

1643027168_61ee9ae0c1104452213cb.png!small

File中,选择Create New Project,选择Spring Initializer,右侧勾选Default

1643027450_61ee9bfac14b6081a2948.png!small

点击Next,Srping Initializr Project Settings配置内容默认就好,我们不做实际项目开发。

1643027570_61ee9c72c240e5860bf5a.png!small

点击Next,进入依赖项选择页面,我们选择Web -> Spring Web这一个即可。

1643027703_61ee9cf7806928e8870cb.png!small

1643027765_61ee9d35b40d2c766a9a8.png!small

Maven自动加载完所需依赖后(第一次Maven加载依赖时间会稍微长一些),整体项目结构:

DemoApplication.java为主程序的入口:

1643027930_61ee9dda7f17dadfad9e1.png!small

创建一个HelloController.java文件。

1643029463_61eea3d7eac164065fc36.png!small

使用注解@Controller来加载控制器(感觉像是PHP中的命名空间use)。

1643030692_61eea8a48b840e7940322.png!small

在Controller类下新建一个方法,叫HelloController,打印"Hello,World"。

1643030828_61eea92c0720951b4fa4e.png!small

使用注解@ResponseBody和@RequestMapping

  • @ResponseBody声明响应部分
  • @RequestMapping声明"入参",相当于访问路径

1643030985_61eea9c988047b707ebe7.png!small

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    @ResponseBody
    @RequestMapping("/hello")
    public String sayHello(){
        return "Hello, world! ";
    }
}

回到DemoApplication中点击Run,编译并运行项目。

1643031462_61eeaba6eea6e6c26395c.png!small

1643031632_61eeac5074094d1b5d980.png!small

访问127.0.0.1:8080/hello,即可看到HelloWorld页面。一个使用SpringBoot框架搭建的简单JavaWeb项目就搭建完成了。

1643031758_61eeacce1f6339e93adf4.png!small

4.SpringBoot Actuator

Spring Boot Actuator就是一款可以帮助你监控系统数据的框架,其可以监控很多很多的系统数据,它有对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,如:

  • 显示应用程序员的Health健康信息
  • 显示Info应用信息
  • 显示HTTP Request跟踪信息
  • 显示当前应用程序的“Metrics”信息
  • 显示所有的@RequestMapping的路径信息
  • 显示应用程序的各种配置信息
  • 显示你的程序请求的次数 时间 等各种信息

使用方法:在pom.xml中添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

5.SpringSecurity

Spring 是一个非常流行和成功的java应用开发框架。 Spring Security 基于Spring 框架,提供了一套web应用安全性的完整解决方案。

一般来说,Web 应用的安全性包括两部分:

  1. 用户认证(Authentication)

用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

  1. 用户授权(Authorization)

用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。

一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

对于上面提到的两种应用情景,Spring Security 框架都有很好的支持。

在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。

在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

6.Druid

Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。

关于Druid详细说明:https://blog.csdn.net/yunnysunny/article/details/8657095

在代码审计的过程中可能还会遇到很多Java框架以及组件,需要大家遇到了慢慢去学习。

0x03 JavaWeb项目搭建

1.首先找到一个JavaWeb项目并将源码下载到本地,使用PHPSTUDY集成工具开启MySQL。

1643032855_61eeb117ce1e4c70ddc8f.png!small

使用Navicat创建数据库并将源码中的.sql文件导入到数据库中(也可使用命令行创建数据库)

1643032856_61eeb118064d1591fa5c8.png!small

1643032217_61eeae9950f28aebfa0be.png!small

所有数据库信息已经全部导入

1643032912_61eeb150c1f9f1e4248b8.png!small

2.在IDEA中选择File,选择Open导入我们下载好的项目源码

1643033259_61eeb2ab00a3678f29deb.png!small

第一次导入项目Meven会自动下载所需依赖包(时间较长),在pom.xml可查看所有依赖。

1643038040_61eec5582228ce4febafb.png!small

3.application.yml中修改项目配置

src - main - resources - application.yml中修改该项目所需的配置(类似于PHP中的config.php),我们需要将数据库用户名以及密码改成上述我们PHPstudy中连接的数据库。其他配置根据需要进行修改,例如端口号、后台账号密码等等。

1643038299_61eec65b8e1c9f476803d.png!small

4.启动项目环境

点击run(绿色按钮)启动我们的项目,启动成功后下方Console窗口会显示我们的项目访问端口,访问即可运行我们的项目。

1643040979_61eed0d3d08fe4c996e84.png!small?1643040980779

根据上述,访问项目地址:http://127.0.0.1:8088,也可通过application.yml修改端口。

1643040842_61eed04ab1d9a5553f005.png!small?1643040843473

到这里环境已经成功搭建完成了,写的过程中可能会出现一些错误,欢迎小伙伴们及时给我留言纠正。

0x04 下期内容预告:Java代码审计一危险函数分析与利用(二)

目前已经将环境搭建完成了,后续根据搭建的环境进行黑盒+白盒的方式进行代码调试以及漏洞挖掘,分析Java中存在的危险函数以及利用方式。还是那句话在实战中学习,我也会把我的学习的心得以及踩到的坑和小伙伴们分享,希望可以和喜欢代码审计的小伙伴们一起交流。小伙伴们下期再见!

# 渗透测试 # 小白进阶 # Java代码审计
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录