昨天圣诞节大家都过得怎么样?
中国牛不过洋节,对超级牛来说仍旧是努力工作的一天
事已至此,先打开Yakit开始学习吧
经常有朋友在学习使用Yakit的时候发出这样的疑问:
“Yakit插件的原理是啥?”
“××插件能在Yakit里找到类似功能的插件吗?”
好说,那今天牛牛就带大家详细了解一下YAK插件原理以及实用情况
主动指的是需要对目标地址进行特定的访问,比如在指纹识别的过程中,很多cms需要进行特定路径的访问或者ico hash的计算才能得出具体的指纹。被动指的根据经过的request/response流量就可以完成对应的功能。比如:在指纹识别中,也有一部分cms就可以通过uri、header、body等就可以完成识别。在yaklang官网--初探被动扫描 | Yak Program Language中也提到了,这里指的被动扫描更偏向于对流量识别和后续的处理。
在MITM中间人劫持过程中,其实就类似于一个正向代理,简化架构如图,当进行流量发送的时候,请求通过MITM,MITM对请求进行劫持、丢弃等功能,然后将请求发送给Server,Server收到后进行响应,同样将响应发送给MITM,后经过MITM来转发给用户。在这个过程中,mitm就充当了一个中间人,拥有了对请求和响应的“操作权限”。在之前讲到的热加载功能中的对请求进行hook修改,对响应进行hook修改的疑问也就迎刃而解,都是通过MITM功能来进行的一系列衍生操作。通过熟悉了上面的MITM简单的运行原理之后,也就不难发现,MITM只是在中间充当了一个流量转发的媒介,那么也就可以推出,在before MITM和after MITM之后,也可以有多个“正向代理” 来将处理之后的流量转发到server上,同样,可以通过这些代理来转发到用户端,中间这些代理也可以像MITM一样去劫持或者转发流量。指定下游代理的方式
能做什么?
在渗透过程中,常常会配合其他一些工具的使用或者将流量进行备份,以方便多种方式去验证漏洞是否存在,避免了在渗透中出现遗漏。在渗透测试中,可能会配置其他一些渗透测试软件,比如xray来进行联动等。其实原理就是将从MITM走过的流量转发到xray上。
流量转发在yaklang的教程使用中也有涉及。使用Yakit进行流量劫持 | Yak Official Website同时,yak中也支持一些MITM插件的使用,比如:指纹探测、shiro爆破等
我们常常会关注指纹、敏感信息等信息,在bp中,常常使用的插件是hae,hae的原理也就和上面所讲到的被动扫描的原理是一致的,只要是依赖流量中数据来进行匹配。在yak mitm中也内置了敏感信息的识别、染色、tag标记。{
"Rule": "(?i)((access|admin|api|debug|auth|authorization|gpg|ops|ray|deploy|s3|certificate|aws|app|application|docker|es|elastic|elasticsearch|secret)[-_]{0,5}(key|token|secret|secretkey|pass|password|sid|debug))|(secret|password)([\"']?\\s*:\\s*|\\s*=\\s*)",
"NoReplace": true,
"Color": "red",
"EnableForRequest": true,
"EnableForResponse": true,
"EnableForHeader": true,
"EnableForBody": true,
"Index": 3,
"ExtraTag": [
"敏感信息"
]
},
如何写一条指纹:
首先需要去了解go中的正则,因为在规则中是可以去支持大小写敏感的。比如一条shiro的指纹,shiro的特点是在返回包中有rememberMe=deleteMe,而且必然是在返回包的Header头中,我们就可以写这样一条规则:{
"Rule": "reMemberMe=deleteMe",
"NoReplace": true,
"Color": "red",
"EnableForRequest": false,
"EnableForResponse": true,
"EnableForHeader": true,
"ExtraTag": [
"shiro指纹"
]
}
指纹优先级:
当一个请求/响应,符合两个指纹的时候,因为流量是经过顺序来进行匹配的,所以会展示最后一条规则的颜色,但是在tag中是会将两个tag进行叠加展示,并且在展开的页面中会显示规则名的规则数据,比如,定义两条一样的shiro指纹。一条正则为rememberMe=delete,另一条为: remeberMe。结果如图:在上面讲到的MITM简易原理的过程中,在MITM中可以对请求包和响应包进行hook和mirror从而实现各种各样的操作。MITM中也可以通过写MITM插件的方式来进行指纹的识别。例如,在官方插件--被动指纹检测中就是通过在MITM去镜像流量的方式来实现的内置指纹。在本质上来说,两种方式效率都差不多,都是通过插件执行的方式去进行内置,不同的是,MITM插件的方式需要去调用yakVm来去执行,而MITM内置指纹是通过go代码来进行执行。在很多CTF的题目中,都会遇到xff的伪造,xff的伪造也是比较暴力,由xff造成的漏洞也有很多,比如在代码中会出现登陆存库来使用xff。由于HTTP协议是架在TCP协议上,而TCP协议又是一个端到端协议,在这样的一个协议中,通信双方就很容易的拿到双方的地址。那么在有些网站中,会由于CDN/负载均衡的介入,就会发生变化。CDN本质上是为了让用户访问的时候提高速度,从而让连接转到离用户更近的服务器上,然后由CDN服务器进行缓存返回/转发。IP伪造的原理:
在IP伪造中,核心原理是利用通信双方需要一个中间媒介来进行真实IP的转发,而转发的内容又是所能控制的。在MITM中,内置了HTTP 请求头伪造 IP插件,在流量经过时,对一个HTTP请求包来进行添加HTTP头,由于不同的CDN、不同的负载均衡添加的HTTP头也不完全相同,所以内置了常见的HTTP IP伪造头。"本地"模式:
伪造"本地 "IP,在渗透中,有时候会遇到,注册/登陆会有一定的IP限制,比如限制某一片区域,或者某一段IP内,但是由于拿到的IP是经过伪造后的IP,所以就可能存在绕过的情况。在这里,只要是本地IP就可以随机登陆(后端没有限制用户名和密码),在这里我们选择使用MITM中的伪造IP插件,伪造IP为127.0.0.1,用户名和密码随机。"随机"模式:
随机模式指的是,在渗透中,有时会遇到密码爆破的情况,而密码爆破次数的限制会有多种情况。根据用户名来进行限制,在一段时间内允许登陆N次
- 根据IP地址来进行限制,在某一段IP范围内允许登陆N次
在这里,我们选择使用IP伪造中的爆破,这里后端的逻辑为,一个IP随机爆破5次即用户被锁定。这里我们发送到webfuzzer中,我们选择使用热加载。END
it使用小tips
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
文章来源: https://mp.weixin.qq.com/s?__biz=Mzk0MTM4NzIxMQ==&mid=2247527317&idx=1&sn=34b9913df7230605c26607f44c9c5e63&chksm=c2d11731f5a69e27682d884b0af24d7cac79428da69e8c32a4dbc68df3c2995d15660157f620&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh