免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。
目录
[MITM 交互式劫持技术](#MITM 交互式劫持技术)
Yakit进阶模式-MITM中间人代理与劫持
背景介绍
"MITM" 是 "Man-in-the-Middle" 的缩写,意思是中间人攻击。
MITM攻击是一种网络攻击技术,攻击者通过欺骗的手段,让自己成为通信双方之间的中间人,从而可以窃取双方之间的通信内容、修改通信内容、甚至篡改通信流量,从而实现窃取信息、伪造信息等攻击目的。
"未知攻,焉知防",在渗透测试中,MITM劫持可以被用来模拟真实的黑客攻击,以测试系统和应用程序的安全性。
渗透测试中使用MITM攻击的一个典型场景是在测试Web应用程序时。攻击者可以使用MITM技术拦截应用程序和服务器之间的通信,以获取用户名和密码等敏感信息,或者篡改应用程序返回的数据。攻击者可以使用代理工具,来捕获应用程序发送和接收的数据,对数据进行修改或篡改,然后重新发送到应用程序或服务器。这样就可以测试应用程序是否可以有效地防范MITM攻击,并且是否能够正确地处理应用程序和服务器之间的通信。
MITM攻击还可以用来测试网络的弱点,并检测是否存在潜在的漏洞。通过MITM攻击,渗透测试人员可以捕获网络中传输的数据,并进行分析和审查,以发现可能存在的安全问题。
例如,攻击者可以利用MITM攻击来欺骗局域网内的设备,并拦截设备之间的通信流量,从而窃取敏感信息,或者篡改数据包,对网络进行进一步的攻击。
总的来说,MITM劫持是渗透测试中常用的一种技术,它可以帮助测试人员发现网络中可能存在的安全漏洞,提供相应的建议和解决方案,从而保护系统和应用程序的安全。
相比于基础工具的使用,这一部分内容相对来说需要一定的安全基础,属于Yakit的进阶内容。故此部分内容归属于进阶模式。
MITM 交互式劫持技术
Yakit的MITM模块原理是启动一个HTTP代理,自动转发流量,当用户启动手动劫持后,会停止自动转发,阻塞请求,并将请求出栈,做解压Gzip、处理chunk、解码等处理,让请求变得人类可读,并显示在用户前端,用户可以对请求做查看、修改或重放。
重放时,会对用户构造的HTTP请求数据包做修复,保证请求包的有效性。Yak引擎手动实现了HTTP库,所以用户可以自定义畸形的请求包、响应包,应用于一些特殊场景下的漏洞利用。
MITM劫持,却不止于劫持
MITM操作台可百分百替代 BurpSuite,下载并安装证书、劫持请求、响应、编辑劫持到的数据包等。
并且提供一整套顺畅的工作流,劫持 => History => Repeater / Intruder,劫持到的数据,在History可以查看历史数据,选择需要"挖掘"的数据包,发送到 WebFuzzer 进行 Repeater / Intruder 操作。
除了这些典型的操作场景外,MITM 还提供了插件被动扫描、热加载、数据包替换、标记等更灵活的功能。
接下来的章节将对MITM模块进行详细介绍MITM的功能。
证书安装和免配置启动
要在渗透测试中使用Yakit 的 MITM劫持,您可以:
- 使用免配置模式。不需要任何其他配置,只需安装Chrome 浏览器,免配置启动之后将打开一个新的浏览器会话,其中所有流量都将通过 Yakit 自动代理。无需安装 Yakit 的 CA 证书就可以使用它来通过 HTTPS 进行测试。
- 使用您选择的外部浏览器。由于各种原因,您可能不想使用免配置的代理的浏览器。在这种情况下,您需要执行一些其他步骤来配置浏览器以与 Yakit的 MITM 一起使用,并在浏览器中安装 Yakit 的 CA 证书。
免配置模式
点击
手工测试
--MITM交互式劫持
即可进入MITM劫持页面,点击免配置启动
进入免配置启动设置界面。CA证书的安装
关于证书的安装(以windows为例),主要有以下步骤:
- 首先,需要我们根据图中所示配置好代理的监听端口和浏览器的代理服务器设置,然后点击③
高级配置
并下载证书。修改下载证书的后缀,去掉".pem",双击进行安装,证书存储选择 '受信任的根证书颁发机构'
拓展知识:CRT和PEM是两种常见的数字证书格式,用于加密和验证通信过程中的数据安全。CRT是一个X.509证书文件格式,PEM是一种可打印的证书文件格式,可以包含多种类型的加密和公钥证书。PEM格式通常使用base64编码,并且以"-----BEGIN CERTIFICATE-----"和"-----END CERTIFICATE-----"之间的文本块包含证书数据。PEM格式还可以用于存储密钥、证书请求和其他类型的加密数据。CRT格式是一种二进制格式,包含用于验证数字证书有效性的公钥、证书持有者的信息以及证书签名。CRT格式通常用于安装数字证书到Web服务器或其他应用程序中。在实践中,PEM格式比CRT格式更为常见,因为PEM格式的文件可以轻松地通过文本编辑器进行查看和编辑,并且PEM格式也可以包含多种类型的加密和公钥证书。不过,在某些情况下,例如在安装数字证书到Web服务器上时,CRT格式可能更为方便。
至此,我们已经完成Yakit-MITM证书的安装,在Yakit中可以对HTTPS请求进行抓包。
开始劫持
- 1.设置代理监听主机,远程模式可以修改为0.0.0.0以监听主机所有网卡。
- 2.设置代理监听端口,设置一个不被占用的端口。
- 3.开启该选项将支持 HTTP/2.0 劫持,关闭后自动降级为HTTP1.1,开启后 HTTP2 协商失败也会自动降级。
- 4.根据填写的正则规则,对符合规则的数据包进行染色、标记、替换、打tag等操作,方便用户快速筛选出目标数据包。Yakit目前提供55条默认规则,点击
默认配置
导入即可使用。- 5.开启启用插件则表示,进入劫持页面就会加载在侧边栏 ⑥ 当中选择的插件以及编写插件时设置了默认启动的插件。
- 6.插件商店当中的"MITM插件" 和 "端口扫描插件"类型的插件。
- 7.插件分组:将插件按照自己的使用习惯进行分组,便于在使用插件时快速勾选自己需要的插件。插件组在整个Yakit里是共用的,只要有加载插件的地方就使用插件分组。
- 8.根据关键字或者tag快速搜索所需插件。
- 9.下拉显示已创建过的分组,并进行分组选择。
- 10.高级配置:
- 11.为劫持再设置一个代理,通常用于访问中国大陆无法访问的网站或访问特殊网络/内网,也可用于接入xray等被动扫描。
- 12.客户端TLS:导入TSL证书,用于 mTLS(Mutual TLS)开启客户端验证的 HTTPS 网站抓包。
- 13.过滤器:通过配置过滤条件,来控制只抓/不抓哪些数据包,也可以理解为劫持的"黑白名单"。
- 14.下载Yakit证书。
开始劫持
点击
劫持启动
后进入到劫持界面:选择丢弃请求
,则该条数据不会出现在history,提交数据
则会将该数据包记录在history 并开始劫持下一个数据包。
在劫持页面的左上角的①单选框选择
手动劫持
,打开浏览器,输入你需要访问的URL(以百度一下,你就知道 为例)并回车,这时你将会看到数据流量经过 Yakit 并暂停,您可以查看或修改数据包。选择自动放行
则会放行所有的数据包,被动日志
则为劫持模块、插件加载、被动扫描的执行日志。选择
手动劫持
劫持到请求以后,点击右边②丢弃请求
则该条数据将会丢失,不在继续处理且不会出现在history
中,③提交数据
则会将该数据包继续传输下去并记录在history
并开始劫持下一个数据包。劫持到请求以后,在右边单选框④
劫持响应
处选择当前请求,则会劫持到当前请求包对应的响应数据包。选择"所有"则会劫持所有请求的响应数据包。在整个数据包展示处,我们可以看到HTTP请求的数据进行手工的修改,数据主要包含了:请求地址、http协议版本、主机头、浏览器信息、Accept可接受的内容类型、字符集、编码方式、cookie等,点击鼠标右键可以对数据包进行更多的操作:
劫持到的所有的数据包都会存入到
history
中,劫持后可以在history
查看感兴趣的数据包。关于History功能的详情请移步 History进行查看。标记/替换流量
在日常的工作中,我们需要对测试的目标网站进行流量分析;当然除了在分析流量之外,我们经常需要涉及一些操作,以实现对流量的修改。
作为一个合格的工程师,任何时候掌握对流量的完全控制权其实是非常重要的基本技能。
该功能主要是替换数据包中符合规则的内容,比如替换数据包中自己的敏感信息,对数据包进行颜色标记或者打上标签,方便对数据包进行分类,或快速找出自己感兴趣的数据包。
导入/导出规则
在启动 MITM 之前,我们就可以配置这些规则,当然,我们也可以在 MITM 劫持过程中动态修改。
首先,在开始劫持页面的内容规则选项我们可以看到 ①
默认配置
②导入配置
③导出配置
三个与内容规则相关的操作选项。我们点击默认配置选项。在弹出的对话框中,点击 ①
使用默认配置
,导入JSON以后,点击 ②导入
点击右上角的
导出配置
,可以将规则导出为JSON文件,可将文件进行分享给他人使用。新建/编辑规则
在劫持页面点击右上角
规则配置
可以查看已有规则编写规则的部分采用 Golang 风格正则表达式:推荐使用 regex101: build, test, and debug regex 调试,规则如果编译失败,则自动降级为关键字匹配
已有的规则可以进行编辑操作,或者新增规则,编辑或新增以后点击
添加该规则
或修改
进行保存细节说明
这些规则是 针对代理全流量的,不光会对用户在 History 看到的过滤后的请求生效,对一些已经被过滤掉的 JS 或者静态文件都是生效的,编写简单规则务必明确场景
规则的执行顺序是有意义的
规则基于 Golang 风格正则/Glob/关键字, 采取降级策略:即如果无法编译为正则,将会最后被降级为 "关键字" 匹配。
替换后的数据包将会被自动修复,用户不需担心数据包毁坏协议
未完待续~~!!!!!!!!