漏洞分析:多认证越权测试插件原理与使用
在往期知识分享中,我们介绍了MITM插件现在能够使用Cli接受动态的配置参数,使得其功能得到很大地拓展。在《CLI 参数助力 MITM 插件升级》一文中,Rookie师傅便介绍了如何使用该功能编写越权插件。而最近,交互插件系统中上新了一些官方的插件,其中包括了Yak 社区中需求声很高的越权插件以及两个小辅助插件。越权插件能够对存在可能的越权的数据包进行染色并做标记,相比以往具备更好地表现力。而两个小赋值插件能够对每个经过的报文修改成手动设置的Cookie和Header,提升渗透测试的效率。
本期知识文章将介绍这些插件的用法并着重介绍越权插件的相关原理,学习完相关原理后,读者也能够开发出类似的插件。
多认证综合越权测试插件
在MITM交互劫持页面的交互插件,便能够找到我们的多认证综合越权测试插件。
目前多认证综合越权测试能够支持基于Cookie与Header Auth认证两种模式。
Vulinbox实战_
这里使用Vulinbox靶场中的逻辑场景进行插件测试。
首先注册两个用户,用户名分别为test1和test2,接着登录test1的账号,获取其cookie为
_cookie:11e0bdd7-c1e2-4fcd-82a6-7a341d5dc54ebr
接着将cookie配置进多认证综合越权测试插件,并启动插件:
接着在不退出test1的情况下,使用test2账号进行登录,从MITM流量中的插件是可以看到经过修改的数据包的。如下图,一共有两条数据,第一条为_cookie被移除了,做了一个未授权访问的检测,发现不存在未授权访问。而第二条的_cookie使用的是test1的,并且其返回包的内容与使用test2的_cookie一模一样,因此我们认为其存在水平越权漏洞,并且将该条报文设置成红色,以便其更加显眼。
这里只有两条被修改过cookie的报文,那么我们要看原报文如何查看呢?很简单,只要点击MITM便可以了。
原理解析
以上,我们实现了数据包的染色以及 tag 的添加,以便能够一眼看到哪些报文存在越权漏洞。对数据包添加 tag 与染色的原理并不复杂,本质上是通过一段 yaklang 代码实现的。因此在编写自己的插件时,完全可以应用这些功能,提升插件的表现力。
为了进一步了解其相关原理,我们可以将鼠标悬浮于"多认证越权测试插件"上,查看其代码的实现。其染色与加tag主要逻辑在下方的handleReq中:
handleReq = (reqBytes, newValue) => { poc.HTTP( reqBytes, poc.https(https), poc.saveHandler(response => { tag= "" if len(enableResponseKeywordList) > 0 { if respMatch(response.RawPacket,enableResponseKeywordList...){ tag = "响应内容标志值匹配" response.Red() }else { tag = "响应内容标志值消失" response.Green() } }else{ sim := str.CalcSimilarity(baseResponse, response.RawPacket) if sim > 0.95 { response.Red() } elif sim <= 0.4 { response.Green() } else { response.Grey() } showSim = "%.2f" % (sim * 100.0) tag = f"相似:${showSim}% " } if newValue == "" { tag = f"${tag} 移除 ${isCookieMode? f`Cookie[${key}]`:f`Header[${key}]`}" }else{ tag = f"${tag} 值: ${newValue}" } response.AddTag(tag) }), ) }
可以看到,当http数据包要被保存的时候,会调用saveHandler进行相关处理(函数的相关作用可以在yakRunner代码提示中进行查看)。具体逻辑为,如果返回包匹配到了我们手动设置的相关字段,那么就使用response.Red()让该数据染成红色,否则就是绿色。而如果没有手动设置关键字的话,那么就使用str.CalcSimilarity文本相似性算法,计算新的返回包与原来返回包直接的相似性,如果精度达到0.95以上的话就设置为红色。最后使用**response.AddTag(tag)**进行tag的添加。
修改HTTP请求 Cookie与Header
与多认证综合越权测试插件一起上架的还有修改 HTTP 请求 Cookie与修改 HTTP 请求 Header两款交互性插件,因为两款插件大差不差。这里以修改 HTTP 请求 Cookie做介绍。
以下是该交互性插件所需要添加的参数,分别为cookie的key和value。同时还有一个前提URL条件,如果填了前提URL条件,那么就只会改相关URL的cookie。修改cookie的行为本质是调用poc.ReplaceHTTPPacketCookie函数的,因此如果请求包中存在该cookie就会进行修改,不存在的话就会添加这个cookie。
在这里,我们以访问百度为例,配置内容如下:
启动后,可以发现与百度相关cookie都会被修改了:
这里值得注意的是,如果取消选中交互插件,那么页面会默认显示MITM的流量,需要点击插件最右边的按钮才能查看相关插件的流量。
总结
官网新上线的这几个交互插件,可以更为方便进行渗透测试。其中多认证越权测试能够对存在的越权漏洞的数据包打上颜色与标签,可以说表现力比以往更上一层次。在了解相关原理之后,也推荐读者开发出类似的插件。
本文首发于 Yak Project 公众号,阅读原文。
