尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

JavaSecLab靶场搭建指南:从环境配置到漏洞调试的完整实践

JavaSecLab靶场搭建指南:从环境配置到漏洞调试的完整实践
📅 发布时间:2026/7/6 21:54:55

1. 项目概述:为什么我们需要一个Java专属的靶场?

在安全学习和渗透测试的圈子里,提到靶场,大家第一时间想到的往往是DVWA、Pikachu、Upload-Labs这些基于PHP的经典平台。它们确实很棒,覆盖了SQL注入、文件上传、XSS等Web安全的核心漏洞。但作为一名主要和Java技术栈打交道的开发者或安全研究员,你有没有过这样的感觉:用PHP靶场复现的漏洞,和你在实际工作中遇到的、运行在Tomcat、Spring Boot上的Java应用,总感觉隔了一层?攻击载荷的构造、中间件的特性、框架的过滤机制,都存在微妙的差异。

这就是JavaSecLab靶场的核心价值所在。它不是一个简单的漏洞集合,而是一个专门为Java生态量身定制的、综合性的漏洞学习与实践平台。当你搭建起这个靶场,你面对的是一个更贴近真实生产环境的“战场”:这里有基于Servlet/JSP的传统漏洞,有Spring MVC、Spring Boot框架下的新型安全问题,有Fastjson、Jackson等常用组件的反序列化漏洞,还有Shiro、Log4j2这类曾掀起轩然大波的真实案例复现。搭建JavaSecLab,本质上是在你的本地或测试环境中,构建一个可控的、安全的Java漏洞“博物馆”和“训练场”。它让你能在一个无风险的环境里,亲手触发、调试并理解那些只会在Java世界里出现的独特安全问题,这对于提升针对Java应用的代码审计和渗透测试能力至关重要。

2. 环境准备与核心组件解析

搭建任何靶场,第一步永远是准备好它的“土壤”。JavaSecLab作为一个现代化的Java项目,对运行环境有明确的要求,理解这些要求背后的原因,能帮你避开很多初期的坑。

2.1 基础运行环境选型与安装

Java环境 (JDK 8+)JavaSecLab推荐使用JDK 8或更高版本。这里有个关键点:强烈建议使用JDK,而不是JRE。因为JDK包含了完整的开发工具(如javac, jstack, jmap),当你在靶场中调试漏洞、分析内存或线程问题时,这些工具会非常有用。我个人的习惯是使用OpenJDK 11 LTS版本,它在性能、功能和长期支持上取得了很好的平衡。你可以通过命令java -version和javac -version来验证安装。

数据库环境 (MySQL 8.0+)项目明确要求MySQL 8.0及以上版本。为什么是8.0+?一方面,JavaSecLab的数据库初始化脚本(sql/JavaSecLab.sql)可能使用了8.0版本才支持或优化过的SQL语法(如窗口函数、更好的JSON支持)。另一方面,MySQL 8.0在默认身份验证插件上从mysql_native_password改为了caching_sha2_password。这是一个极易导致连接失败的坑点。很多旧的Java数据库连接驱动或配置不兼容新的验证方式。因此,在安装完MySQL 8.0后,你有两个选择:一是确保你的Java连接器(如mysql-connector-java)版本足够新(建议8.0.23以上),二是在MySQL中为靶场使用的用户单独修改认证方式。我们会在配置环节详细说明。

构建工具 (Maven 3.6+)JavaSecLab是一个Maven项目。Maven负责管理项目依赖(那些安全漏洞相关的jar包)、编译代码和打包。安装Maven后,通过mvn -v检查版本。国内开发者通常会配置阿里云镜像以加速依赖下载,这步操作能为你节省大量等待时间。

2.2 项目源码获取与初步审视

通常,你可以从GitHub等代码托管平台获取JavaSecLab的源码。使用git clone命令拉取项目到本地。拿到源码后,先别急着运行,花几分钟浏览一下项目结构,这能让你对靶场有个宏观认识:

  • src/main/java: 核心的漏洞代码实现都在这里。你可以按目录初步判断它包含了哪些类型的漏洞(如controller/sqli可能是SQL注入,controller/deserialize可能是反序列化)。
  • src/main/resources: 配置文件所在,尤其是application.yml,这是整个项目的“中枢神经”。
  • sql/: 存放数据库初始化脚本的目录。
  • pom.xml: Maven项目对象模型文件,列出了所有项目依赖。扫一眼这里,你就能知道项目用了哪些框架(Spring Boot, MyBatis等)和可能存在漏洞的组件(Fastjson, Jackson, Shiro等)。

注意:从网络下载任何开源项目,尤其是安全靶场,第一原则是在隔离的环境(如虚拟机、专属的本地开发环境)中运行。切勿在生产服务器或存有敏感数据的个人电脑上直接搭建。

3. 数据库配置与初始化详解

数据库是靶场的数据存储核心,很多漏洞(如SQL注入)的演练都依赖于正确的数据。这一步的细节处理直接决定了靶场能否成功启动。

3.1 创建数据库与用户

首先,登录你的MySQL数据库。建议为JavaSecLab单独创建一个数据库和用户,做到环境隔离。

-- 创建数据库,字符集建议使用utf8mb4以支持完整的UTF-8字符(如emoji) CREATE DATABASE javaseclab DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建专属用户,并设置密码。'your_strong_password' 请替换为高强度密码 CREATE USER 'javaseclab_user'@'%' IDENTIFIED BY 'your_strong_password'; -- 授予该用户对javaseclab数据库的所有权限。靶场环境可以这样操作,生产环境需严格收紧权限。 GRANT ALL PRIVILEGES ON javaseclab.* TO 'javaseclab_user'@'%'; -- 刷新权限使设置生效 FLUSH PRIVILEGES;

这里用户主机设置为'%'允许从任何主机连接,方便本地或远程测试。如果仅在本地运行,可改为'localhost'以增强安全性。

3.2 执行SQL初始化脚本

找到项目中的sql/JavaSecLab.sql文件。这个脚本会创建数据表并插入演练所需的基础数据(如用户账号、文章内容等)。

在MySQL命令行中,切换到刚创建的数据库,然后执行该脚本:

mysql -u root -p
USE javaseclab; SOURCE /path/to/your/JavaSecLab/sql/JavaSecLab.sql;

或者直接在终端中使用重定向:

mysql -u javaseclab_user -p javaseclab < /path/to/your/JavaSecLab/sql/JavaSecLab.sql

执行成功后,可以查看一下创建了哪些表:SHOW TABLES;。你可能会看到users,articles,logs等表,这些就是后续漏洞演练的“舞台道具”。

3.3 应对MySQL 8.0认证插件问题

如前所述,MySQL 8.0的默认认证插件可能导致Java应用连接失败,错误信息可能包含 “caching_sha2_password” 或 “Public Key Retrieval is not allowed”。解决方法如下:

  1. 升级连接器:确保项目pom.xml中mysql-connector-java的版本是8.0.23或更高。这是最推荐的方式,一劳永逸。
  2. 修改用户认证方式(备选):如果暂时无法升级驱动,可以回退用户的认证插件。
    ALTER USER 'javaseclab_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_password'; FLUSH PRIVILEGES;
  3. 在连接字符串中添加参数:在项目的数据库配置中(通常是application.yml),可以在JDBC URL里添加参数:
    jdbc:mysql://localhost:3306/javaseclab?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    allowPublicKeyRetrieval=true允许客户端从服务器获取公钥,用于解决新认证方式下的问题。serverTimezone=UTC避免时区错误。

4. 核心配置文件application.yml的深度调优

application.yml(或application.properties)是Spring Boot项目的核心配置文件。JavaSecLab的顺利运行,八成取决于这里的配置是否正确。

4.1 激活正确的配置Profile

在配置文件中,你通常会看到这样的段落:

spring: profiles: active: @profiles.active@

或者有明确的---分隔符来区分不同环境(如dev,prod,docker)。根据你获取的项目源码,默认激活的profile可能是docker。如果你是在非Docker环境下本地搭建,就需要将其改为dev或你本地环境的配置块。

关键操作:找到spring.profiles.active这一项,将其值修改为dev。如果文件里有多个以---开头的配置段,并且上面标有spring.profiles: dev,那么修改active值就是为了让应用加载这一段配置。

4.2 数据库连接配置详解

在对应的profile配置段(如dev)中,找到数据源配置部分。它应该类似于:

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/javaseclab?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: javaseclab_user password: your_strong_password
  • driver-class-name: 必须是com.mysql.cj.jdbc.Driver。如果看到旧的com.mysql.jdbc.Driver,请更新它,这是MySQL Connector/J 6.0+后的新驱动类。
  • url: 确保localhost:3306和数据库名javaseclab与你实际环境一致。参数useSSL=false在本地测试环境可以关闭SSL以简化连接。serverTimezone必须设置,否则可能出现时间相关错误,值根据你所在时区设定(如Asia/Shanghai,UTC)。
  • username和password: 填写你之前创建的数据库用户和密码。

4.3 其他关键配置项

  • 服务器端口:server.port决定了靶场启动后通过哪个端口访问,默认可能是8080。如果8080被占用,可以改为其他端口,如8090。
  • 日志级别:为了调试方便,可以将相关包的日志级别调为DEBUG。
    logging: level: com.javaseclab: DEBUG org.springframework.jdbc.core: DEBUG # 查看SQL执行日志
    这能帮助你在遇到问题时,看到更详细的执行过程,比如SQL语句是否正常执行、请求参数是什么。

实操心得:修改application.yml时,务必注意YAML文件的缩进格式。缩进必须使用空格,且同一层级的元素左对齐。一个常见的错误是误用Tab键缩进,这会导致解析失败,应用无法启动。建议使用对YAML语法高亮和校验友好的编辑器(如VS Code、IntelliJ IDEA)。

5. 项目构建、运行与访问验证

配置完成后,就可以让靶场运行起来了。这个过程涉及依赖下载、代码编译和打包。

5.1 使用Maven进行项目构建

在项目根目录(即包含pom.xml的目录)下打开终端或命令行。

  1. 清理并打包:执行以下命令,Maven会清理旧编译结果、下载所有依赖、运行测试(如果有)、并将项目打包成可执行的JAR文件。

    mvn clean package -DskipTests

    参数-DskipTests表示跳过单元测试,可以加快打包速度。对于靶场,我们通常不需要运行其自带的测试。

  2. 观察构建过程:构建过程中,控制台会输出大量信息。你需要关注的是最后是否有BUILD SUCCESS字样。如果出现BUILD FAILURE,则需要根据错误信息排查。常见失败原因包括:

    • 网络问题导致依赖下载失败:检查Maven镜像配置,或尝试重新执行命令。
    • Java版本不兼容:确认环境变量中的JAVA_HOME指向正确的JDK 8+版本。
    • MySQL驱动问题:确认pom.xml中的MySQL连接器版本与本地MySQL版本兼容。

构建成功后,在target/目录下会生成一个名为JavaSecLab-0.0.1-SNAPSHOT.jar(具体名字可能因项目配置而异)的JAR文件。

5.2 启动Spring Boot应用

使用Java命令直接运行打包好的JAR文件:

java -jar target/JavaSecLab-0.0.1-SNAPSHOT.jar

如果一切配置正确,你将看到Spring Boot的启动日志在控制台滚动,最后会出现类似Started Application in 10.5 seconds (JVM running for 11.8)的信息,并标明运行在http://localhost:8080(或你配置的端口)。

5.3 首次访问与功能验证

打开浏览器,访问http://localhost:8080(或你设定的地址)。你应该能看到JavaSecLab的首页。首页通常会有一个漏洞列表或导航菜单,展示了靶场所包含的漏洞类型,例如:

  • SQL注入(数字型、字符型、盲注)
  • 命令执行
  • 文件上传与包含
  • 反序列化(Fastjson, Jackson, CommonsCollections等)
  • 框架漏洞(Spring, Shiro, Struts2等)
  • 逻辑漏洞(越权、密码重置等)

验证步骤:

  1. 尝试点击几个漏洞链接,看是否能正常打开漏洞演示页面。
  2. 找一个简单的漏洞(如一个GET型的SQL注入点)尝试注入'或1' and '1'='1,观察页面反应是否与预期一致(如报错或结果不同)。
  3. 检查页面上的功能,如登录、注册、搜索等,是否都能正常交互。

如果所有功能正常,恭喜你,JavaSecLab靶场已经成功搭建并运行!

6. 深入探索:靶场漏洞模块解析与学习路径建议

成功运行只是第一步,如何高效利用这个靶场进行学习才是关键。JavaSecLab的漏洞设计通常遵循从易到难、从原理到实战的原则。

6.1 典型漏洞模块深度解析

以SQL注入模块为例,一个设计良好的Java靶场不会只给一个注入点。它可能会包含:

  • 基于Statement的注入:这是最原始、最易受攻击的形式,用于理解拼接SQL语句的危险性。
  • 基于PreparedStatement的误用:展示即使使用了预编译,但如果将用户输入直接用于动态表名、列名或排序字段,依然存在注入风险。
  • MyBatis中的${}与#{}误用:这是Java持久层框架中的经典问题。${}是字符串替换,存在注入风险;#{}是参数占位符,相对安全。靶场会提供对比案例。
  • 盲注与时间盲注:在无显式错误回显的情况下,如何通过布尔逻辑或时间延迟来提取数据。

学习方式:不要仅仅满足于使用SQLMap等工具跑出结果。打开浏览器的开发者工具(F12),查看每个请求的详细参数和响应。同时,在IDEA或Eclipse中打开对应的后端控制器代码(如SqliController.java),结合请求参数,单步调试(Debug)执行流程,观察SQL语句是如何被拼接和执行的,理解漏洞产生的根本原因。

再以Fastjson反序列化模块为例:

  • 基础反序列化利用:提供一个存在漏洞的Fastjson版本,演示如何通过构造特定的JSON字符串触发任意代码执行。
  • JNDI注入利用:结合LDAP/RMI服务,展示如何利用反序列化进行远程类加载和命令执行。
  • 不出网利用技巧:在目标服务器无法访问外网的情况下,如何利用本地类路径(ClassPath)中已有的类(如Tomcat依赖中的org.apache.tomcat.dbcp.dbcp2.BasicDataSource)构造利用链。

学习方式:搭建一个简单的恶意RMI/LDAP服务(可以使用marshalsec等工具),在本地网络环境中模拟完整的攻击链。通过Wireshark抓包,分析JNDI查询和响应的网络流量,深刻理解“漏洞触发-远程加载-命令执行”的全过程。

6.2 建议的学习路径与实战方法

对于初学者,建议遵循以下路径:

  1. 信息收集与熟悉:浏览所有漏洞分类,了解靶场涵盖的范围。查看每个漏洞点的前端界面和基础描述。
  2. 黑盒测试入门:在不看源码的情况下,像一名渗透测试人员一样,对每个漏洞点进行手动测试。尝试各种常见的Payload,观察输入与输出,猜测后端可能存在的逻辑缺陷。
  3. 白盒代码审计:打开对应的Java源代码,对照你黑盒测试时的猜想,分析漏洞产生的代码位置。理解为什么这里会有漏洞,是未过滤输入?是使用了危险函数?还是框架特性被误用?
  4. 调试与动态分析:在开发环境中以Debug模式启动靶场。在关键代码行(如SQL拼接处、反序列化调用处)设置断点。重新触发漏洞,观察程序执行到断点时,变量的值、程序的调用栈,这能让你对漏洞的理解从“知道”升华到“透彻”。
  5. 漏洞修复与加固:尝试修改漏洞代码。例如,将Statement改为PreparedStatement并正确使用参数化查询;在Fastjson反序列化时指定安全的AutoType检查或升级到安全版本。然后重新测试,验证修复是否有效。
  6. 拓展与关联学习:将靶场中学到的漏洞原理,与真实世界的漏洞公告(CVE)关联起来。例如,学习了Shiro反序列化后,可以去分析CVE-2020-11989等真实案例的利用细节。

7. 进阶部署与集成:Docker化与IDE调试

对于希望更深入或更便捷使用靶场的用户,可以考虑以下进阶部署方式。

7.1 使用Docker Compose一键部署

许多现代靶场项目都提供了docker-compose.yml文件。如果JavaSecLab项目包含此文件,那么部署将变得极其简单。

  1. 确保系统已安装Docker和Docker Compose。

  2. 在项目根目录下,执行命令:

    docker-compose up -d

    这个命令会读取docker-compose.yml,自动拉取所需的MySQL和Java应用镜像,创建网络和容器,并启动所有服务。

  3. 使用docker-compose logs -f可以查看容器日志,排查启动问题。

  4. 访问http://localhost:映射端口即可使用。

Docker部署的优势在于环境隔离、依赖固化、一键启停,非常适合快速搭建演示环境或避免污染本地开发环境。

7.2 在IDE中导入与调试项目

对于学习者而言,在集成开发环境(IDE)如 IntelliJ IDEA 或 Eclipse 中直接打开项目,是进行代码审计和动态调试的最佳方式。

  1. 导入项目:在IDEA中,选择 “Open” 或 “Import Project”,指向包含pom.xml的JavaSecLab根目录。IDEA会自动识别为Maven项目并开始导入,下载所有依赖。
  2. 配置运行项:导入成功后,找到主启动类(通常是一个带有@SpringBootApplication注解的类,如Application.java)。右键点击,选择 “Run ‘Application.main()’” 或 “Debug”。
  3. 进行调试:
    • 在疑似存在漏洞的代码行左侧点击设置断点。
    • 以Debug模式启动应用。
    • 在浏览器中访问靶场并触发漏洞点。
    • 程序执行到断点时会暂停,此时你可以在IDEA的Debug工具窗口中查看所有变量的当前值、方法调用栈,甚至可以单步执行(Step Over/Into),逐行分析漏洞是如何被触发的。

这种“运行-触发-调试”的闭环学习方式,能让你对漏洞机理的理解达到前所未有的深度。

8. 常见问题排查与解决实录

即使按照步骤操作,搭建过程中也可能遇到各种问题。这里记录了一些典型问题及其解决方案。

8.1 应用启动失败类问题

问题一:数据库连接失败

  • 现象:启动时控制台报错,包含 “Communications link failure”, “Access denied for user”, 或 “Unknown database”。
  • 排查:
    1. 检查application.yml中的数据库IP、端口、库名、用户名、密码是否正确。
    2. 确认MySQL服务是否正在运行 (systemctl status mysql或services.msc)。
    3. 确认创建的用户是否有远程连接权限(如果非本地连接)。使用mysql -u javaseclab_user -p -h 127.0.0.1测试连接。
    4. 检查MySQL 8.0认证插件问题,如前文所述。
  • 解决:修正配置、启动服务、调整用户权限或认证方式。

问题二:端口被占用

  • 现象:启动时报错 “Web server failed to start. Port XXXX was already in use.”
  • 排查:使用命令查找占用端口的进程。
    • Linux/Mac:lsof -i:8080或netstat -tulpn | grep :8080
    • Windows:netstat -ano | findstr :8080
  • 解决:终止占用进程,或修改application.yml中的server.port为其他空闲端口。

问题三:依赖下载失败或冲突

  • 现象:mvn clean package失败,提示某个依赖找不到或存在版本冲突。
  • 排查:
    1. 检查网络,确认Maven镜像仓库(如阿里云镜像)配置正确且可访问。
    2. 查看具体的错误信息,看是哪个jar包出了问题。
    3. 尝试删除本地Maven仓库中对应的依赖目录(默认在~/.m2/repository),然后重新构建。有时本地仓库的缓存文件会损坏。
  • 解决:配置正确的镜像、清理仓库缓存、或根据错误信息调整pom.xml中的依赖版本。

8.2 运行时功能异常类问题

问题四:访问页面404或白页

  • 现象:应用启动成功,但访问首页或具体漏洞页面时返回404或空白页。
  • 排查:
    1. 确认访问的URL和端口号完全正确。
    2. 查看应用启动日志,是否有关于Controller映射(Mapping)的警告或错误信息。可能某些请求路径没有被正确注册。
    3. 检查静态资源(如CSS, JS, HTML)是否被打包进了JAR文件,或者路径配置是否正确。
  • 解决:核对URL;检查启动日志中的Mapping信息;确认前端资源路径。

问题五:漏洞Payload执行不成功

  • 现象:输入典型的测试Payload(如SQL注入的'),但页面没有预期的报错或结果变化。
  • 排查:
    1. 首先确认你测试的漏洞点是否就是设计用来演示该漏洞的。有些靶场可能有防护机制或使用了预编译,需要寻找特定的“漏洞入口”。
    2. 查看浏览器开发者工具中的“网络(Network)”标签,确认你输入的参数是否被正确发送到了后端。有时前端会有JavaScript验证。
    3. 查看应用控制台日志,是否有SQL异常、命令执行错误等信息被打印出来。将日志级别调为DEBUG可能看到更多细节。
    4. 最重要的:去查看对应的后端Java代码。也许漏洞的实现方式和你想象的不一样(例如,它可能是一个POST请求的JSON参数,而不是URL参数)。
  • 解决:结合前端请求、后端日志和源代码进行综合分析,理解靶场该漏洞点的具体触发逻辑。

问题六:Docker容器内部应用无法连接数据库

  • 现象:使用Docker Compose启动后,Java应用容器日志显示数据库连接失败。
  • 排查:在Docker Compose网络中,容器之间通过服务名(service name)通信,而不是localhost。
  • 解决:检查Java应用配置文件(在Docker中可能是通过环境变量或卷挂载的配置文件)中的数据库连接URL。它应该类似于jdbc:mysql://mysql_service_name:3306/javaseclab,其中mysql_service_name是docker-compose.yml中定义的MySQL服务名称,而不是localhost。

搭建和探索JavaSecLab的过程,本身就是一个绝佳的安全学习体验。从环境配置、问题排查到漏洞原理探究,每一步都加深了你对Java应用运行机制和安全薄弱点的理解。记住,靶场不仅是用来“打”的,更是用来“读”和“调”的。当你能够流畅地搭建起这个环境,并开始深入每一个漏洞模块的代码时,你已经走在成为一名合格的Java应用安全分析师的路上。

相关新闻

  • Docker 20.10.7 与 Kubernetes 1.20.9 版本锁定:CentOS 7 环境 5 步避坑指南
  • 【记录】CentOS7(Linux)通过Docker部署Ethercalc(含redis)
  • Playwright自动化测试:利用storageState实现登录态持久化

最新新闻

  • OpenAI Audio API真实落地指南:语音预处理与鲁棒性工程实践
  • 工程效能四维模型BEST™:构建效率、实验速率、系统韧性与认知负荷
  • 革命性Blender四边形拓扑优化:QRemeshify智能重拓扑实战指南
  • 宋维刚词霸天下38000词思维导图:基于COCA词频的10级优先级划分与38907词覆盖分析
  • MAX9744与STM32L162ZE在嵌入式音频系统中的应用与优化
  • 计算机毕业设计之基于Yolov8的安全帽佩戴目标检测系统

日新闻

  • AI智能体安全防护框架AgentGuard:从原理到实战部署指南
  • KMX63与PIC18F26K40硬件组合及低功耗设计实践
  • 基于YOLO13改进的门体检测模型:C3k2模块与PoolingFormer技术解析

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号