目录

一、reCAPTCHA

二、代码审计(Medium级别)

1、渗透准备

(1)配置security为Medium级别。

(2)配置RECAPTCHA参数

(3)再次打开靶场

2、源码分析

(1)index.php

(2)Medium.php

(3)功能函数

(4)总结

三、渗透实战

1、修改密码并提交

(1)第一次点击change

(2)第二次点击change

(3)总结

2、bp修改密码


本系列为通过《DVWA靶场通关笔记》的reCAPTCHA关卡(low,medium,high,impossible共4关)渗透集合,通过对相应关卡源码的代码审计找到讲解渗透原理并进行渗透实践,本文为reCAPTCHA关卡Medium级别关卡的渗透部分。

一、reCAPTCHA

reCAPTCHA关卡模拟了网站验证码系统的实现,在通过绕过验证码的安全验证来实现密码修改等操作,不同安全等级存在不同的绕过方法,本小节对中等级别关卡进行渗透实战。

二、代码审计(Medium级别)

1、渗透准备

(1)配置security为Medium级别。

进入到reCAPTCHA关卡Medium页面,完整URL地址具体如下所示。

http://127.0.0.1/DVWA/vulnerabilities/captcha/

(2)配置RECAPTCHA参数

进入到DVWA的config目录,如下所示找到config.inc.php文件。

修改config.inc.php文件中的如下参数,虽然页面提示api-key需要通过https://www.google.com/recaptcha/admin/create生成,但是实际上这部分可以填充为自己的内容,如下所示。

$_DVWA[ 'recaptcha_public_key' ]  = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMOOYUAN';
$_DVWA[ 'recaptcha_private_key' ] = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMOOYUAN';

修改后效果如下所示,记得修改后保存文件。

(3)再次打开靶场

如下所示,更新config.inc.php文件后,靶场可以正常打开,这是一个具有修改密码功能的页面。

2、源码分析

(1)index.php

进入DVWA靶场源目录,找到index.php源码。

这段代码实现了 DVWA (Damn Vulnerable Web Application) 中的reCAPTCHA关卡的演示页面,主要功能包括:DVWA的Insecure CAPTCHA模块通过四个安全等级(低、中、高、不可能)演示验证码系统的安全演进,该模块核心展示密码修改场景下的验证码实现,包含密钥检查、表单动态生成(根据等级显示不同字段)和安全警告提示,如客户端验证绕过、验证码重复使用等问题,并通过对比不同等级的实现差异,直观呈现从脆弱到安全的演进过程,最终强调应使用专业验证服务(如reCAPTCHA)配合多因素验证的整体防护思路。

  • 初始化与安全级别处理
    • 设置页面路径和安全依赖。
    • 根据用户安全级别(低、中、高、不可能)加载不同的验证码实现。
  • 验证码配置检查
    • 验证是否配置了 reCAPTCHA API 密钥。
    • 若未配置则显示警告并隐藏表单。
  • 表单构建
    • 生成密码修改表单,包含当前密码(仅 "不可能" 级别)、新密码和确认密码字段。
    • 根据安全级别不同,集成不同的验证码机制(低级、中级、高级和不可能四个级别)。
  • 安全措施
    • "高" 和 "不可能" 级别包含 CSRF 令牌保护。
    • "不可能" 级别增加了当前密码验证。

经过注释后的详细代码如下所示。

<?php
/*** DVWA Insecure CAPTCHA 演示页面* 演示不同安全等级下的验证码实现方式及潜在安全风险*/// 定义网站根目录路径
define( 'DVWA_WEB_PAGE_TO_ROOT', '../../' );// 引入必要的库文件
require_once DVWA_WEB_PAGE_TO_ROOT . 'dvwa/includes/dvwaPage.inc.php';          // DVWA核心页面库
require_once DVWA_WEB_PAGE_TO_ROOT . "external/recaptcha/recaptchalib.php";    // reCAPTCHA库// 初始化页面,要求认证并启用PHPIDS防护
dvwaPageStartup( array( 'authenticated', 'phpids' ) );// 创建新页面对象
$page = dvwaPageNewGrab();
// 设置页面标题
$page[ 'title' ]   = 'Vulnerability: Insecure CAPTCHA' . $page[ 'title_separator' ].$page[ 'title' ];
// 设置页面ID
$page[ 'page_id' ] = 'captcha';
// 设置帮助按钮
$page[ 'help_button' ]   = 'captcha';
// 设置源代码查看按钮
$page[ 'source_button' ] = 'captcha';// 连接数据库
dvwaDatabaseConnect();// 根据安全等级选择对应的实现文件
$vulnerabilityFile = '';
switch( $_COOKIE[ 'security' ] ) {case 'low':      // 低安全等级$vulnerabilityFile = 'low.php';break;case 'medium':   // 中安全等级$vulnerabilityFile = 'medium.php';break;case 'high':     // 高安全等级$vulnerabilityFile = 'high.php';break;default:        // 默认(不可能等级)$vulnerabilityFile = 'impossible.php';break;
}// 控制表单是否显示
$hide_form = false;
// 引入对应级别的实现文件
require_once DVWA_WEB_PAGE_TO_ROOT . "vulnerabilities/captcha/source/{$vulnerabilityFile}";// 检查reCAPTCHA密钥配置
$WarningHtml = '';
if( $_DVWA[ 'recaptcha_public_key' ] == "" ) {$WarningHtml = "<div class=\"warning\"><em>reCAPTCHA API key missing</em> from config file: " . realpath( getcwd() . DIRECTORY_SEPARATOR . DVWA_WEB_PAGE_TO_ROOT . "config" . DIRECTORY_SEPARATOR . "config.inc.php" ) . "</div>";$html = "<em>Please register for a key</em> from reCAPTCHA: " . dvwaExternalLinkUrlGet( 'https://www.google.com/recaptcha/admin/create' );$hide_form = true;  // 密钥缺失时隐藏表单
}// 构建页面主体HTML
$page[ 'body' ] .= "
<div class=\"body_padded\"><h1>Vulnerability: Insecure CAPTCHA</h1>{$WarningHtml}<div class=\"vulnerable_code_area\"><form action=\"#\" method=\"POST\" ";// 密钥缺失时隐藏表单
if( $hide_form )$page[ 'body' ] .= "style=\"display:none;\"";$page[ 'body' ] .= "><h3>Change your password:</h3><br /><input type=\"hidden\" name=\"step\" value=\"1\" />\n";// 不可能等级需要验证当前密码
if( $vulnerabilityFile == 'impossible.php' ) {$page[ 'body' ] .= "Current password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_current\"><br />";
}$page[ 'body' ] .= "            New password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_new\"><br />Confirm new password:<br /><input type=\"password\" AUTOCOMPLETE=\"off\" name=\"password_conf\"><br />" . recaptcha_get_html( $_DVWA[ 'recaptcha_public_key' ] );  // 插入reCAPTCHA组件// 高安全等级下的开发者注释提示
if( $vulnerabilityFile == 'high.php' )$page[ 'body' ] .= "\n\n            <!-- **DEV NOTE**   Response: 'hidd3n_valu3'   &&   User-Agent: 'reCAPTCHA'   **/DEV NOTE** -->\n";// 高和不可能等级添加CSRF令牌
if( $vulnerabilityFile == 'high.php' || $vulnerabilityFile == 'impossible.php' )$page[ 'body' ] .= "\n            " . tokenField();$page[ 'body' ] .= "<br /><input type=\"submit\" value=\"Change\" name=\"Change\"></form>{$html}  <!-- 显示操作结果 --></div><h2>More Information</h2><ul><li>" . dvwaExternalLinkUrlGet( 'https://en.wikipedia.org/wiki/CAPTCHA' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.google.com/recaptcha/' ) . "</li><li>" . dvwaExternalLinkUrlGet( 'https://www.owasp.org/index.php/Testing_for_Captcha_(OWASP-AT-012)' ) . "</li></ul>
</div>\n";// 输出完整HTML页面
dvwaHtmlEcho( $page );?>

(2)Medium.php

进入DVWA靶场源目录,找到Medium.php源码。

打开源码Medium.php,分析可知这段代码实现了一个两步式的密码修改功能,主要功能是处理用户密码修改请求,并通过 reCAPTCHA 验证码进行验证。整个流程分为两个步骤

  1. 验证码验证阶段验证reCAPTCHA和密码一致性(特别注意:由于本关卡这部分是乱填的,且会向https://www.google.com/recaptcha/api/siteverify提交请求,这个网站目前无法响应,故注释掉这部分验证,强制设置$resp=1,否则没法向下继续走)。
  2. 密码修改阶段:验证码通过后,用户确认修改,确认验证通过后执行数据库更新

详细注释后的代码如下所示。 

<?php// 第一步:处理初始密码修改请求(包含CAPTCHA验证)
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '1' ) ) {// 隐藏表单,准备显示下一步或错误信息$hide_form = true;// 获取用户输入的新密码和确认密码$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// 检查第三方CAPTCHA验证// $resp = recaptcha_check_answer(// $_DVWA[ 'recaptcha_private_key'],  // reCAPTCHA私钥// $_POST['g-recaptcha-response']    // 用户输入的CAPTCHA响应
//);
$resp=1;// CAPTCHA验证失败处理if( !$resp ) {// 显示错误信息并重新显示表单$html     .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";$hide_form = false;return;}else {// CAPTCHA验证成功,检查两次输入的密码是否匹配if( $pass_new == $pass_conf ) {// 显示确认页面,包含隐藏表单准备第二步提交$html .= "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes.<br /></pre><form action=\"#\" method=\"POST\"><input type=\"hidden\" name=\"step\" value=\"2\" /><input type=\"hidden\" name=\"password_new\" value=\"{$pass_new}\" /><input type=\"hidden\" name=\"password_conf\" value=\"{$pass_conf}\" /><input type=\"submit\" name=\"Change\" value=\"Change\" /></form>";}else {// 密码不匹配,显示错误并重新显示表单$html     .= "<pre>Both passwords must match.</pre>";$hide_form = false;}}
}// 第二步:处理最终的密码修改请求
if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {// 隐藏表单$hide_form = true;// 获取密码(从隐藏表单字段)$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// 再次验证密码是否匹配(防御篡改)if( $pass_new == $pass_conf ) {// 密码转义防止SQL注入$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 对密码进行MD5哈希处理(注:MD5现在被认为不够安全)$pass_new = md5( $pass_new );// 更新数据库中的密码$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// 显示成功信息$html .= "<pre>Password Changed.</pre>";}else {// 密码不匹配(可能在第二步被篡改)$html .= "<pre>Passwords did not match.</pre>";$hide_form = false;}// 关闭数据库连接((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>

(3)功能函数

根据如下代码可知,CheckCaptcha函数会像谷歌https://www.google.com/recaptcha/api/siteverify进行请求,CheckCaptcha和recaptcha_get_html函数的定义如下所示。

<?php/*** 验证码验证函数(兼容旧版API)* * @param string $key 私钥* @param string $response 用户提交的验证码响应* @return bool|NULL 验证成功返回true,失败返回false,异常返回NULL*/
function recaptcha_check_answer($key, $response){return CheckCaptcha($key, $response);
}/*** 发送HTTP请求验证验证码* * @param string $key 私钥* @param string $response 用户提交的验证码响应* @return bool|NULL 验证成功返回true,失败返回false,异常返回NULL*/
function CheckCaptcha($key, $response) {try {// Google reCAPTCHA验证API地址$url = 'https://www.google.com/recaptcha/api/siteverify';// 准备POST数据$dat = array('secret'   => $key,                 // 网站私钥'response' => urlencode($response), // 用户响应(由前端生成)'remoteip' => urlencode($_SERVER['REMOTE_ADDR']) // 用户IP地址);// 配置HTTP请求选项$opt = array('http' => array('header'  => "Content-type: application/x-www-form-urlencoded\r\n",'method'  => 'POST','content' => http_build_query($dat) // 生成POST数据));// 创建HTTP上下文并发送请求$context = stream_context_create($opt);$result  = file_get_contents($url, false, $context);// 解析JSON响应并返回验证结果return json_decode($result)->success;} catch (Exception $e) {// 发生异常时返回NULLreturn null;}
}/*** 生成前端验证码HTML代码* * @param string $pubKey 公钥* @return string HTML代码片段*/
function recaptcha_get_html($pubKey){return "<script src='https://www.google.com/recaptcha/api.js'></script><br /> <div class='g-recaptcha' data-theme='dark' data-sitekey='" . $pubKey . "'></div>";
}?>

 三个函数功能详解,如下所示。

  • recaptcha_check_answer
    • 功能:验证用户提交的验证码是否有效(兼容旧版 API)。
    • 流程:直接调用CheckCaptcha函数进行验证。
    • 安全作用:作为入口函数提供向后兼容性。
  • CheckCaptcha
    • 功能:向 Google 服务器发送验证请求并处理响应。
    • 流程
      • 构建 POST 请求参数(私钥、用户响应、IP 地址)。
      • 配置 HTTP 请求上下文(设置请求头、方法和内容)。
      • 发送请求到 Google 验证 API。
      • 解析 JSON 响应并提取验证结果。
    • 安全作用:核心验证逻辑,防止 CSRF 攻击和机器人自动化操作。
  • recaptcha_get_html
    • 功能:生成前端验证码 UI 组件。
    • 流程
      • 引入 Google reCAPTCHA JavaScript 库。
      • 创建带有公钥的验证码容器(暗色主题)。
    • 安全作用:在页面中正确渲染验证码组件,确保用户交互。

(4)总结

对于Medium关卡,两者的代码区别如下所示。

即第二步增加了一个参数passed_captcha,只有这个值为True(1)时,才可得到突破。代码依赖客户端提交的step参数来区分处理逻辑,攻击者可能直接提交第二步请求绕过验证码验证。

三、渗透实战

1、修改密码并提交

bp设置拦截报文,进入靶场,如下所示。

http://127.0.0.1/DVWA/vulnerabilities/captcha/

(1)第一次点击change

将密码改为1234,效果如下所示。

此时bursuite抓包,此时step=1,报文如下所示。

此时页面也变为如下形式,提示“You passed the CAPTCHA! Click the button to confirm your changes”。

(2)第二次点击change

再次点击change,此时系统提示如下。

burpsuite抓包效果如下所示。

(3)总结

很明显修改密码共有两个报文,基于源码审计我们知道且第二个不依赖于第一个,故而渗透思路就是只对第二个报文进行修改重放,尝试修改密码。接下来我们将第2个报文发送到repeater如下所示。

2、bp修改密码

在repeater中,通过修改如下红框中的密码0000来进行渗透,具体如下所示。

将如下红框中的密码0000均改为password,并点击send,如下所示密码修改成功,说明成功渗透。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88140.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88140.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88140.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能安全基础复习用:对抗样本检测与防御

一、对抗样本&#xff08;Adversarial Examples&#xff09;定义&#xff1a;对输入样本添加人眼无法察觉的细微干扰&#xff0c;导致模型以高置信度输出错误结果。对抗样本的分布通常偏离自然数据分布&#xff0c;与正常样本在模型中间层/输出层的分布存在差异。核心目标&…

[数学基础] 矩阵的秩及其应用

深入浅出&#xff1a;矩阵的秩及其应用 文章目录深入浅出&#xff1a;矩阵的秩及其应用一、数学定义二、核心作用三、计算方法与步骤方法1&#xff1a;高斯消元法&#xff08;最常用&#xff09;方法2&#xff1a;奇异值分解&#xff08;SVD&#xff09;方法3&#xff1a;行列式…

LKH-3算法求解TSP问题基本原理与应用

通俗理解LKH-3算法 LKH-3&#xff08;Lin-Kernighan-Helsgaun&#xff09;是求解**旅行商问题&#xff08;TSP&#xff09;**的最强启发式算法之一&#xff0c;由丹麦计算机科学家Keld Helsgaun在LKH-2基础上改进而来。它的核心思想是&#xff1a;通过智能的“局部破坏与修复”…

游戏开发学习记录

初始化只是第一次实例化的时候调用&#xff0c;show和unshow是打开界面和关闭界面的时候&#xff0c;会多次调用 在一个脚本里面show是每一次打开界面的时候需要做的事情&#xff0c;而Init是初始化。UIMgr里面的数据结构&#xff1a;为什么我要先从数据结构入手呢&#xff1f;…

一级缓存与二级缓存深度剖析:作用域、配置与同步方案全解析

引言 在分布式系统与高并发场景下&#xff0c;缓存机制已成为提升系统性能的关键技术。本文从作用域、失效机制、配置实践到同步方案&#xff0c;系统化解析一级缓存与二级缓存的核心差异与工程实践。 一、一级缓存&#xff1a;会话级数据加速器 1.1 作用域与生命周期 作用域&a…

OneCode MQTT插件开发实战:基于Paho.Client的物联网通信解决方案

引言 在物联网应用开发中&#xff0c;MQTT协议因其轻量、低带宽占用的特性被广泛采用。OneCode平台提供的xui.MQTT插件基于Eclipse Paho.Client实现了完整的MQTT通信能力&#xff0c;本文将从插件用途、核心实现、开发要点和功能扩展四个维度&#xff0c;详解如何基于该插件构建…

1.1_5_1 计算机网络的性能指标(上)

在这个小节中我们要学习计算机网络的性能指标&#xff0c;我们在考研当中主要掌握这样的七个性能指标&#xff0c;分别是速率、带宽、吞吐量、时延、时延带宽积、往返时延和信道利用率。我会把相关性比较紧密的性能指标放在一起讲解。在这个视频中&#xff0c;我们先来学习前三…

Python 性能优化指南:深入剖析代码分析与优化工具

Python 性能优化指南:深入剖析代码分析与优化工具 在 Python 的广泛应用场景中,性能优化既是挑战,也是机遇。无论是构建 Web 应用还是处理数据分析,理解代码性能瓶颈并有效优化至关重要。本文将探讨 Python 代码性能分析的核心方法,并逐步解析关键工具的使用技巧,带您从…

力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树

106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], postor…

Notepad++正则表达全解

摘要:Notepad正则表达式符号大全包含11类常用语法&#xff1a;基础符号&#xff08;.^$?等&#xff09;、预定义字符类&#xff08;\d\w\s等&#xff09;、锚点&#xff08;\b\B&#xff09;、量词&#xff08;{n,m}&#xff09;、分组引用&#xff08;()$1&#xff09;、字符…

前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)

一、准备工作 服务器环境要求 银河麒麟 V10 操作系统 开放端口&#xff1a;MinIO (9000、9001)、 Redis (6379)、应用服务 jar包(18888)、前端服务(8080) 系统用户&#xff1a;具有 sudo 权限的用户 操作&#xff1a;需要先有必备的工具前端的vsCode,webStrom、后台的idea&…

贪心算法:简单而高效的求解策略C++

贪心算法详解及C实现 1. 什么是贪心算法 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法策略。 贪心算法与动态规划不同在于它…

IDEA 中使用 <jsp:useBean>动作指令时,class属性引用无效

问题&#xff1a;在 IDEA 中创建 Java Web项目&#xff0c;在src/model包下存在一个Student类该类中包含&#xff1a;全参构造器、私有属性的get/set方法。然后在 jsp 页面中使用 <jsp:useBean>创建Student类的对象&#xff1a;访问页面时报错&#xff1a;原因&#xff1…

【网络】Linux 内核优化实战 - net.core.flow_limit_table_len

目录参数作用查看与修改调优建议相关警告net.core.flow_limit_table_len 是 Linux 内核中的一个网络参数&#xff0c;用于控制**流限制表&#xff08;Flow Limit Table&#xff09;**的大小。这个表主要用于限制网络流量中单个"流"&#xff08;通常指来自同一源IP、端…

前端开发常见问题技术文章大纲

前端开发常见问题技术文章大纲 常见性能优化问题 页面加载速度慢的原因及解决方案渲染阻塞资源的优化方法内存泄漏的检测与修复 跨浏览器兼容性问题 不同浏览器对CSS和JavaScript的支持差异Polyfill和Shim的使用场景如何利用工具检测兼容性问题 响应式设计挑战 媒体查询的最佳实…

Redis常见性能问题和解决方案有哪些?

Redis 作为高性能的内存数据库&#xff0c;在实际使用中可能会遇到性能问题。以下是常见的性能问题及其解决方案&#xff0c;用中文总结如下&#xff1a; 1. 高延迟问题 问题描述&#xff1a;客户端请求响应时间过长&#xff0c;可能由于网络、命令复杂度或服务器负载导致。 解…

闪测仪应用案例丨手机中框如何突破「尺寸检测」瓶颈?

越来越多的手机中框&#xff0c;正改为更复杂的镂空设计&#xff0c;这种设计不仅保持了手机中框的结构强度&#xff0c;还进一步减轻了机身重量&#xff0c;同时提升了散热性能。这让手机中框的自动化生产增加了很多难点&#xff0c;其中的尺寸检测就遇到了许多瓶颈。▪ 尺寸精…

【字节跳动】数据挖掘面试题0011:介绍下时间序列分析常用知识点

文章大纲时间序列分析全面解析一、时间序列分析的基本概念二、时间序列分析的主要方法1. 描述性分析2.统计分析方法3.预测模型&#xff08;1&#xff09;传统统计模型&#xff08;2&#xff09;现代机器学习模型三、时间序列分析的应用场景四、模型评估五、在字节跳动的应用场景…

ubuntu中交叉编译iperf3到目标平台xilinx

注&#xff1a;此文为ubuntu x86系统编译程序到xilinx aarch64系统中。 一、工具准备 x86上编译aarch64的编译器 sudo apt install gcc-aarch64-linux-gnu g-aarch64-linux-gnu #保证编译器在环境变量中&#xff0c;尝试执行aarch64-linux-gnu-gcc 目标平台的根文件系统rootf…

Java-数据结构-集合框架

什么是集合框架集合本质是java所实现的一组数据结构&#xff0c;提供了不同的增删改查方法。集合就是定义了接口&#xff0c;再通过不同的类去实现定义的接口&#xff0c;这些实现了接口的类就是集合类&#xff0c;例如list&#xff0c;stack&#xff0c;map。集合框架的重要性…