【JAVA代码审计】代码审计靶场本地搭建


欢迎新同学的光临
… …
人若无名,便可专心练剑


我不是一条咸鱼,而是一条死鱼啊!


0x01 WebBug

1.1 所需环境

服务器版本:9.0.52.0(我用的是Tomcat9,你也可以考虑用作者使用的Tomcat7)
jdk8版本:jdk8_112
数据库版本:Mysql 5.7.33
运行工具:IDEA

JavaEE 编写的漏洞靶场

下载地址:https://github.com/mysticbinary/WebBug

1.2 包含如下漏洞,以及修复方案

  • 暴力破解
  • 验证码绕过(前端绕过)
  • SQL注入(盲注)
  • 越权访问(垂直越权)
  • XSS(存储型)
  • XSS(反射型)
  • CSRF
  • 任意文件上传
  • 不安全的直接对象引用
  • 失效的身份认证和会话管理
  • 不安全的配置

1.3 技术选型

MVC架构

HTML+CSS+JavaScript+JSP

Java+Servlet+Fastjson+ESAPI

MySQL+JDBC

1.4 更新日志

  • v.1.0.2

    • 新添Session 会话缺陷漏洞;
    • 新添IDOR(不安全的直接对象引用)漏洞;
    • 新添CSRF漏洞;
    • 新添不安全的 Tomcat 错误页面配置;
    • 修复了/jsp/* 不可见文件路径
  • v.1.0.1

    • 更新README.md 描述文件;
  • v.1.0.0

    • 创建项目,提交第一个版本;

1.5 部署过程

JavaEE 编写的漏洞靶场

下载地址:https://github.com/mysticbinary/WebBug

在这里插入图片描述

解压出来该项目,然后使用IDEA 打开

导入后修改一下Tomcat的版本,因为我使用的是Tomcat9(这里需要去官网下载对应的Tomcat版本,网上有许多教程,此处省略不做讲解,自行百度)

在这里插入图片描述

JDK 也可自行更换一下,可能你电脑上的JDK版本有多个,可自行更换为较低一些版本的JDK会好一些,因为该漏洞靶场有引用fastjson 1.2.x 版本

在这里插入图片描述

mac jdk默认存放路路径:

/Library/Java/JavaVirtualMachines/

在运行之前我们先创建一个数据库:

  • 配置文件里面更改数据库账号密码为自己创建的数据库密码

在这里插入图片描述

  • 创建一个数据库名为:myshoppings
  • 设置数据库为utf8格式
  • 添加数据库数据,并创建一个管理员账号:admin 密码:123456
CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(80) NOT NULL,
  `password` varchar(20) NOT NULL,
  `mobilephone` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `city` int(10) DEFAULT NULL COMMENT '城市的值是用Ajax填充的,获取不到都是null,留后期解决。',
  `delivery_address` varchar(100) NOT NULL,
  `user_rights` int(10) NOT NULL COMMENT '0-普通用户  1-系统管理者',
  `register_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;



CREATE TABLE `messages` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `time` datetime NOT NULL,
  `title` varchar(20) NOT NULL,
  `message` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;



CREATE TABLE `user_image` (
  `id` int(30) NOT NULL AUTO_INCREMENT,
  `user_id` int(30) NOT NULL,
  `image_path` varchar(80) NOT NULL,
  `upload_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;


INSERT INTO myshoppings.`user`
(id, username, password, mobilephone, email, city, delivery_address, user_rights, register_time)
VALUES(15, 'admin', '123456', '123333', '[email protected]', NULL, '', 1, '2021-09-23 06:10:35');

右上方点击Run 运行项目后,可能会报错,这是部分依赖是基于1.6的,所以同学们只需要添加一下依赖即可,Mac 电脑使用option+enter 添加一下依赖即可

在这里插入图片描述

然后在运行时即可成功运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

0x02 SecExample

2.1 项目介绍

jdk8版本:jdk8_112
数据库版本:Mysql 5.7.33
运行工具:IDEA

项目地址:https://github.com/tangxiaofeng7/SecExample

2.2 项目漏洞

  • 注入漏洞-SQL注入
  • 注入漏洞-命令注入
  • 注入漏洞-表达式注入
  • XSS漏洞
  • CSRF漏洞
  • SSRF漏洞
  • CORS漏洞
  • 反序列化漏洞-Fastjson反序列化
  • 验证码相关漏洞

2.3 导入sql语句

CREATE DATABASE IF NOT EXISTS mybatis default charset utf8 COLLATE utf8_general_ci;
use mybatis;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int NOT NULL,
  `name` varchar(30) ,
  `pwd` varchar(30) ,
  PRIMARY KEY (`id`)
);
INSERT INTO `user` VALUES (1, 'txf', '123');
INSERT INTO `user` VALUES (2, 'suyu', '456');
INSERT INTO `user` VALUES (3, 'abc', '777');

项目里面更改数据库默认的账号密码以及把jdbc:mysql里面的地址改为localhost:3306 避免数据库连接不上

在这里插入图片描述

配置项目对应的Maven的jar包和依赖存储位置

在这里插入图片描述

到自己Maven 存放路径下的conf/settings.xml 添加一行自己的jar包存放路径的配置

在这里插入图片描述

2.4 部署成功

上面的配置都配置好后(其中有个配置依赖提示报错,可以不用管,不影响项目运行),如果你觉得难看的话也可以考虑把它 注释掉

在这里插入图片描述

打个包后运行,先1后2
在这里插入图片描述

然后运行IDEA 右上角的小虫子即可成功运行成功

在这里插入图片描述

访问一下靶场地址

在这里插入图片描述
在这里插入图片描述

0x03 Java Sec Code 本地搭建

3.1 介绍

项目地址:https://github.com/JoyChou93/java-sec-code

该项目也可以叫做Java Vulnerability Code(Java漏洞代码)

每个漏洞类型代码默认存在安全漏洞(除非本身不存在漏洞),相关修复代码在注释里。具体可查看每个漏洞代码和注释

登录用户名密码:

admin/admin123
joychou/joychou123

3.2 靶场漏洞

  • Actuators to RCE
  • CORS
  • CSRF
  • Deserialize
  • Fastjson
  • Java RMI
  • JSONP
  • POI-OOXML XXE
  • SQLI
  • SSRF
  • SSTI
  • URL whitelist Bypass
  • XXE
  • Others

3.3 配置环境

应用会用到mybatis自动注入,请提前运行mysql服务,并且配置mysql服务的数据库名称和用户名密码

在这里插入图片描述

创建一个数据库:java_sec_code
然后在该数据库下执行如下SQL

CREATE TABLE IF NOT EXISTS `users`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `username` VARCHAR(255) NOT NULL,
   `password` VARCHAR(255) NOT NULL,
   PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES (1, 'admin', 'admin123');
INSERT INTO `users` VALUES (2, 'joychou', 'joychou123');

最后点击IDEA 右上方的小虫子即可运行项目成功,用创建的账号密码登陆

在这里插入图片描述

账号:admina 密码dmin123
账号:joychou 密码:joychou123

在这里插入图片描述在这里插入图片描述

我自横刀向天笑,去留肝胆两昆仑


猜你喜欢

转载自blog.csdn.net/Ananas_Orangey/article/details/120441582