0x01 Java 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

java代码审计 idea java代码审计靶场_数据库

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

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

java代码审计 idea java代码审计靶场_渗透测试_02

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

java代码审计 idea java代码审计靶场_java代码审计 idea_03

mac jdk默认存放路路径:

/Library/Java/JavaVirtualMachines/

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

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

java代码审计 idea java代码审计靶场_网络安全_04

  • 创建一个数据库名为: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', '222@123.com', NULL, '', 1, '2021-09-23 06:10:35');

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

java代码审计 idea java代码审计靶场_渗透测试_05

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

java代码审计 idea java代码审计靶场_java代码审计 idea_06


java代码审计 idea java代码审计靶场_信息安全_07


java代码审计 idea java代码审计靶场_网络安全_08

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 避免数据库连接不上

java代码审计 idea java代码审计靶场_数据库_09

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

java代码审计 idea java代码审计靶场_数据库_10

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

java代码审计 idea java代码审计靶场_java代码审计 idea_11

2.4 部署成功

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

java代码审计 idea java代码审计靶场_渗透测试_12

打个包后运行,先1后2

java代码审计 idea java代码审计靶场_数据库_13

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

java代码审计 idea java代码审计靶场_信息安全_14

访问一下靶场地址

java代码审计 idea java代码审计靶场_网络安全_15


java代码审计 idea java代码审计靶场_java代码审计 idea_16

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代码审计 idea java代码审计靶场_信息安全_17

创建一个数据库: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 右上方的小虫子即可运行项目成功,用创建的账号密码登陆

java代码审计 idea java代码审计靶场_网络安全_18

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

java代码审计 idea java代码审计靶场_数据库_19

java代码审计 idea java代码审计靶场_数据库_20

0x04 Hello-java-Sec 本地漏洞靶场搭建

Java漏洞平台,结合漏洞代码和安全编码,帮助理解和减少漏洞(Java Security,安全编码和代码审计)

项目地址:https://github.com/j3ers3/Hello-Java-Sec

创建Hello-java-Sec数据库以及对应表的SQL语句如下:

CREATE DATABASE IF NOT EXISTS test default charset utf8 COLLATE utf8_general_ci;
use test;

CREATE TABLE `users`
(
    `id`       int(11) unsigned NOT NULL AUTO_INCREMENT,
    `user` varchar(50)      NOT NULL,
    `pass`  varchar(128)     NOT NULL,
    PRIMARY KEY (`id`)
);

java代码审计 idea java代码审计靶场_渗透测试_21

src/main/resources/templates/application.properties文件修改成自己对应的数据库账号密码,然后点击右上方的绿色小虫子运行即可。

java代码审计 idea java代码审计靶场_网络安全_22

PS:如果你跑不起来,请确认JDK、Maven等相关IDEA环境配置以及安装是否配置正确。

0x05 DVWA靶场本地环境搭建

  • phpstduy安装

https://www.xp.cn/

phpstduy属于傻瓜式操作安装,无难度,安装步骤省略,不会的同学自行百度搜索。

  • Apache和Mysql开始是停止状态,点击启动

java代码审计 idea java代码审计靶场_渗透测试_23

  • 安装phpMyAdmin

java代码审计 idea java代码审计靶场_java代码审计 idea_24

在“其他选项菜单”中,点击phpMyAdmin,在浏览器中打开phpMyAdmin,登录用户名和密码默认为root/root

java代码审计 idea java代码审计靶场_java代码审计 idea_25

  • 登录phpMyAdmin成功后,点击数据库,创建名为dvwa的数据库

java代码审计 idea java代码审计靶场_java代码审计 idea_26

  • 官网下载dvwa的zip包

dvwa官网(可能有墙,需科学上网):
https://dvwa.co.uk/

java代码审计 idea java代码审计靶场_渗透测试_27

Github下载:
https://github.com/digininja/DVWA/releases

java代码审计 idea java代码审计靶场_数据库_28

  • 解压文件

java代码审计 idea java代码审计靶场_网络安全_29

  • 然后进入config文件下将config.inc.php.dist修改为config.inc.php
  • 改成对应的账号密码

java代码审计 idea java代码审计靶场_数据库_30

  • 默认是7.x版本,为了方便测试,版本我们降到5.x

java代码审计 idea java代码审计靶场_java代码审计 idea_31


java代码审计 idea java代码审计靶场_渗透测试_32

启动HTTP服务和MySQL数据库,然后访问DVWA,可能访问如下图,会出现两处报错(也可能更多,网上都有答案,自行百度)

java代码审计 idea java代码审计靶场_网络安全_33

  • PHP function allow_url_include: Disabled 解决方法

修改php.ini,但不是下面这个路径的php.ini

java代码审计 idea java代码审计靶场_渗透测试_34

因为搭建DVWA使用的是PHPstudy,要解决该报错,需要找到所使用的php版本号所在文件夹,修改php.ini中的allow_url_include为On,错误得到解决

java代码审计 idea java代码审计靶场_java代码审计 idea_35

  • reCAPTCHA key: Missing 解决方法

进入config文件下打开config.inc.php,替换如下内容

$_DVWA[ 'recaptcha_public_key' ]  = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';

$_DVWA[ 'recaptcha_private_key' ] = '6LdK7xITAzzAAL_uw9YXVUOPoIHPZLfw2K1n5NVQ';

java代码审计 idea java代码审计靶场_网络安全_36

  • 成功变绿,无报错,点击Create/Reset Database后会创建数据库,完后自动跳转登录页面

java代码审计 idea java代码审计靶场_网络安全_37

默认账号:admin 密码:password

java代码审计 idea java代码审计靶场_java代码审计 idea_38