3.2 Yakit MITM基础使用
Yakit MITM 是一个高交互的MITM(中间人攻击)测试框架,主要用于Web安全测试和流量分析。其作为中间人攻击测试框架,其核心是提供实时的HTTP/HTTPS流量监控能力。工具能够捕获并展示所有通过代理的网络请求,包括完整的请求头、响应内容、目标IP地址和响应长度等关键信息。对于初学者而言,这种可视化的流量展示功能是理解Web应用通信机制的重要入门工具,同时支持关键字过滤和标签分类,帮助用户快速定位感兴趣的请求流量。
我们在本小节中,将会详细介绍MITM的实际使用,引导用户掌握基本的MITM操作流程,并且逐步深入,最终可以实现一些复杂应用的劫持和测试逻辑。
3.2.1 准备工作
基本配置与操作台
在正式开始MITM交互式劫持操作之前,我们需要了解基本的进入劫持操作和使用的方法。
图:Yakit 渗透测试 MITM 交互式劫持界面
方法一:通过主界面顶部导航
-
左侧工具栏选择:在Yakit主界面左侧工具栏中,直接点击 MITM 图标
-
顶部标签页:点击顶部的 "MITM 交互式劫持" 标签页
-
快速启动:界面中央的 "启动劫持" 按钮可以一键开始MITM代理服务
方法二:通过菜单栏访问
-
在顶部菜单栏选择 "安全工具"
-
在下拉菜单中找到 "MITM 交互式劫持" 选项
-
点击进入MITM工作台
这两种启动方式略有区别,如果用户通过主界面导航进入MITM功能,会进入MITM启动前的参数配置页面,点击下方“劫持启动”即可直接进入操作台:
图:Yakit MITM 交互式劫持配置界面
在配置页面中,用户基本可以看到如下配置信息,用户可以按需求改以实现一些特殊需求
一般情况下,Yakit MITM 的默认配置选项无需修改即可直接启动使用。当用户在实际使用中遇到特殊情况,比如国密TLS无法正常劫持时,可以通过修改配置选项中的TLS配置来实现更复杂的功能和兼容性需求。
除了基础的普通配置选项外,Yakit MITM 在高级配置中提供了更加强大和灵活的自定义配置能力。高级配置涵盖了专业级的网络劫持控制功能,从网络层面的DNS服务器设置和Hosts域名映射,到国密TLS安全传输的优先级控制和仅国密模式,再到连接管理的长连接禁用和WebSocket劫持控制,以及安全认证机制中的代理认证和mTLS双向认证的客户端证书导入,最后还包括流量控制的过滤器规则配置和初始页面控制等功能。这些高级配置主要面向安全测试专家和有特殊技术需求的用户,为他们提供了对整个网络流量劫持过程的精细化控制能力。
操作台介绍
在Yakit的基本使用的时候我们已经对Yakit的基本界面构造有了一定了解,在用户使用MITM的核心功能的时候
图:Yakit MITM 劫持工具操作界面与请求响应详情
-
**左侧插件区域:**各种安全测试插件和工具,包括SQL注入、XSS检测、API扫描等安全测试模块,用户也可以使用热加载等高级功能(后面小节详细介绍)
-
**右侧顶部操作区域:**劫持模式可支持手动劫持,自动放行,也可快捷筛选流量,快速设置下游代理,配置证书以及启动免配置浏览器。
-
**右侧主体视图:**通过Yakit MITM系统的所有流量会以列表的形式列出来,用户可以点击列表的行来查看流量的内容(包含请求和响应数据包)。
授权信任Yakit MITM根证书
一般来说,如果用户偏好使用Yakit的"免配置浏览器"模式的话,则不需要进行Yakit证书配置。在免配置浏览器中,Yakit通过启动一个预配置的浏览器实例(通常基于Chromium内核),并在启动参数中添加了
--ignore-certificate-errors、--ignore-ssl-errors、--disable-web-security等标志位来关闭证书信任检查选项。这种方式绕过了浏览器的SSL/TLS证书验证机制,使得浏览器不会对Yakit动态生成的自签名证书进行严格验证,从而可以直接让Yakit劫持到浏览器流量而无需用户手动信任根证书。免配置浏览器本质上是一个"降低安全策略"的浏览器环境,专门用于安全测试场景,它牺牲了正常的证书安全检查来换取测试的便利性,让渗透测试人员可以快速开始HTTPS流量分析工作。
如果用户要劫持HTTPS,根据我们在3.1.2章节中的解释,需要用户手动信任Yakit的根证书。在HTTPS劫持过程中,Yakit需要为目标域名动态生成SSL证书来替换原始证书,但这些证书是由Yakit的自签名CA签发的,而非受信任的公共CA,因此浏览器会因为证书链验证失败而显示安全警告或阻止连接。通过将Yakit根证书添加到系统信任列表,可以让浏览器认可Yakit CA的签发权威,使动态生成的证书通过验证,从而实现透明的HTTPS流量劫持而不触发安全警告,本质上是让系统"相信"Yakit有权为任意域名签发证书。
macOS 下信任Yakit MITM根证书
在Yakit MITM中,信任根证书的方式有很多,我们为用户准备了两种主流的方式,用户可以按自己的操作习惯随意选择一种来执行:
- 使用“首页”的证书安装引导-自动安装
当系统检测到证书未配置时,会在MITM界面显示红色的警告提示"检测到证书未配置",此时用户需要点击"下载安装"按钮来启动证书安装流程。Yakit会智能识别当前操作系统环境,并生成相应的自动安装脚本。
图:Yakit MITM证书自动安装脚本执行界面
通过上述截图可以看到完整的证书安装过程:首先Yakit检测到证书未配置并提示用户进行安装,点击"下载安装"后会弹出详细的操作指引对话框,指导用户执行自动安装脚本。在macOS系统中,脚本会自动检测系统环境并要求输入管理员密码来完成证书的安装和信任设置。
安装成功后,终端会显示"Certificate successfully installed and trusted."的确认信息,表示证书已经成功安装到系统的信任存储中。此时用户就可以正常使用MITM功能来拦截和分析HTTPS流量了。
- 在Yakit MITM的操作台中安装-手动安装
图:macOS 信任 Yakit MITM 根证书操作指引
在MITM劫持界面中,点击"证书下载"按钮,系统会显示完整的证书内容。用户可以选择两种方式获取证书:
-
直接访问下载:在设置代理后访问
http://mitm可自动下载证书 -
本地下载:点击"下载到本地并打开"按钮,将证书文件保存到本地
下载证书后,在macOS系统中需要进行额外的信任配置:
第一步:证书导入
-
双击下载的证书文件,系统会自动打开"钥匙串访问"应用
-
证书会被添加到系统钥匙串中,但初始状态显示为"不信任"
第二步:修改信任设置
-
在钥匙串中找到"Yakit MITM Root CA"证书
-
双击证书打开详细信息窗口
-
展开"使用此证书时"选项
-
将所有相关选项(SSL、邮件、代码签名等)设置为"始终信任"
-
输入系统管理员密码确认修改
第三步:验证配置
-
配置完成后,证书状态会从"此证书已标记为不受所有用户信任"变更为"此证书已标记为受所有用户信任"
-
证书图标会显示为带有蓝色加号的可信状态
Windows系统信任Yakit MITM根证书
Windows 系统下安装 Yakit MITM 证书同样推荐上述的两种方式,只是具体流程中会有些许差异,下面跟随我们完成Windows 系统下的 MITM 证书安装。
- 使用“首页”的证书安装引导-自动安装
我们直接通过图例来展示自动安装证书的流程
图:Yakit MITM Windows证书安装脚本操作流程
通过图例中的执行步骤,安装成功后,终端会显示"Certificate successfully installed."的确认信息,表示证书已经成功安装到系统的信任存储中。
- 在Yakit MITM的操作台中安装-手动安装
图:Yakit MITM证书下载与安装流程
下载证书后,双击打开 crt 文件,点击安装证书④,进入证书导入向导⑤
图:Windows系统信任Yakit MITM根证书步骤
自定义证书存储区域⑥
-
选择 "将所有的证书都放入下列存储" 选项,点击浏览⑦
-
选择 "受信任的根证书颁发机构",点击确定,执行下一步
完整证书导入⑩
-
点击完成⑩,Windows 系统会弹出一个二次告警,点击”是“
-
证书导入成功
至此,手动导入 Yakit MITM 证书就完成了,可以正常使用MITM功能来拦截和分析HTTPS流量了。
3.2.2 劫持模式:“自动放行”与“手动劫持”
本小节将会介绍Yakit MITM中的两个劫持模式。在使用这个功能之前,为了聚焦使用和获得更清晰的操作界面,我们可以“收起插件面板”:点击左侧边栏高亮的工具Tab页,可以收起插件相关功能面板。
图:Yakit 劫持模式下的插件热加载界面
> >在Yakit MITM中,劫持模式是核心功能之一,主要分为两种工作方式:自动放行模式和手动劫持模式。这两种模式在安全测试中各有其独特的应用价值和适用场景。
-
自动放行模式是一种被动监控方式,它允许所有HTTP/HTTPS流量正常通过代理,同时在后台记录和分析这些流量数据。这种模式的核心理念是"观察而不干预",确保业务流程的连续性,同时为安全分析师提供完整的流量视图。
-
手动劫持模式则是一种主动干预方式,它会拦截每个HTTP请求和响应,暂停数据传输,等待安全测试人员进行人工审查、分析或修改后,再决定是否转发到目标服务器。这种模式提供了对网络通信的完全控制权。
在实际的安全测试中,建议采用分阶段组合使用的策略:
-
第一阶段:使用自动放行模式进行全面的流量收集和初步分析
-
第二阶段:基于第一阶段的发现,切换到手动劫持模式进行针对性的深度测试
-
第三阶段:根据测试结果,在两种模式间灵活切换,进行漏洞验证和修复确认
自动放行模式:收集与初步分析流量
- 点击"免配置启动"按钮,系统将自动启动一个预配置的Chrome浏览器实例。此浏览器已经内置了代理设置(http://127\.0\.0\.1:8083),无需手动配置系统证书或代理参数,可以直接用于MITM流量分析。启动后会弹出配置对话框,显示代理地址和相关参数设置。
图:Yakit 自动启动免配置 Chrome 浏览器
- 在新启动的浏览器地址栏中输入目标网址进行访问。当浏览器发起HTTP请求时,所有的网络流量都会被自动捕获并实时显示在Yakit的"自动放行"标签页中。流量记录表会显示请求的序号、HTTP方法、状态码和完整URL等关键信息,让用户能够清晰地观察到每一次网络交互。
图:Yakit自动放行模式劫持流量示例
- 点击流量记录表中的任意一条记录,可以查看该请求的完整详情。左侧面板显示HTTP请求的详细信息,包括请求头、请求方法等;右侧面板显示服务器响应内容,包括响应状态码、响应头和响应体。需要注意的是,在自动放行模式下查看的都是已完成的历史流量,无法进行实时修改或拦截。
图:Yakit自动放行模式下的MITM流量劫持详情
通过免配置启动浏览器、访问目标网站、查看流量详情这三个步骤,用户可以快速实现对网络流量的被动监控和分析。整个过程无需复杂的代理配置,适合快速进行流量观察和初步分析,为后续的深入测试提供基础数据支持。
善于使用过滤器:筛选目标流量
在MITM流量分析过程中,往往会产生大量的网络请求,包括静态资源、广告请求、第三方服务调用等噪音流量。Yakit MITM提供了强大的流量过滤器功能,帮助用户精确筛选目标流量,提高分析效率。用户可以通过操作台中的“过滤器”来找到如何使用这些过滤规则。
注意:被过滤掉的流量并不会进入数据库
图:Yakit过滤器基础与高级配置界面
匹配模式说明
-
关键字匹配:基础配置中除Content-Type和文件后缀外,默认使用关键字匹配
-
正则表达式:高级配置支持正则表达式,适用于复杂匹配需求
-
Glob模式:支持通配符匹配,如
*.``google.com匹配所有Google子域名
为了方便用户快速理解,我们把上述内容选择重点内容总结在下面的表中
通过上述配置表格中的内容,用户可以灵活配置这些过滤规则,有效减少噪音流量,专注于真正有价值的HTTP请求,大幅提升渗透测试和流量分析的效率。无论是过滤静态资源、排除第三方服务,还是精确定位特定API接口,都能通过组合使用这些过滤条件来实现。
手动劫持(一):修改请求数据包
手动劫持模式是Yakit MITM最核心的功能之一,允许用户实时拦截和修改HTTP请求。首先需要在操作台中点击切换为"手动劫持"模式,此时系统会显示劫持HTTP Request的监听状态。当浏览器发起请求时,流量会被自动拦截并在劫持列表中显示为"劫持请求→"状态,同时浏览器页面会呈现"卡住"的loading状态,等待用户处理。在请求编辑器中,用户可以查看完整的HTTP请求详情(包括请求头、User-Agent、Accept等信息),并根据测试需要修改请求内容,如更改请求路径、添加参数、修改头部信息等。修改完成后,点击"放行"按钮将修改后的请求发送到目标服务器,浏览器随即恢复正常加载。这种交互式的劫持修改机制可以为渗透测试人员提供强大的请求或响应篡改能力,读者可以遵循如下步骤学习使用:
- 在Yakit操作台中,点击切换至**"手动劫持"**模式。此时系统将显示劫持HTTP Request的监听状态,准备拦截所有经过代理的流量。
图:Yakit手动劫持界面及Tab切换区域
-
触发流量拦截:当浏览器访问目标网站时,会发生以下变化:
-
劫持列表:显示被拦截的请求,状态标记为"劫持请求→"
-
浏览器状态:页面呈现"卡住"的loading状态,等待用户处理
-
请求详情:在编辑器中展示完整的HTTP请求信息
-
图:Yakit MITM手动劫持HTTP请求界面
-
修改请求内容:在请求编辑器中,用户可以:
-
查看完整的HTTP请求头(User-Agent、Accept、Host等)
-
修改请求方法(如将GET改为POST)
-
更改请求路径和参数
-
添加或修改请求头信息
-
修改请求体内容
-
在本案例中:将原始的GET请求修改为POST请求
图:Yakit手动劫持界面演示修改请求方法
复制
# 修改前
GET /hijacked HTTP/1.1
Host: www.example.com
# 修改后
POST /hijacked HTTP/1.1
Host: www.example.com
-
放行请求并观察结果:点击**"放行"**按钮后:
-
修改后的请求被发送到目标服务器
-
浏览器恢复正常加载
-
-
切换至自动放行模式,观察结果,在流量历史中可以看到后续流量正常通过,同时保留修改记录供分析。
-
请求标记为POST方法
-
添加"手动修改"标签
-
服务器返回403 Forbidden响应(因为请求方法变更)
-
图:Yakit 自动放行模式下手动修改请求的界面
一般来说,这个整个过程的使用非常简单,总体可以总结为以下步骤
图:手动劫持请求修改流程
手动劫持(二):修改响应数据包
在前面的操作中,我们已经可以实现基本的劫持数据包,修改请求,把发送的请求转交给真正服务器的过程。我们在本小节中,将会演示如何在MITM操作台中实现修改响应的操作:
在开启手动劫持之后,在劫持请求的操作按钮中,点击"劫持响应"按钮。此时系统会放行请求数据包,同时等待响应数据包返回,如果有返回,则会在数据包到达用户浏览器之前进行拦截,在Yakit可以看到拦截时响应内容。
图:Yakit 手动劫持界面展示请求与响应操作
在点击劫持响应后,请求会直接提交到服务器,响应的数据包接下来会展示出来。在劫持列表中,状态会显示为"劫持响应←",表明当前正在拦截响应数据包。
图:Yakit手动劫持修改响应数据包界面
当我们看到响应结果后,可以直接修改响应内容。例如在本示例中:
-
原始响应内容:服务器返回的HTML页面包含
<title>Example Domain</title> -
修改响应内容:我们可以将标题修改为
<title>Modified Via Yakit Example Domain</title>
在Response编辑器中,找到需要修改的内容行(如第15行的title标签),直接进行编辑修改。
图:Yakit MITM修改响应包标题效果
完成响应内容的修改后,点击"放行"按钮,修改后的响应数据包会被发送到浏览器。浏览器接收到修改后的响应数据包,页面会按照我们修改的内容进行渲染。在本示例中,浏览器标签页的标题从原来的"Example Domain"变成了"Modified Via Yakit Example Domain",证明响应修改成功生效。
通过这种方式,我们可以实时修改服务器返回的任何响应内容,包括HTML代码、JSON数据、图片等各种类型的响应数据,为安全测试和调试提供了强大的功能支持。
3.2.3 插件模式:自动化测试过程
前面的小节侧重在人机交互,用户可以通过MITM的UI操作细节的劫持过程。在本小节中,我们将会介绍如何使用Yakit MITM配合插件来实现安全测试的自动化过程。
MITM插件系统基本原理
在Yakit MITM的实现中,插件会获取流经MITM中间人的所有流量数据,通过流量驱动的方式执行特定的安全测试功能。Yakit内置插件可以直接在MITM的Tab工具栏中加载和使用,无需额外配置。
关于Yakit的插件系统详细机制,我们将在第五章中进行深入讲解。本节主要介绍插件在MITM环境下的基本使用方法。
一般来说,在MITM中使用的插件,我们分为两大类:一类是“被动插件”,另一类是:“交互插件”。
-
被动插件:被动插件是指用户无需输入额外参数,只需要将插件加载进内存,就能让劫持过程自动获得特定能力或实现自定义操作的插件类型。被动插件一般主要用于:自动检测特定类型的安全漏洞;自动分析敏感信息泄漏情况;实时监控异常请求行为;自动记录和分类安全事件。主要特点有:零配置启动,加载即生效
-
交互插件:交互插件相较于被动插件,其启动和执行需要依赖用户输入或确认特定参数,能够实现更复杂的漏洞测试和流量处理功能。可实现:复杂漏洞的自动化测试;基于用户配置的定制化检测;动态修改HTTP请求参数;自动化的响应内容替换。主要特点就是需要用户参数配置。
图:Yakit MITM插件系统请求与响应处理流程
被动插件:流量驱动自动测试
被动插件是Yakit MITM环境中的核心自动化安全检测组件,采用流量驱动模式实现零配置的实时安全扫描。当HTTP流量经过MITM代理时,被动插件会自动拦截并分析所有请求响应数据,根据内置的安全规则进行漏洞检测,无需用户手动触发或配置参数。
如下图所示被动插件的执行遵循三阶段自动化流程:
- 插件加载阶段 - 用户在MITM界面左侧插件列表中选择所需插件,点击开关按钮即可将插件加载进内存,系统自动完成初始化配置(可以在“已启用”查看成功加载的插件)。
图:Yakit 被动插件劫持 HTTP 请求与日志界面
- 流量拦截分析 - HTTP请求通过MITM代理时自动触发插件执行,插件获取完整的请求头、请求体、响应头、响应体等数据,基于预设的安全检测规则进行实时分析。
图:Yakit 被动插件自动测试界面
- 结果输出记录 - 检测结果实时显示在控制台日志中,如果发现了安全漏洞,用户可以通过数据库的漏洞管理按漏洞类型自动分类查看记录,并提供详细的漏洞信息。
被动插件的流量驱动架构具有显著优势:实现了零干扰检测(不修改原始请求)、并行处理(多个插件同时工作)和实时反馈(即时输出检测结果)。这种设计使得安全测试人员可以在进行正常业务操作的同时,自动完成全面的安全漏洞检测,大幅提升测试效率和发现漏洞的准确性。
交互插件:可配置参数化插件
交互插件与被动插件不同,它更加专注于用户操作和自定义内容,允许安全测试人员进行更灵活的配置。我们将在下面展示基本的交互式插件的用法:
图:Yakit交互插件修改HTTP请求Header参数设置
如上图所示,图中特别展示了"修改 HTTP 请求 Header"这一交互插件的使用流程:用户首先需要在左侧的插件列表中点击"交互插件"标签页,然后从列表中选择"修改 HTTP 请求 Header"插件。点击后会打开参数设置界面,用户可以在此配置 HTTP Header 的名称和值,例如添加自定义的"Yakit-Header"及其对应的"Custom-Value"。界面还提供了"添加一行数据"按钮,方便用户添加多个 Header 配置。
此外,用户可以在参数组中的"前提条件"设置区域,用户可以通过设置"URL 前提条件"来限定插件仅在特定 URL 请求时生效,进一步提高了测试的精确性和针对性。
在配置完毕之后,用户可以点击右上角的“确定”按钮,来把交互式插件加载到内存中。我们可以用接下来的操作直接验证这个插件是否在工作:
图:Yakit交互插件修改HTTP请求Header配置界面
在配置完成交互插件后,用户可通过简单的操作验证其有效性:首先在界面上选择"自动放行"并勾选"MITM"和"插件"功能,当 HTTP 请求通过 Yakit 代理时,系统会在流量列表中记录这些请求。用户可点击列表中的具体请求(如图中 ID 为 54244 的 example.com GET 请求)查看详情,从而确认请求头是否已按预期被修改——例如成功添加了自定义的"Yakit-Header: Custom-Value"头信息。
插件模式总结
Yakit MITM 插件系统通过流量驱动机制实现了安全测试的自动化,分为无需配置即可实时检测漏洞的"被动插件"和需要用户参数配置的"交互插件"两大类型。被动插件采用三阶段自动化流程(插件加载、流量拦截分析、结果输出记录),实现了零干扰检测、并行处理和实时反馈,让安全测试人员在正常业务操作过程中自动完成全面安全检测。交互插件则提供了更灵活的配置选项,如修改 HTTP 请求头、设置 URL 前提条件等,用户可通过观察流量列表中的请求详情来验证插件是否按预期工作,从而大幅提升了安全测试的精确性、针对性和效率。