为什么需要流量分析功能呢?
在以往,我们一般通过 History
页面来处理已经存进数据库的流量,通过关键词、网站树等方法筛选出我们想要的流量。
一般情况下这是足够用的,但是如果需要符合筛选就比较难了。
比如:筛选出请求包中包括"baidu",返回包包含"helloworld"的流量,那么单纯关键字搜索框就无法满足我们的需求了。这个时候,有使用 Yaklang 编程经验的用户,可能会通过 YAK 代码完成这项需求。通过 db.QueryHTTPFlowsAll()
的遍历数据库的所有流量数据,拿出所有合适的内容。
这是一种很好的解决思路。事实上,流量分析也正是通过遍历数据库的流量、分析,拿到最终的结果。不过,流量分析能够完成的工作不止这些,它还支持使用 MITM 提取器规则进行分析,这意味着在有新规则的时候,能够对旧的流量数据再次进行分析。
我们先大体介绍一下 Yakit 流量分析的功能分布以及运行流程。
流量分析功能页面的入口在 History 右边的小图标上面:
如上图,流量分析功能大概分为三大部分:
-
筛选页面。这个页面和History一样,你可以通过
网站树
、关键字
、协议类型
等各种方式筛选你想要进行分析的流量,避免将所有数据库的流量都进行分析,造成性能负担。 -
分析方式。分析方式分为
规则
与热加载
,规则
就是MITM匹配器的规则,而热加载
则赋予使用代码处理流量的能力。这两种分析方式是并存的,也就是如果同时配置规则与热加载,他们都会运行。 -
配置页面。这个页面是一些流量分析功能一些配置信息,包括数据类型、并发以及单条记录的去重等。
流量分析是个简单的输入输出模型,运行流程图如下:
接下来,文章会对 Yakit 的数据输入、流量分析、结果处理模块做个详细的介绍。
选择数据的输入可以通过配置页面进行配置:
在配置页面中,有数据类型设置,分别为筛选流量和数据包。这两个设置其实代表着想要分析的流量的来源。
-
筛选流量:设置以后会通过筛选页面设置的条件,从数据库中遍历每个符合条件的流量进行分析。
-
数据包:由用户手动输入数据请求包、返回包,流量分析器会解析成 HTTPFlow 进行分析然后存入数据库。
默认使用的是筛选流量,只有设置了筛选流量后筛选页面才能生效。
如果设置数据包,那么需要手动填入要分析的流量:
流量分析分为规则分析和热加载分析,他们可以同时运行。
(一)规则
流量分析可以直接使用 MITM 的规则。值得注意的是,MITM 中的规则又分为匹配规则
和替换规则
。因为流量分析只是分析已经存在的流量,所以只会执行匹配规则,对内容进行匹配、染色等操作,而不会对数据包的内容进行替换(实际上也替换不了)。
(二)热加载
我们为流量分析器提供了一个热加载函数 analyzeHTTPFlow
。它有两个参数:flow
和extract
。
-
flow:从数据源来的流量。
-
extract:用来提取分析完成的流量。extract 方法有两个参数,第一个参数为提取的规则名,第二个参数为提取的流量。
我们使用热加载来实现上面我们提到的需求:筛选出请求包中包括“baidu”,返回包包含“helloworld”的流量,同时我们还可以将其标记为绿色。
热加载代码:
analyzeHTTPFlow = func(flow /* *yakit.HTTPFlow */ ,extract /*func(ruleName string, flow *yakit.HTTPFlow)*/){
if str.Contains(flow.Request, "baidu") && str.Contains(flow.Response, "helloworld"){
flow.Green()
extract("提取helloworld",flow)
}
}
结果如下:
在流量分析完以后,可以查看匹配到的内容。如上图,可以看到两个“导出”的按钮:上面的导出为将本次所有提取的规则数据进行导出,下面的导出则针对单条数据匹配到的规则。
在使用 WebFuzzer 的时候,如果产生数据包过多,可以跳转到流量分析里面进行流量分析。
此时流量分析器的筛选页面就会默认筛选出刚才 WebFuzzer 产生的流量,从而可以进一步分析。这个方式在 WebFuzzer 产生大量数据包的时候,对于想要查找有价值的数据十分有用。
Yakit 流量分析功能突破传统流量筛选限制,通过 MITM 规则复用与热加载自定义代码,支持历史数据重分析及多源数据实时处理,实现复杂条件精准匹配与高效特征提取,结合结果标记与灵活导出,全面优化安全测试效率,推动工具生态闭环与深度数据价值挖掘。
——END——
【YAK官方资源】
Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ