1. 项目概述为什么选择YakitNuclei这套组合拳如果你刚接触网络安全或者想从理论走向实践最头疼的恐怕就是“怎么验证一个漏洞”。看了一堆概念但面对一个真实的网站或系统往往无从下手。手动测试效率低用BurpSuite等专业工具又觉得门槛太高、配置复杂。这正是“新手友好用Yakit和Nuclei Templates快速上手漏洞验证”这个项目要解决的问题。它瞄准的就是从“知道漏洞”到“亲手验证漏洞”这个关键的实践鸿沟。简单来说这个项目提供了一套开箱即用、图形化操作的“漏洞验证工作流”。Yakit是一个面向安全从业者的图形化安全工具平台你可以把它理解为一个“安全工具箱的集成桌面”把很多命令行工具比如Nuclei包装成了点点鼠标就能用的功能。而Nuclei则是一个基于YAML模板的快速漏洞扫描器社区维护了成千上万个针对各种漏洞的“验证剧本”也就是Templates。这套组合的核心优势在于Yakit降低了Nuclei的使用门槛而Nuclei Templates提供了海量、即用的漏洞检测逻辑。你不需要从零写代码只需要找到对应的模板配置好目标就能一键验证漏洞是否存在。这特别适合以下几类朋友一是网络安全初学者想通过实操加深理解二是开发或运维人员想快速检查自己负责系统的常见安全问题三是参与CTF比赛或打靶练习的爱好者需要高效的工具进行漏洞利用。项目里提到的“附实战靶场”更是画龙点睛之笔。光有工具不会用等于零在一个可控、合法的环境靶场里练习是学习安全技能最安全、最有效的方式。接下来我们就从环境搭建开始一步步拆解如何用这套组合拳在靶场上“拳拳到肉”地验证漏洞。2. 环境准备与工具部署打造你的专属安全实验台工欲善其事必先利其器。在开始漏洞验证之前我们需要一个稳定、隔离的实验环境。这包括部署用于练习的漏洞靶场以及安装和配置Yakit与Nuclei。2.1 靶场环境搭建构建安全的“练功房”直接在互联网上扫描或测试未经授权的系统是非法且不道德的。因此我们必须在本地或可控的虚拟机内搭建靶场。这里推荐两种最主流、对新手最友好的方式Docker容器和虚拟机镜像。Docker部署推荐给有一定Linux基础的用户Docker方式轻量、快速易于管理和重置。以著名的DVWADamn Vulnerable Web Application靶场为例。安装Docker前往Docker官网下载并安装对应你操作系统的Docker DesktopWindows/macOS或使用包管理器安装Docker EngineLinux。拉取靶场镜像打开终端或命令行执行命令docker pull vulnerables/web-dvwa。运行容器执行docker run --rm -it -p 80:80 vulnerables/web-dvwa。这条命令会将容器内的80端口映射到你本机的80端口。访问靶场在浏览器中打开http://localhost或http://你的本机IP即可看到DVWA的登录页面。默认账号/密码为admin/password。注意使用Docker时务必确保你的宿主机本地电脑有足够资源建议至少4GB空闲内存。首次拉取镜像可能需要一些时间取决于网络速度。虚拟机部署推荐给所有新手尤其是Windows用户如果你不熟悉命令行使用现成的虚拟机镜像是最简单的。例如OWASP Broken Web Applications (BWA) 项目提供了一个集成了数十个漏洞应用的虚拟机镜像。下载虚拟机软件安装VirtualBox免费或VMware Workstation Player个人免费。下载靶场镜像从官方或可信源下载.ova或.vmx格式的虚拟机文件如BWA。导入并启动在虚拟机软件中选择“导入”或“打开”选择下载的镜像文件然后启动虚拟机。通常虚拟机网络会配置为桥接或NAT模式。访问靶场启动后虚拟机会提供一个IP地址如192.168.1.100在浏览器中输入该IP即可访问靶场集合。我个人更倾向于在虚拟机里搭建一个“靶场集群”比如同时运行DVWA、Pikachu、SQLi-Labs等。这样一个环境就能练习多种漏洞切换起来也方便。无论用哪种方式请务必确保你的靶场运行在隔离的网络环境中如不连接外网的虚拟机或本地Docker网络切勿将带有漏洞的靶场暴露在公网。2.2 Yakit安装与初体验你的图形化安全控制台Yakit的安装过程非常简单它提供了跨平台的客户端。下载访问Yakit官网根据你的操作系统Windows/macOS/Linux下载最新的安装包。安装与启动Windows下是标准的exe安装程序macOS是dmg包Linux是AppImage或压缩包。安装后启动Yakit你会看到一个清爽的图形界面。核心概念MITM劫持与代理Yakit的核心功能之一是中间人MITM攻击代理这是后续抓包、重放请求的基础。首次启动你可能需要配置上游代理如果你需要透过公司或家庭网络代理上网对于纯本地靶场测试通常不需要额外设置。启动MITM服务器在Yakit左侧功能栏找到“MITM”模块点击“劫持启动”Yakit会启动一个本地代理服务器默认监听8080端口。你需要将浏览器或系统的代理设置为127.0.0.1:8080这样浏览器的流量就会经过Yakit从而被捕获和操作。实操心得在Windows上Yakit有时会因为端口占用启动失败。如果遇到“端口已被占用”的提示可以尝试在MITM设置里换一个端口比如8081、8088。同时确保关闭了其他可能占用端口的软件如Charles、Fiddler或旧版Yakit进程。2.3 Nuclei引擎集成与模板管理为Yakit装上“智能弹药”Yakit本身集成了Nuclei引擎但模板需要手动更新和管理这是保证检测能力最新的关键。检查与更新Nuclei在Yakit左侧找到“插件仓库”搜索“Nuclei”通常内置的引擎已经安装。为了获取最新漏洞检测能力我们需要更新模板库。在“安全工具”或相关模块找到“Nuclei”功能入口里面会有“更新模板”的按钮。点击它Yakit会自动从官方仓库拉取最新的漏洞模板Templates。这个过程可能会下载几百MB的数据请保持网络通畅。理解模板目录更新后模板会存储在Yakit的安装目录或用户目录下。了解这一点有助于高级用户进行自定义模板的编写和调试。对于新手知道模板已成功更新即可。模板筛选与分类Nuclei模板数量庞大Yakit提供了友好的筛选界面。你可以按漏洞类型如SQL注入、XSS、命令执行、严重等级高、中、低、信息、技术栈Java, PHP, WordPress等进行过滤。在实战中针对特定的靶场如DVWA主要是PHP经典漏洞可以先筛选相关分类提高扫描效率。至此你的“安全实验台”已经搭建完毕靶场在后台运行Yakit作为控制中心已就绪Nuclei的“弹药库”模板也已更新到最新。接下来我们将进入核心环节学习如何运用这些工具进行漏洞验证。3. 核心工作流解析从信息收集到漏洞验证掌握了工具我们还需要一套清晰的“打法”。用YakitNuclei进行漏洞验证并非简单的“一键扫描”而是一个包含目标确认、信息收集、漏洞检测、结果验证的闭环流程。理解这个流程能让你从被动点击按钮变为主动掌控测试节奏。3.1 目标确认与信息收集知己知彼百战不殆在把Nuclei指向目标之前我们必须先明确“目标是谁”以及“目标有什么特征”。盲目扫描就像用霰弹枪打鸟效率低且噪音大。手动浏览与站点熟悉首先像普通用户一样访问你的靶场如http://192.168.1.100/dvwa。点击各个功能模块登录、文件上传、SQL注入等了解网站的结构、使用的技术观察URL后缀、Cookie、错误信息等。例如DVWA的URL中常包含vulnerabilities/路径这就是一个重要的特征。使用Yakit进行基础爬取Yakit内置了简易的爬虫功能。在“基础爬虫”模块中输入靶场URL让它自动遍历一下站点的链接。这能帮你快速发现一些可能被忽略的入口点比如隐藏的登录页面、API接口等。收集到的URL列表可以为后续的漏洞扫描提供更精准的目标。启用MITM代理进行流量捕获这是关键一步。确保浏览器代理设置为Yakit127.0.0.1:8080然后重新浏览靶站。此时Yakit的“HTTP History”标签页会记录下你所有的请求和响应。这些真实的流量样本包含了Cookie、Session、请求参数等关键信息对于需要认证的漏洞检测至关重要。注意事项对于需要登录的靶场如DVWA务必先完成登录操作让Yakit捕获到带有有效会话Session Cookie的请求。后续很多漏洞检测模板需要复用这个会话才能访问到有漏洞的页面。你可以在HTTP历史记录中右键点击一个登录后的请求选择“加入爬虫路径”或“复制为Curl命令”以备后用。3.2 Nuclei扫描配置与执行精准发射“探测导弹”有了目标信息就可以配置Nuclei进行扫描了。Yakit的图形化界面让这个过程变得非常直观。目标输入在Nuclei模块中输入你的目标。可以是单个URLhttp://192.168.1.100/dvwa也可以是URL列表文件如果你爬取了很多路径。更高级的用法是输入从Yakit爬虫或HTTP历史中导出的URL列表。模板选择与筛选这是体现策略的地方。不要一开始就使用全部模板进行“全量扫描”那会非常慢且产生大量无关结果。针对DVWA这类已知漏洞类型的靶场我建议按漏洞类型选勾选sqli(SQL注入),xss(跨站脚本),rce(远程命令执行),lfi(本地文件包含) 等。按严重等级选初期可以只关注high和critical级别的模板快速定位高危问题。排除干扰可以排除Exclude一些针对特定CMS如WordPress, Joomla的模板因为我们的靶场很可能不是。速率与并发控制Yakit允许你设置线程数-c和每秒请求数-rl。对于本地靶场可以适当调高如线程50速率100以加快扫描速度。但如果目标是远程或性能较弱的服务器务必调低参数避免将其“打挂”这是基本的职业道德。高级配置Cookie与Header注入这是让扫描生效的秘诀。很多靶场的漏洞页面需要登录后才能访问。你需要在Nuclei的“额外配置”或“Raw命令”选项中添加从Yakit捕获的Cookie。格式通常是在命令后加上-H ‘Cookie: securitylow; PHPSESSID你的sessionid’。这样Nuclei发出的每一个探测请求都会携带这个Cookie模拟已登录状态。配置完成后点击“开始扫描”Yakit会显示实时进度、已发送的请求和已发现的潜在漏洞Issues。3.3 结果分析与手动验证从“可能”到“确认”Nuclei扫描出的结果我们称之为“潜在漏洞”或“发现”。它基于模板的规则匹配响应给出了高置信度的提示但绝不能百分百相信自动化工具的结果。作为安全测试者手动验证是必不可少的步骤。解读扫描结果Yakit的漏洞结果面板会显示漏洞名称、严重等级、主机、路径等信息。点击详情可以看到触发该漏洞的请求Request和响应Response。重点看响应中匹配到的关键词或特征这通常是模板判断的依据。使用Yakit的“Web Fuzzer”进行手动验证这是Yakit的另一个神器。以扫描出的一个“SQL注入”漏洞为例。在结果中复制疑似存在注入点的请求整个Raw请求。打开“Web Fuzzer”模块点击“从原始请求导入”刚才的请求就被加载进来了。找到可能存在注入的参数如id1选中参数值1右键选择“作为Payload位置”。在Payload设置中加载SQL注入的测试Payload集Yakit内置了一些如sqli-payloads.txt。点击“开始执行”观察不同Payload的响应。如果存在注入你会看到响应长度、时间或内容有明显差异如数据库错误信息、延迟响应等。通过对比你可以确认漏洞确实存在并了解其注入类型报错型、布尔盲注、时间盲注等。对比与记录将手动验证的结果与Nuclei的发现进行对比。如果验证成功那么这个漏洞就可以被确认。记录下完整的利用步骤、Payload和结果截图形成你的测试报告或学习笔记。这个“自动化扫描初筛 手动工具深入验证”的工作流既利用了Nuclei的高效广覆盖又发挥了人的判断力和深入分析能力是专业安全测试的常见模式。4. 实战靶场演练以DVWA为例手把手验证漏洞理论说再多不如亲手做一遍。让我们以最经典的DVWA安全级别设为Low靶场为例完整走一遍漏洞验证流程。我们将重点验证SQL注入和反射型XSS这两个最常见漏洞。4.1 靶场设置与工具准备启动DVWA靶场按照2.1节的方法通过Docker或虚拟机启动DVWA并确保可以正常访问登录页面http://靶场IP/。登录与安全级别设置使用admin/password登录。进入后点击左侧 “DVWA Security”将安全级别设置为 “Low”然后点击 “Submit”。这一步很重要Low级别几乎没有任何防护便于我们观察最原始的漏洞形态。配置Yakit代理启动Yakit开启MITM代理默认8080端口。将浏览器代理设置为127.0.0.1:8080。清空Yakit的HTTP历史记录为捕获新流量做准备。获取认证Cookie在设置好代理的浏览器中刷新DVWA页面或重新登录。此时Yakit的HTTP历史中会捕获到包含PHPSESSID和security等Cookie的请求。记住这个Cookie值。4.2 SQL注入漏洞验证实战手动探索漏洞点在DVWA左侧点击 “SQL Injection”。这是一个简单的用户ID查询界面。在输入框输入1并提交页面显示了用户ID为1的用户信息。URL变成了http://靶场IP/vulnerabilities/sqli/?id1SubmitSubmit#。很明显id是参数。使用Nuclei进行扫描在Yakit的Nuclei模块目标输入http://靶场IP/vulnerabilities/sqli/。在模板筛选中勾选sqli分类严重等级选择high和critical。在“额外配置”或“Raw命令”输入框中添加Cookie头-H ‘Cookie: PHPSESSID你的sessionid; securitylow’请替换为你的实际Cookie。点击开始扫描。几秒钟内你应该能看到结果报告发现SQL注入漏洞可能是基于报错的注入。手动验证与深入利用在Yakit的Web Fuzzer中从HTTP历史里找到访问sqli页面的那个GET请求导入。选中URL参数中的id1的1设置为Payload位置。加载SQL注入Payload。我们可以先使用经典的‘单引号进行测试。发送请求后观察响应。在Low级别的DVWA中你会直接在页面上看到详细的MySQL报错信息如“You have an error in your SQL syntax...”这直接证实了报错型SQL注入存在。进一步我们可以使用Union注入Payload来获取数据。例如Payload可以设置为1‘ union select 1, database() --。发送后如果页面在原本显示“First name”、“Surname”的地方额外显示了数字1和当前数据库名如dvwa则说明Union注入成功我们可以通过此方式查询数据库、表、字段信息。实操心得在手动Fuzz时注意观察响应状态码、响应体长度和内容。Yakit的Web Fuzzer会以表格形式清晰展示这些信息。对于时间盲注可以添加sleep()函数并观察响应时间列Yakit会记录每个请求的耗时非常直观。4.3 反射型XSS漏洞验证实战手动探索漏洞点在DVWA左侧点击 “Reflected XSS”。页面有一个输入框让你输入名字。基础测试我们先手动输入一个简单的测试Payload。输入后点击提交如果页面上弹出了警告框说明存在最基本的XSS漏洞。通过Yakit的代理我们可以看到这个请求是GET /vulnerabilities/xss_r/?name...。使用Nuclei扫描同样在Nuclei模块中目标输入XSS页面URL模板筛选xss分类并带上相同的Cookie头进行扫描。Nuclei会使用更丰富的XSS测试向量进行探测可能会发现一些我们手动没想到的绕过情况。使用Yakit的“漏洞检测”模块进行专项测试Yakit除了集成Nuclei自身也有一个“漏洞检测”模块内置了针对XSS等常见漏洞的检测插件。你可以将目标URL和Cookie配置进去运行XSS检测插件它会进行更密集的Payload测试并给出详细的测试报告指出哪个参数、哪个Payload触发了漏洞。结果对比与分析对比手动测试、Nuclei扫描和Yakit插件检测的结果。你可能会发现简单的 触发了但一些带有过滤的Payload可能被拦截。在DVWA的Low级别下几乎没有过滤所以各种Payload都能成功。这个练习的目的是熟悉工具如何自动化地发现和验证这类漏洞。通过以上两个实战案例你应该能清晰地感受到YakitNuclei的组合如何将漏洞验证的流程标准化、半自动化极大地提升了效率同时保留了手动深入验证的灵活性。5. 高级技巧与自定义模板编写当你熟练掌握了基本工作流后可能会遇到一些特殊情况Nuclei的现有模板检测不到某些漏洞或者你想针对公司内部特有的应用进行检测。这时学习编写自定义的Nuclei模板就成了进阶的必经之路。5.1 何时需要自定义模板检测逻辑独特的漏洞某些漏洞的利用方式和响应特征非常特殊社区通用模板可能没有覆盖。内部应用与组件公司自研的CMS、API接口或中间件其漏洞特征外界无从知晓。漏洞验证的深化你发现了一个漏洞希望编写一个能自动验证并提取关键信息如数据库版本、配置文件内容的模板而不仅仅是“发现”。绕过WAF/过滤器的检测通用Payload被拦截你需要编写针对特定过滤规则的绕过检测模板。5.2 Nuclei模板结构精讲一个Nuclei模板是一个YAML文件核心结构如下id: custom-dvwa-sqli-check # 模板唯一ID info: name: DVWA SQL Injection Check author: your-name severity: high description: Detects SQL injection in DVWA‘s sqli module (Low security). requests: - raw: - |- GET /vulnerabilities/sqli/?id{{randstr}}‘%20AND%20‘1‘‘1SubmitSubmit HTTP/1.1 Host: {{Hostname}} Cookie: securitylow; PHPSESSID{{randstr_10}} matchers: - type: word words: - “First name“ - “Surname“ condition: andidinfo: 模板的元信息定义名称、作者、严重等级和描述。requests: 定义发送的HTTP请求。raw模式允许你编写原始的HTTP请求报文。{{Hostname}}、{{randstr}}是变量会在运行时被替换。matchers: 定义如何判断漏洞存在。type: word表示匹配响应中的关键词。condition: and表示列出的所有关键词都必须匹配。5.3 编写一个简单的自定义模板以DVWA的盲注检测为例假设我们想检测DVWALow级别SQL注入盲注页面是否存在基于布尔的盲注。分析漏洞访问http://靶场IP/vulnerabilities/sqli_blind/?id1SubmitSubmit。输入1‘ and ‘1‘‘1页面正常显示“User ID exists in the database.”。输入1‘ and ‘1‘‘2页面显示“User ID is MISSING from the database.”。这就是布尔盲注的典型特征通过逻辑表达式的真假影响页面回显内容。编写模板id: dvwa-boolean-blind-sqli info: name: DVWA Boolean-Based Blind SQL Injection author: security-learner severity: high description: Detects boolean-based blind SQLi in DVWA‘s SQLi Blind module. requests: - method: GET path: - “{{BaseURL}}/vulnerabilities/sqli_blind/?id1‘%20AND%20‘1‘‘1SubmitSubmit“ - “{{BaseURL}}/vulnerabilities/sqli_blind/?id1‘%20AND%20‘1‘‘2SubmitSubmit“ headers: Cookie: “securitylow; PHPSESSID{{randstr_10}}“ matchers-condition: and matchers: - type: word part: body words: - “User ID exists in the database.“ name: true_condition request: 1 # 匹配第一个请求的响应 - type: word part: body words: - “User ID is MISSING from the database.“ name: false_condition request: 2 # 匹配第二个请求的响应关键点解析我们定义了两个请求path列表一个对应真条件‘1‘‘1一个对应假条件‘1‘‘2。matchers-condition: and表示下面的所有匹配器条件必须同时满足。我们为两个请求的响应分别定义了匹配器name: true_condition和name: false_condition并通过request: 1和request: 2指定它们分别对应哪个请求。只有当第一个请求的响应包含“exists”且第二个请求的响应包含“MISSING”时模板才判定漏洞存在。这准确地描述了布尔盲注的特征页面内容随SQL逻辑真假而变化。在Yakit中测试模板将上述YAML代码保存为dvwa-boolean-blind-sqli.yaml。在Yakit的Nuclei模块点击“模板管理”或“加载模板”选择你保存的YAML文件。在扫描时除了选择社区模板你的自定义模板也会出现在列表中。勾选它对目标进行扫描。如果DVWA盲注页面存在漏洞它就会被成功检测出来。高级技巧编写模板时善用{{randstr}}、{{randint}}等动态变量可以避免缓存和简单的WAF规则。对于需要顺序执行的多个步骤如先登录再检测可以使用requests的链式调用chain功能。编写完成后务必在测试环境中充分验证避免误报和漏报。通过学习和实践自定义模板编写你不仅能检测更多漏洞更能深入理解漏洞的原理和检测逻辑这是从工具使用者迈向安全研究者的重要一步。6. 常见问题排查与性能优化在实际使用过程中你可能会遇到扫描没结果、工具报错或效率低下等问题。这里汇总了一些常见情况及解决方案。6.1 扫描无结果或漏报问题排查问题现象可能原因解决方案扫描完成后一个漏洞都没发现1. 目标URL错误或不可达。2. 未添加认证Cookie/Header扫描的都是未授权页面。3. 模板筛选过于严格或未更新到最新模板。4. 网络代理问题请求未真正发送到靶场。1. 用浏览器手动访问目标URL确认可达。2. 检查Yakit捕获的流量确认登录后的Cookie并在Nuclei配置中正确添加-H ‘Cookie: ...‘。3. 更新Nuclei模板并尝试放宽筛选条件如先扫描all分类。4. 检查Yakit的MITM代理和浏览器代理设置关闭系统或浏览器的其他代理。发现了漏洞但手动验证失败1.误报模板匹配规则可能过于宽松匹配到了正常页面的内容。2.状态不稳定靶场应用本身不稳定或漏洞触发需要特定条件如并发。3.Payload被轻微过滤手动测试的Payload与模板使用的略有不同。1.仔细分析匹配器在Nuclei结果中查看触发漏洞的请求和响应确认匹配的关键词是否具有唯一性。2.多次尝试重新手动触发几次。使用Yakit的“重放请求”功能多次发送触发漏洞的原始请求看是否稳定复现。3.调整Payload参考模板中的Payload在Web Fuzzer中微调后进行测试。扫描速度极慢1. 线程和速率设置过低。2. 选择了全部模板数千个目标过多。3. 网络延迟高或目标服务器响应慢。1. 对于本地靶场可提高线程数如100和请求速率如150。2.务必进行针对性扫描根据目标特征筛选模板。先扫常见漏洞high/critical再按需扩展。3. 检查靶场所在环境的性能。如果是虚拟机确保分配了足够的CPU和内存。6.2 Yakit与Nuclei性能优化建议模板管理策略不要总是加载全部模板。可以按需创建不同的“模板集合”。例如为Web应用扫描创建一个集合包含sqli,xss,rce,lfi,ssrf等为目录扫描创建另一个集合。在Yakit中可以通过模板的标签Tags进行筛选和保存。合理配置扫描参数-c(并发)本地环境可设为50-150远程测试建议设为20-50避免对目标造成过大压力。-rl(每秒请求数)限制每秒请求总数保护目标服务器。本地测试可以不加限制或设一个较高值。-timeout(超时)默认是5秒。如果网络不稳定或目标慢可以适当增加到10-15秒减少因超时导致的漏报。-retries(重试)默认为1。对于不稳定的目标可以增加到2或3。使用管道配合其他工具Yakit的强大之处在于集成。你可以先用其他工具如subfinder,assetfinder发现子域名将结果导出为文本文件然后作为目标列表导入Yakit的Nuclei进行扫描。或者用Yakit的爬虫爬取站点链接导出URL列表再用Nuclei进行深度漏洞扫描。这种“信息收集 - 漏洞扫描”的流水线作业能极大提升效率。关注资源占用长时间、高并发的扫描会占用较多CPU和内存。通过系统任务管理器监控资源使用情况。如果Yakit本身变得卡顿可以适当降低并发数或者分批次扫描目标。6.3 其他实用技巧批量扫描与报告导出Yakit支持将扫描结果导出为HTML、JSON或CSV格式。对于多个靶场或项目的测试养成导出报告的习惯便于归档和复现。利用“反连平台”Reverse Platform对于需要外部交互才能触发的漏洞如SSRF、RCEYakit内置了反连平台在“插件”中搜索。它提供一个公网或内网可访问的地址当漏洞被触发并访问这个地址时Yakit会收到通知从而证明漏洞存在。这在检测盲注类漏洞时非常有用。社区与学习Nuclei模板社区非常活跃。多关注官方GitHub仓库的更新学习别人编写优秀模板的思路。遇到问题时在Yakit的官方社区或相关技术论坛搜索通常能找到解决方案。掌握了这些排查方法和优化技巧你就能更从容地应对实战中遇到的各种情况让YakitNuclei这套组合拳发挥出最大的威力。安全之路工具是帮手思路才是灵魂。不断练习不断思考你会在漏洞挖掘和验证的道路上越走越远。
Yakit+Nuclei:新手友好的图形化漏洞验证实战指南
1. 项目概述为什么选择YakitNuclei这套组合拳如果你刚接触网络安全或者想从理论走向实践最头疼的恐怕就是“怎么验证一个漏洞”。看了一堆概念但面对一个真实的网站或系统往往无从下手。手动测试效率低用BurpSuite等专业工具又觉得门槛太高、配置复杂。这正是“新手友好用Yakit和Nuclei Templates快速上手漏洞验证”这个项目要解决的问题。它瞄准的就是从“知道漏洞”到“亲手验证漏洞”这个关键的实践鸿沟。简单来说这个项目提供了一套开箱即用、图形化操作的“漏洞验证工作流”。Yakit是一个面向安全从业者的图形化安全工具平台你可以把它理解为一个“安全工具箱的集成桌面”把很多命令行工具比如Nuclei包装成了点点鼠标就能用的功能。而Nuclei则是一个基于YAML模板的快速漏洞扫描器社区维护了成千上万个针对各种漏洞的“验证剧本”也就是Templates。这套组合的核心优势在于Yakit降低了Nuclei的使用门槛而Nuclei Templates提供了海量、即用的漏洞检测逻辑。你不需要从零写代码只需要找到对应的模板配置好目标就能一键验证漏洞是否存在。这特别适合以下几类朋友一是网络安全初学者想通过实操加深理解二是开发或运维人员想快速检查自己负责系统的常见安全问题三是参与CTF比赛或打靶练习的爱好者需要高效的工具进行漏洞利用。项目里提到的“附实战靶场”更是画龙点睛之笔。光有工具不会用等于零在一个可控、合法的环境靶场里练习是学习安全技能最安全、最有效的方式。接下来我们就从环境搭建开始一步步拆解如何用这套组合拳在靶场上“拳拳到肉”地验证漏洞。2. 环境准备与工具部署打造你的专属安全实验台工欲善其事必先利其器。在开始漏洞验证之前我们需要一个稳定、隔离的实验环境。这包括部署用于练习的漏洞靶场以及安装和配置Yakit与Nuclei。2.1 靶场环境搭建构建安全的“练功房”直接在互联网上扫描或测试未经授权的系统是非法且不道德的。因此我们必须在本地或可控的虚拟机内搭建靶场。这里推荐两种最主流、对新手最友好的方式Docker容器和虚拟机镜像。Docker部署推荐给有一定Linux基础的用户Docker方式轻量、快速易于管理和重置。以著名的DVWADamn Vulnerable Web Application靶场为例。安装Docker前往Docker官网下载并安装对应你操作系统的Docker DesktopWindows/macOS或使用包管理器安装Docker EngineLinux。拉取靶场镜像打开终端或命令行执行命令docker pull vulnerables/web-dvwa。运行容器执行docker run --rm -it -p 80:80 vulnerables/web-dvwa。这条命令会将容器内的80端口映射到你本机的80端口。访问靶场在浏览器中打开http://localhost或http://你的本机IP即可看到DVWA的登录页面。默认账号/密码为admin/password。注意使用Docker时务必确保你的宿主机本地电脑有足够资源建议至少4GB空闲内存。首次拉取镜像可能需要一些时间取决于网络速度。虚拟机部署推荐给所有新手尤其是Windows用户如果你不熟悉命令行使用现成的虚拟机镜像是最简单的。例如OWASP Broken Web Applications (BWA) 项目提供了一个集成了数十个漏洞应用的虚拟机镜像。下载虚拟机软件安装VirtualBox免费或VMware Workstation Player个人免费。下载靶场镜像从官方或可信源下载.ova或.vmx格式的虚拟机文件如BWA。导入并启动在虚拟机软件中选择“导入”或“打开”选择下载的镜像文件然后启动虚拟机。通常虚拟机网络会配置为桥接或NAT模式。访问靶场启动后虚拟机会提供一个IP地址如192.168.1.100在浏览器中输入该IP即可访问靶场集合。我个人更倾向于在虚拟机里搭建一个“靶场集群”比如同时运行DVWA、Pikachu、SQLi-Labs等。这样一个环境就能练习多种漏洞切换起来也方便。无论用哪种方式请务必确保你的靶场运行在隔离的网络环境中如不连接外网的虚拟机或本地Docker网络切勿将带有漏洞的靶场暴露在公网。2.2 Yakit安装与初体验你的图形化安全控制台Yakit的安装过程非常简单它提供了跨平台的客户端。下载访问Yakit官网根据你的操作系统Windows/macOS/Linux下载最新的安装包。安装与启动Windows下是标准的exe安装程序macOS是dmg包Linux是AppImage或压缩包。安装后启动Yakit你会看到一个清爽的图形界面。核心概念MITM劫持与代理Yakit的核心功能之一是中间人MITM攻击代理这是后续抓包、重放请求的基础。首次启动你可能需要配置上游代理如果你需要透过公司或家庭网络代理上网对于纯本地靶场测试通常不需要额外设置。启动MITM服务器在Yakit左侧功能栏找到“MITM”模块点击“劫持启动”Yakit会启动一个本地代理服务器默认监听8080端口。你需要将浏览器或系统的代理设置为127.0.0.1:8080这样浏览器的流量就会经过Yakit从而被捕获和操作。实操心得在Windows上Yakit有时会因为端口占用启动失败。如果遇到“端口已被占用”的提示可以尝试在MITM设置里换一个端口比如8081、8088。同时确保关闭了其他可能占用端口的软件如Charles、Fiddler或旧版Yakit进程。2.3 Nuclei引擎集成与模板管理为Yakit装上“智能弹药”Yakit本身集成了Nuclei引擎但模板需要手动更新和管理这是保证检测能力最新的关键。检查与更新Nuclei在Yakit左侧找到“插件仓库”搜索“Nuclei”通常内置的引擎已经安装。为了获取最新漏洞检测能力我们需要更新模板库。在“安全工具”或相关模块找到“Nuclei”功能入口里面会有“更新模板”的按钮。点击它Yakit会自动从官方仓库拉取最新的漏洞模板Templates。这个过程可能会下载几百MB的数据请保持网络通畅。理解模板目录更新后模板会存储在Yakit的安装目录或用户目录下。了解这一点有助于高级用户进行自定义模板的编写和调试。对于新手知道模板已成功更新即可。模板筛选与分类Nuclei模板数量庞大Yakit提供了友好的筛选界面。你可以按漏洞类型如SQL注入、XSS、命令执行、严重等级高、中、低、信息、技术栈Java, PHP, WordPress等进行过滤。在实战中针对特定的靶场如DVWA主要是PHP经典漏洞可以先筛选相关分类提高扫描效率。至此你的“安全实验台”已经搭建完毕靶场在后台运行Yakit作为控制中心已就绪Nuclei的“弹药库”模板也已更新到最新。接下来我们将进入核心环节学习如何运用这些工具进行漏洞验证。3. 核心工作流解析从信息收集到漏洞验证掌握了工具我们还需要一套清晰的“打法”。用YakitNuclei进行漏洞验证并非简单的“一键扫描”而是一个包含目标确认、信息收集、漏洞检测、结果验证的闭环流程。理解这个流程能让你从被动点击按钮变为主动掌控测试节奏。3.1 目标确认与信息收集知己知彼百战不殆在把Nuclei指向目标之前我们必须先明确“目标是谁”以及“目标有什么特征”。盲目扫描就像用霰弹枪打鸟效率低且噪音大。手动浏览与站点熟悉首先像普通用户一样访问你的靶场如http://192.168.1.100/dvwa。点击各个功能模块登录、文件上传、SQL注入等了解网站的结构、使用的技术观察URL后缀、Cookie、错误信息等。例如DVWA的URL中常包含vulnerabilities/路径这就是一个重要的特征。使用Yakit进行基础爬取Yakit内置了简易的爬虫功能。在“基础爬虫”模块中输入靶场URL让它自动遍历一下站点的链接。这能帮你快速发现一些可能被忽略的入口点比如隐藏的登录页面、API接口等。收集到的URL列表可以为后续的漏洞扫描提供更精准的目标。启用MITM代理进行流量捕获这是关键一步。确保浏览器代理设置为Yakit127.0.0.1:8080然后重新浏览靶站。此时Yakit的“HTTP History”标签页会记录下你所有的请求和响应。这些真实的流量样本包含了Cookie、Session、请求参数等关键信息对于需要认证的漏洞检测至关重要。注意事项对于需要登录的靶场如DVWA务必先完成登录操作让Yakit捕获到带有有效会话Session Cookie的请求。后续很多漏洞检测模板需要复用这个会话才能访问到有漏洞的页面。你可以在HTTP历史记录中右键点击一个登录后的请求选择“加入爬虫路径”或“复制为Curl命令”以备后用。3.2 Nuclei扫描配置与执行精准发射“探测导弹”有了目标信息就可以配置Nuclei进行扫描了。Yakit的图形化界面让这个过程变得非常直观。目标输入在Nuclei模块中输入你的目标。可以是单个URLhttp://192.168.1.100/dvwa也可以是URL列表文件如果你爬取了很多路径。更高级的用法是输入从Yakit爬虫或HTTP历史中导出的URL列表。模板选择与筛选这是体现策略的地方。不要一开始就使用全部模板进行“全量扫描”那会非常慢且产生大量无关结果。针对DVWA这类已知漏洞类型的靶场我建议按漏洞类型选勾选sqli(SQL注入),xss(跨站脚本),rce(远程命令执行),lfi(本地文件包含) 等。按严重等级选初期可以只关注high和critical级别的模板快速定位高危问题。排除干扰可以排除Exclude一些针对特定CMS如WordPress, Joomla的模板因为我们的靶场很可能不是。速率与并发控制Yakit允许你设置线程数-c和每秒请求数-rl。对于本地靶场可以适当调高如线程50速率100以加快扫描速度。但如果目标是远程或性能较弱的服务器务必调低参数避免将其“打挂”这是基本的职业道德。高级配置Cookie与Header注入这是让扫描生效的秘诀。很多靶场的漏洞页面需要登录后才能访问。你需要在Nuclei的“额外配置”或“Raw命令”选项中添加从Yakit捕获的Cookie。格式通常是在命令后加上-H ‘Cookie: securitylow; PHPSESSID你的sessionid’。这样Nuclei发出的每一个探测请求都会携带这个Cookie模拟已登录状态。配置完成后点击“开始扫描”Yakit会显示实时进度、已发送的请求和已发现的潜在漏洞Issues。3.3 结果分析与手动验证从“可能”到“确认”Nuclei扫描出的结果我们称之为“潜在漏洞”或“发现”。它基于模板的规则匹配响应给出了高置信度的提示但绝不能百分百相信自动化工具的结果。作为安全测试者手动验证是必不可少的步骤。解读扫描结果Yakit的漏洞结果面板会显示漏洞名称、严重等级、主机、路径等信息。点击详情可以看到触发该漏洞的请求Request和响应Response。重点看响应中匹配到的关键词或特征这通常是模板判断的依据。使用Yakit的“Web Fuzzer”进行手动验证这是Yakit的另一个神器。以扫描出的一个“SQL注入”漏洞为例。在结果中复制疑似存在注入点的请求整个Raw请求。打开“Web Fuzzer”模块点击“从原始请求导入”刚才的请求就被加载进来了。找到可能存在注入的参数如id1选中参数值1右键选择“作为Payload位置”。在Payload设置中加载SQL注入的测试Payload集Yakit内置了一些如sqli-payloads.txt。点击“开始执行”观察不同Payload的响应。如果存在注入你会看到响应长度、时间或内容有明显差异如数据库错误信息、延迟响应等。通过对比你可以确认漏洞确实存在并了解其注入类型报错型、布尔盲注、时间盲注等。对比与记录将手动验证的结果与Nuclei的发现进行对比。如果验证成功那么这个漏洞就可以被确认。记录下完整的利用步骤、Payload和结果截图形成你的测试报告或学习笔记。这个“自动化扫描初筛 手动工具深入验证”的工作流既利用了Nuclei的高效广覆盖又发挥了人的判断力和深入分析能力是专业安全测试的常见模式。4. 实战靶场演练以DVWA为例手把手验证漏洞理论说再多不如亲手做一遍。让我们以最经典的DVWA安全级别设为Low靶场为例完整走一遍漏洞验证流程。我们将重点验证SQL注入和反射型XSS这两个最常见漏洞。4.1 靶场设置与工具准备启动DVWA靶场按照2.1节的方法通过Docker或虚拟机启动DVWA并确保可以正常访问登录页面http://靶场IP/。登录与安全级别设置使用admin/password登录。进入后点击左侧 “DVWA Security”将安全级别设置为 “Low”然后点击 “Submit”。这一步很重要Low级别几乎没有任何防护便于我们观察最原始的漏洞形态。配置Yakit代理启动Yakit开启MITM代理默认8080端口。将浏览器代理设置为127.0.0.1:8080。清空Yakit的HTTP历史记录为捕获新流量做准备。获取认证Cookie在设置好代理的浏览器中刷新DVWA页面或重新登录。此时Yakit的HTTP历史中会捕获到包含PHPSESSID和security等Cookie的请求。记住这个Cookie值。4.2 SQL注入漏洞验证实战手动探索漏洞点在DVWA左侧点击 “SQL Injection”。这是一个简单的用户ID查询界面。在输入框输入1并提交页面显示了用户ID为1的用户信息。URL变成了http://靶场IP/vulnerabilities/sqli/?id1SubmitSubmit#。很明显id是参数。使用Nuclei进行扫描在Yakit的Nuclei模块目标输入http://靶场IP/vulnerabilities/sqli/。在模板筛选中勾选sqli分类严重等级选择high和critical。在“额外配置”或“Raw命令”输入框中添加Cookie头-H ‘Cookie: PHPSESSID你的sessionid; securitylow’请替换为你的实际Cookie。点击开始扫描。几秒钟内你应该能看到结果报告发现SQL注入漏洞可能是基于报错的注入。手动验证与深入利用在Yakit的Web Fuzzer中从HTTP历史里找到访问sqli页面的那个GET请求导入。选中URL参数中的id1的1设置为Payload位置。加载SQL注入Payload。我们可以先使用经典的‘单引号进行测试。发送请求后观察响应。在Low级别的DVWA中你会直接在页面上看到详细的MySQL报错信息如“You have an error in your SQL syntax...”这直接证实了报错型SQL注入存在。进一步我们可以使用Union注入Payload来获取数据。例如Payload可以设置为1‘ union select 1, database() --。发送后如果页面在原本显示“First name”、“Surname”的地方额外显示了数字1和当前数据库名如dvwa则说明Union注入成功我们可以通过此方式查询数据库、表、字段信息。实操心得在手动Fuzz时注意观察响应状态码、响应体长度和内容。Yakit的Web Fuzzer会以表格形式清晰展示这些信息。对于时间盲注可以添加sleep()函数并观察响应时间列Yakit会记录每个请求的耗时非常直观。4.3 反射型XSS漏洞验证实战手动探索漏洞点在DVWA左侧点击 “Reflected XSS”。页面有一个输入框让你输入名字。基础测试我们先手动输入一个简单的测试Payload。输入后点击提交如果页面上弹出了警告框说明存在最基本的XSS漏洞。通过Yakit的代理我们可以看到这个请求是GET /vulnerabilities/xss_r/?name...。使用Nuclei扫描同样在Nuclei模块中目标输入XSS页面URL模板筛选xss分类并带上相同的Cookie头进行扫描。Nuclei会使用更丰富的XSS测试向量进行探测可能会发现一些我们手动没想到的绕过情况。使用Yakit的“漏洞检测”模块进行专项测试Yakit除了集成Nuclei自身也有一个“漏洞检测”模块内置了针对XSS等常见漏洞的检测插件。你可以将目标URL和Cookie配置进去运行XSS检测插件它会进行更密集的Payload测试并给出详细的测试报告指出哪个参数、哪个Payload触发了漏洞。结果对比与分析对比手动测试、Nuclei扫描和Yakit插件检测的结果。你可能会发现简单的 触发了但一些带有过滤的Payload可能被拦截。在DVWA的Low级别下几乎没有过滤所以各种Payload都能成功。这个练习的目的是熟悉工具如何自动化地发现和验证这类漏洞。通过以上两个实战案例你应该能清晰地感受到YakitNuclei的组合如何将漏洞验证的流程标准化、半自动化极大地提升了效率同时保留了手动深入验证的灵活性。5. 高级技巧与自定义模板编写当你熟练掌握了基本工作流后可能会遇到一些特殊情况Nuclei的现有模板检测不到某些漏洞或者你想针对公司内部特有的应用进行检测。这时学习编写自定义的Nuclei模板就成了进阶的必经之路。5.1 何时需要自定义模板检测逻辑独特的漏洞某些漏洞的利用方式和响应特征非常特殊社区通用模板可能没有覆盖。内部应用与组件公司自研的CMS、API接口或中间件其漏洞特征外界无从知晓。漏洞验证的深化你发现了一个漏洞希望编写一个能自动验证并提取关键信息如数据库版本、配置文件内容的模板而不仅仅是“发现”。绕过WAF/过滤器的检测通用Payload被拦截你需要编写针对特定过滤规则的绕过检测模板。5.2 Nuclei模板结构精讲一个Nuclei模板是一个YAML文件核心结构如下id: custom-dvwa-sqli-check # 模板唯一ID info: name: DVWA SQL Injection Check author: your-name severity: high description: Detects SQL injection in DVWA‘s sqli module (Low security). requests: - raw: - |- GET /vulnerabilities/sqli/?id{{randstr}}‘%20AND%20‘1‘‘1SubmitSubmit HTTP/1.1 Host: {{Hostname}} Cookie: securitylow; PHPSESSID{{randstr_10}} matchers: - type: word words: - “First name“ - “Surname“ condition: andidinfo: 模板的元信息定义名称、作者、严重等级和描述。requests: 定义发送的HTTP请求。raw模式允许你编写原始的HTTP请求报文。{{Hostname}}、{{randstr}}是变量会在运行时被替换。matchers: 定义如何判断漏洞存在。type: word表示匹配响应中的关键词。condition: and表示列出的所有关键词都必须匹配。5.3 编写一个简单的自定义模板以DVWA的盲注检测为例假设我们想检测DVWALow级别SQL注入盲注页面是否存在基于布尔的盲注。分析漏洞访问http://靶场IP/vulnerabilities/sqli_blind/?id1SubmitSubmit。输入1‘ and ‘1‘‘1页面正常显示“User ID exists in the database.”。输入1‘ and ‘1‘‘2页面显示“User ID is MISSING from the database.”。这就是布尔盲注的典型特征通过逻辑表达式的真假影响页面回显内容。编写模板id: dvwa-boolean-blind-sqli info: name: DVWA Boolean-Based Blind SQL Injection author: security-learner severity: high description: Detects boolean-based blind SQLi in DVWA‘s SQLi Blind module. requests: - method: GET path: - “{{BaseURL}}/vulnerabilities/sqli_blind/?id1‘%20AND%20‘1‘‘1SubmitSubmit“ - “{{BaseURL}}/vulnerabilities/sqli_blind/?id1‘%20AND%20‘1‘‘2SubmitSubmit“ headers: Cookie: “securitylow; PHPSESSID{{randstr_10}}“ matchers-condition: and matchers: - type: word part: body words: - “User ID exists in the database.“ name: true_condition request: 1 # 匹配第一个请求的响应 - type: word part: body words: - “User ID is MISSING from the database.“ name: false_condition request: 2 # 匹配第二个请求的响应关键点解析我们定义了两个请求path列表一个对应真条件‘1‘‘1一个对应假条件‘1‘‘2。matchers-condition: and表示下面的所有匹配器条件必须同时满足。我们为两个请求的响应分别定义了匹配器name: true_condition和name: false_condition并通过request: 1和request: 2指定它们分别对应哪个请求。只有当第一个请求的响应包含“exists”且第二个请求的响应包含“MISSING”时模板才判定漏洞存在。这准确地描述了布尔盲注的特征页面内容随SQL逻辑真假而变化。在Yakit中测试模板将上述YAML代码保存为dvwa-boolean-blind-sqli.yaml。在Yakit的Nuclei模块点击“模板管理”或“加载模板”选择你保存的YAML文件。在扫描时除了选择社区模板你的自定义模板也会出现在列表中。勾选它对目标进行扫描。如果DVWA盲注页面存在漏洞它就会被成功检测出来。高级技巧编写模板时善用{{randstr}}、{{randint}}等动态变量可以避免缓存和简单的WAF规则。对于需要顺序执行的多个步骤如先登录再检测可以使用requests的链式调用chain功能。编写完成后务必在测试环境中充分验证避免误报和漏报。通过学习和实践自定义模板编写你不仅能检测更多漏洞更能深入理解漏洞的原理和检测逻辑这是从工具使用者迈向安全研究者的重要一步。6. 常见问题排查与性能优化在实际使用过程中你可能会遇到扫描没结果、工具报错或效率低下等问题。这里汇总了一些常见情况及解决方案。6.1 扫描无结果或漏报问题排查问题现象可能原因解决方案扫描完成后一个漏洞都没发现1. 目标URL错误或不可达。2. 未添加认证Cookie/Header扫描的都是未授权页面。3. 模板筛选过于严格或未更新到最新模板。4. 网络代理问题请求未真正发送到靶场。1. 用浏览器手动访问目标URL确认可达。2. 检查Yakit捕获的流量确认登录后的Cookie并在Nuclei配置中正确添加-H ‘Cookie: ...‘。3. 更新Nuclei模板并尝试放宽筛选条件如先扫描all分类。4. 检查Yakit的MITM代理和浏览器代理设置关闭系统或浏览器的其他代理。发现了漏洞但手动验证失败1.误报模板匹配规则可能过于宽松匹配到了正常页面的内容。2.状态不稳定靶场应用本身不稳定或漏洞触发需要特定条件如并发。3.Payload被轻微过滤手动测试的Payload与模板使用的略有不同。1.仔细分析匹配器在Nuclei结果中查看触发漏洞的请求和响应确认匹配的关键词是否具有唯一性。2.多次尝试重新手动触发几次。使用Yakit的“重放请求”功能多次发送触发漏洞的原始请求看是否稳定复现。3.调整Payload参考模板中的Payload在Web Fuzzer中微调后进行测试。扫描速度极慢1. 线程和速率设置过低。2. 选择了全部模板数千个目标过多。3. 网络延迟高或目标服务器响应慢。1. 对于本地靶场可提高线程数如100和请求速率如150。2.务必进行针对性扫描根据目标特征筛选模板。先扫常见漏洞high/critical再按需扩展。3. 检查靶场所在环境的性能。如果是虚拟机确保分配了足够的CPU和内存。6.2 Yakit与Nuclei性能优化建议模板管理策略不要总是加载全部模板。可以按需创建不同的“模板集合”。例如为Web应用扫描创建一个集合包含sqli,xss,rce,lfi,ssrf等为目录扫描创建另一个集合。在Yakit中可以通过模板的标签Tags进行筛选和保存。合理配置扫描参数-c(并发)本地环境可设为50-150远程测试建议设为20-50避免对目标造成过大压力。-rl(每秒请求数)限制每秒请求总数保护目标服务器。本地测试可以不加限制或设一个较高值。-timeout(超时)默认是5秒。如果网络不稳定或目标慢可以适当增加到10-15秒减少因超时导致的漏报。-retries(重试)默认为1。对于不稳定的目标可以增加到2或3。使用管道配合其他工具Yakit的强大之处在于集成。你可以先用其他工具如subfinder,assetfinder发现子域名将结果导出为文本文件然后作为目标列表导入Yakit的Nuclei进行扫描。或者用Yakit的爬虫爬取站点链接导出URL列表再用Nuclei进行深度漏洞扫描。这种“信息收集 - 漏洞扫描”的流水线作业能极大提升效率。关注资源占用长时间、高并发的扫描会占用较多CPU和内存。通过系统任务管理器监控资源使用情况。如果Yakit本身变得卡顿可以适当降低并发数或者分批次扫描目标。6.3 其他实用技巧批量扫描与报告导出Yakit支持将扫描结果导出为HTML、JSON或CSV格式。对于多个靶场或项目的测试养成导出报告的习惯便于归档和复现。利用“反连平台”Reverse Platform对于需要外部交互才能触发的漏洞如SSRF、RCEYakit内置了反连平台在“插件”中搜索。它提供一个公网或内网可访问的地址当漏洞被触发并访问这个地址时Yakit会收到通知从而证明漏洞存在。这在检测盲注类漏洞时非常有用。社区与学习Nuclei模板社区非常活跃。多关注官方GitHub仓库的更新学习别人编写优秀模板的思路。遇到问题时在Yakit的官方社区或相关技术论坛搜索通常能找到解决方案。掌握了这些排查方法和优化技巧你就能更从容地应对实战中遇到的各种情况让YakitNuclei这套组合拳发挥出最大的威力。安全之路工具是帮手思路才是灵魂。不断练习不断思考你会在漏洞挖掘和验证的道路上越走越远。