- 博客(151)
- 收藏
- 关注
原创 独立SyntaxFlow功能?IRify,启动!
(饿梦惊醒)(翻身)(摸到电脑)(尝试打开电脑学习)(代码审计…代码扫描…)打开IRify,是熟悉的项目管理页面,同Yakit一样,这里可以管理所有的项目。让我们新建一个项目,进入IRify⬇️首页包含代码审计、代码扫描、规则管理三大模块,分别点击下方按钮即可直达对应页面。也可以通过左上角进入对应页面。SyntaxFlow代码审计与代码扫描前都需要先进行项目编译。点击左上角项目管理:可见图中红色方框圈起的选项编译项目的选项如下(必选项为项目路径):其他额外参数等都非必填。
2025-03-31 14:36:05
685
原创 SyntaxFlow Java实战(一):值的搜索与筛选
其实现的原理是通过SSA的OpMake(关于Make的信息可以查看官方理论知识文档)作为容器,使用一个容器存储注解相关的信息,然后通过一个索引到索引到存储方法的容器上面上面。值得注意的是,官方内置的检测弱哈希算法的规则比上面写的更为复杂,主要涉及到了数据流分析。变量的搜索很简单,但是在实战中几乎没有用(因为左值都是人为命名的,每个人命名的名字各种各样,因此写出来的规则没有普适性)。链式调用的方法会将前面的调用者作为第一参数(这也是为什么链式调用的数据流能够连同的原因,关于这部分的内容后面也会进行介绍)。
2025-03-07 14:39:48
787
原创 Yak 在 AI 浪潮中应该如何存活?
实际上,大家用 AI 的都懂:Chat 绝对不是终极交互目标,在写代码过程中,Chat 虽然和 Cursor 的交互形式背后的引擎可能是一样的,但是实践性和可用性远远比不上 Cursor 之类的工具。我们在 Yak 开源的时候,就一直在反复提“安全能力融合”的概念。编译级静态代码分析引擎;gVisor 本身仓库的构建使用 bazel 工具,主仓库无法直接使用 go get 之类的命令直接安装,需要做一些小小的额外参数,虽然改动不大,但是操作员没有深入的基础知识的情况下,AI 无法自己修复整个工具链的报错。
2025-03-03 14:33:57
811
原创 Oi,不要小看Proxy浏览器插件与Yak之间的羁绊啊!
为了进一步增强免配置浏览器的使用体验、以及完成对 Proxy SwitchyOmega 插件需求的过渡,我们开发了一个类似 Proxy SwitchyOmega 功能的插件,现在当用户打开免配置浏览器时,本质上是通过。对于 Yakit 用户来说,免配置浏览器带来了很多的便捷,一键启动即可打开一个配置好了 Yakit MITM 代理的浏览器,并且与日常使用的浏览器互不干扰。当前浏览器插件的默认代理项是点击 "启动免配置 Chrome" 是配置的代理,也就是如下图中的。模式下,代理配置从操作系统中获取。
2025-02-21 10:30:05
733
原创 震惊,YAK-JWT靶场的通关方式竟然是...
这个页面是登录首页,通过localStorage从会话中读取VULINBOX_JWT变量,如果存在则通过这个jwt请求/jwt/unsafe-login1/profile,获取用户信息并展示。首先了解一下jwt结构:jwt由3部分组成,使用.连接,第一部分是header信息,第二部分是Claims信息,第三部分是签名。首先打开JWT的登录(未验证算法)案例,在这个案例中,后端未校验加密算法,将根据用户传递的加密算法解密验证jwt。所以我们的目标就是修改jwt内的header,并绕过后端的校验。
2025-02-17 10:46:55
820
原创 成魔成仙,牛牛自己说了算!
在这里可以看到不同的requestUri获取到的filterChain不同,而在getRequestUri中在normalize函数中处理的有问题,就造成了权限绕过。Shiro的本质就是一个filter过滤器。在扫描过程中,其实还找到多处的文件上传的利用,但奈何是利用date作为路径名称,虽然有修改文件名的功能,但是限制太大。经过代码扫描后,发现shiro的版本是1.4.0,处于权限绕过的版本中,进行尝试利用。找到三个调用点,这里找到调用点之后,直接将传入的内容,进行拼接,然后进行了文件删除。
2025-02-08 11:26:12
454
原创 很好SCA规则,爱来自Syntaxflow
比较常见的一个SCA合规信息的获取来源是CVE信息库,yakit本身有CVE信息基础支持,所以可以尝试联动,进行CVE合规的自动生成。当然我们可以修改一下目标产品生成一些其他的合规规则比如 xstream,此靶场依赖里的xstream版本为 1.4.14,此版本有多个CVE。上述的demo脚本还有许多可以优化的地方,比如对供应商的筛选,以及一些产品的别名的修正等,感兴趣的师傅可以继续尝试可改进。其中有一些有问题的依赖库,先来使用生成的fastjson的规则测试。用来描述相关的产品以及其受影响的版本。
2025-01-24 11:33:51
629
原创 一种简单又强势的Js-Forward脚本编写方式
在收到响应时,直接将原始的响应写回给客户端即可(对应时序图的第四步)。JS-Forward是一款可以配合抓包软件的脚本,脚本的功能是可以将js里面的参数通过Http请求将参数发送出来,在外部(例如Yakit的MITM中)进行修改,最后将修改后的返回值再替换回原参数。实际上这个答案很简单,即我们不能直接将请求发给MITM代理,因为代理会将请求发到真实的服务器,并将响应返回给客户端,如果我们不将请求发给Echo服务器而是发给其他服务器或者目标服务器,显然我们无法将响应体作为修改后的请求参数来使用。
2025-01-20 17:41:40
788
原创 YAK-SSA,古希腊掌管PHP代码审计的神
php$a = 1;}eval($a);画出来的控制流图为://寻找顶级定义的过程中,排除路径上filter的/*$sink:t66: 1*/但是会发现,这个并不是想到的内容,原因就出现在,我们需要让它与可控变量做交集。需要让它的顶级调用者中,出现可控变量,这样的话,再次改写代码。// 寻找顶级定义的过程中,路径上包含与_POST相交的点,并且排除filter_POST as $source*a #{exclude: <<<CODE*?在这样的一个简单demo学习之后,我们就可以进入实战演示。
2025-01-10 16:08:55
1024
原创 使用规则管理新功能,进行新年的第一场代码审计!
同时,编写规则的时候务需准确填写规则的描述信息,因为引擎会根据描述信息自动生成规则的默认分组。规则的内容由一堆审计语句组成,不同类型的规则内容的写法都有一定的范式。所以,作为开头描述信息的level只是起到了一个“兜底”的作用,当审计出的结果没有level的时候,就默认使用这个level。type描述了规则的类型,更确切的讲,是规则的目的,也就是这个规则是用来干什么的。规则描述对于一个规则是必要的,它能够表示一个规则的目的、漏洞等级、已经审计出的漏洞类型或者是CVE编号等信息。
2025-01-07 11:02:35
750
原创 偶遇YAK插件,超级牛拼尽全力终于拿下
经常有朋友在学习使用Yakit的时候发出这样的疑问:“Yakit插件的原理是啥?“××插件能在Yakit里找到类似功能的插件吗?好说,那今天牛牛就带大家详细了解一下主动扫描和被动扫描,在字面上就已经有所区分。主动指的是需要对目标地址进行特定的访问,比如在指纹识别的过程中,很多cms需要进行特定路径的访问或者ico hash的计算才能得出具体的指纹。被动指的根据经过的request/response流量就可以完成对应的功能。
2024-12-30 15:50:27
1236
原创 超级牛的Java反编译
仔细读一下代码可以勉强理解:加载一个变量,如果它的值是true那就执行94号之后的代码,否则执行84号之后的代码,到91号时再跳转到101号,画个图直观看一下。由此可以推出,局部变量表中的变量与存活的变量是一一对应的。对于Java代码,执行顺序是自上而下,如果将每一条语句视为执行单元,那也就不存在回边,java语句中可能导致回边的语句有循环语句、break、continue语句。在对程序的 CFG 进行 DFS 时,生成的 DFS 树中,如果存在一条边 A->B,且 B 是 A 的祖先,则称该边为后退边。
2024-12-20 15:41:00
748
原创 渗透测试高级技巧(三):被前端加密后的漏洞测试
当然,这个场景并不是 MITM 的全部用法,实际上如果你有其他工具可以测试漏洞,但是无法适配加密套件,Yakit MITM 还可以直接充当加密套件来辅助用户的其他工具测试,等有机会的话,我们再来介绍后续的场景。经过上述简单的分析和实践,我想大家已经知道基本解密上述的代码了,那么可以正式开始我们的第一个任务:让 MITM 看到明文数据包:我们直接把上述的函数复制到热加载代码中,我们再修改一下代码,让。我们通过热加载主动去修改了数据包的内容,进行了加密,直接绕过了上述加密和解密内容,成功测试了这个漏洞。
2024-12-06 10:43:52
1393
原创 “Yaker,你可以全局配置插件环境变量!“
改造之后此参数会在插件发送测试数据包的时候添加特定的请求头值,如需改动请求头值只需,修改环境变量配置即可,无需再改代码。实际工作中可以改造热加载插件,使用hijack系列的hook,达到”一处修改,全局生效“的效果,用户可以自行探索。假设现在进行渗透测试的一批目标中,分别添加特定的头 TestHeader,不同的测试目标的校验值不一样。需要注意的时候环境变量的影响范围是全局,这里修改之后,所有的使用对应环境变量的地方都会受到影响。我们的设计中,使用cli的选项作为环境变量的获取接口。
2024-11-28 17:34:06
551
原创 嘿朋友,你想成为SYN扫描传奇吗?
比如,我要扫描 192.168.3.100 ,根据路由表,这个地址在192.168.3.0/24网络内,数据包将直接从接口192.168.3.3发送,路由表中的“在链路上”的条目表明数据包将直接在本地网络接口上发送,不经过任何路由器。其中,源MAC地址就相当于是本机发包网卡的MAC地址,目的MAC地址则需要我们通过其他方法获取,因此在构建一个完整的数据包前,我们还需要一些前置工作。以太网帧头指的是在以太网层(或称为数据链路层)中,每个数据包开头的部分,用于定义数据包的一些基本属性。
2024-11-18 10:32:52
1092
原创 拿不下总统之位,那就用热加载拿下验证码识别与爆破好了!
我们可以看到,验证码在访问功能页面的时候便已经生成,并且服务端在生成验证码的时候会将结果保存,并作为以用户输入的验证码做比较的依据。一般而言,验证码不具备复用性,在你输错验证码或者重新请求验证码接口的时候,后台便会刷新,并返回新的验证码,这大大提高了爆破的难度。我们发现它在handle2使用了热加载,但是由于fuzztag会预先进行渲染,渲染的时候会发送一次验证码API,导致验证码刷新,从而使得后续识别到的验证码与session绑定的验证码不一致。但是牛牛的热加载功能,却能轻松拿下验证码的识别与爆破。
2024-11-11 15:19:35
738
原创 Yaklang里传来,Java-hack升级啦~
通过Instrumentation对象可以设置一些类加载的过程,例如案例中addTransformer,追加了一个ClassLoggerTransformer对象,ClassLoggerTransformer对象实现了transform方法,在加载一个类前会把类信息传给transform方法,返回值是经过处理后的类,用于替换原有类。为了去掉实现AbstractTranslet接口的限制,又不影响payload大小,可以尝试直接改类的属性,修改class文件,给class增加一个父接口而不实现接口。
2024-10-28 10:57:28
504
原创 不敢想象学会Syntax-flow的人能有多快乐
在syntax-flow zero to hero中,已经介绍了一部分syntax-flow 语法的编写规则以及关于基础的一些使用,比如#->、#>、–>等,当然,在之前的公众号中也介绍了一部分config的使用。g4部分片段如下,在syntax-flow中,支持以多种方式来进行开头,其中,可以指定.开头,指定变量名开头,指定nativeCall开头,支持常量搜索。在之前的syntax-flow中,学习到了#->是来进行搜索顶级定义的。
2024-10-18 11:41:16
933
原创 超级牛哭诉常年被认错,Yaklang和Yakit有哪些区别
天命人们大家好黑猴大家都通关了吗这里是一觉睡醒要再上30+年班的超级马喽牛先提前祝大家经常有小伙伴问“Yakit怎么报错了?“YAK和Yakit有什么区别?牛牛委屈无能狂怒(标题致歉,封面致歉,ooc致歉今天的文章,就来为大家集中解答一波Yaklang是一种。其目标在于解决安全产品整合过程中所面临的技术挑战,例如不同产品之间的互操作性问题以及安全工具开发过程中的效率和一致性问题。作为一门编程语言,Yaklang能够。
2024-09-18 10:48:08
979
原创 天命所归,SyntaxFlow助大圣取得真经
SyntaxFlow代码查询需要先进行项目编译。在前端的YakRunner界面,主界面或选项栏可以直接点击“编译项目”功能。可见图中红色方框圈起的选项编译项目的选项如下:必选项为项目名、语言和项目路径。其他额外信息、数据库路径、项目入口文件等都非必填。当在YakRunner中打开一个项目以后,可以使用快捷方式直接编译当前打开的项目。此时将会自动填充路径和项目名等信息。需要用户手动选择语言。在最近编译项目中,可以快速打开已编译项目。选择查看全部将会打开已编译项目列表。
2024-09-09 16:46:26
1126
原创 解锁SyntaxFlow,效率飙升,下班畅玩《黑神话:悟空》无压力!
until:数据流从下往上找的过程中,碰到每一个节点都会运行新的SyntaxFlow,并使用配置项规则判断这些node是否为常量,并将沿途经过的所有node加进去$result,直到碰到为常量的node的时候停止。但是我们使用配置项语法的话,数据流在经过每个节点的时候,将会使用其配置的SyntaxFlow Rule对每个节点再次进行判断(简单来说就是碰到一个新的节点的时候,就会再运行一次SyntaxFlow,即对每个节点都进行一次hook)。举个很简单的例子,比如我们在进行污点分析的时候,我们可能会会从。
2024-08-26 16:53:07
697
原创 吹爆SyntaxFlow!数据流分析实战解析
样例解析在之前的SyntaxFlow教程中,我们已经看到了非常多的代码样例进行数据流分析,这里选用其中一个:可以看到在代码中,Runtime.getRuntime().exec的参数为simpleBean.getCmd, 而此前也存在simple.setCmd和simple.setCmd2, 通过CmdObject的声明可以知道,getCmd将会拿到this.cmd1,setCmd将会设置this.cmd1,因此exec的参数应该是aTaintCase022的参数cmd。
2024-08-21 14:18:06
966
原创 来了,秋天的第一个POC
在 Yakit 中,我们最常用发送 HTTP 数据包的工具非 web fuzzer 莫属了,实际上,web fuzzer的发包能力底层也是通过 Yaklang 中的 poc 库来实现的,因此,我们可以使用 Yaklang 中的 poc 库来实现大部分发送 HTTP 数据包的功能。以下列出一些常见漏洞的 POC 编写模版。举个例子,反序列化漏洞可能利用过程比较复杂,但是实际上造成的危害通常都是上述一些漏洞造成的危害,如命令执行,文件读取,服务端请求伪造等,也可以通过上面的依据来无害化判断漏洞是否存在。
2024-08-13 11:52:51
1177
原创 CLI参数助力MITM插件升级,起飞!
之前在社区中有师傅提到需要测试越权的插件,需要配置低权限账户的cookie,但是每次都去修改插件的源码略显繁琐。这是一个非常简单的越权检测插件,可以通过 cli 参数动态设置一个低权限的cookie ,在mitm hook中替换掉高权限的cookie,再发送一个数据包,比较两次数据包的,检查是否有权限问题。但是这样简单的检测逻辑是不够在实战中使用的,很多页面是本身就不需要鉴权的,无论使用什么身份访问都是返回相同的响应,这样会出现大量的误报情况,所以可以再丰富一下插件的逻辑,来减少误报的可能性。
2024-08-06 11:24:23
376
原创 Yak Runner 新版本,City不City?
新建文件允许你快速的打开一个临时文件,以便你快速开发一个小脚本或者是使用某些你急需使用到的函数(你知道的,Yaklang中有许多令人喜欢便捷的适用于安全领域的库);最后,与旧版Yak Runner有很大不同的是,在新版Yak Runner左侧边栏中,现在提供了一个新选项:帮助文档。现在的文件树中,允许你右击文件,提供了更多的选项以供你选择,如复制文件路径、复制文件相对路径。当然,除了帮助文档以外,你在编辑代码的过程中,也可以使用相应的函数使用提醒,帮助你更好地了解怎么使用该函数。文件树的交互性也迎来提升。
2024-07-29 11:45:07
500
原创 MITM使用技巧
内置规则 主要是在被动扫描部分,从mitm经过的请求包/返回包会在这部分进行规则匹配,在渗透测试过程中,我们会常常发现有信息泄漏、框架指纹、密钥、配置信息泄漏等,他们都在返回包的不同位置进行展示,我们可以编写规则来进行检测。yak-mitm在多个场景中有不同的应用,热加载模式是可以直接对request和response进行劫持和hook,可以和ssa进行很好的融合。是一个非常方便的功能。上面介绍了这么多的流量镜像函数和流量劫持函数,在热加载的时候到底如何正确的使用,将通过下面的几个常见场景来进行介绍。
2024-07-22 17:16:07
483
原创 Yak与nuclei的深度融合:打造高效漏扫生态,解锁PoC管理新姿势
Yak集成nuclei,并非只是将该工具生硬地放了进来,而是在更高层面做了有机的融合,打通了nuclei的生态与Yak的生态的壁垒,体现了Yak安全能力融合的思想。比方说,在第一次渗透测试出结果的时候,可以使用Web Fuzzer将HTTP数据包转化为Yaml格式的PoC,并通过插件系统,将本次PoC添加成一组,而在下次复测的时候,即可使用批量执行的功能,并在漏洞数据库中查看复测的结果。选择想要成组的PoC,然后点击添加到组,并在搜索栏中写入你想要分组的名称,如果该组不存在,下方将会有一个新增分组的选项。
2024-07-16 11:03:07
1480
原创 实战分享:用Yak-yso解决一些常见问题
有同学常常使用yak-yso生成的时候,不关注java版本而使用了默认的(默认52也就是JDK1.8),会导致有些情况下,某些链子打不通的情况。(原因是:当版本进行升级的时候,有些内置函数、方法、接口都会做出改变)yak-yso中内置了两种模式的和。yak中的反连平台webFuzzer下面就用一个小的靶场demo来进行简单说明。
2024-07-09 16:51:01
1103
原创 RDP协议探索
X.224协议的格式定义中,允许一个Variable part和一个User Data,但Data field的长度为固定的8位,而在文档定义中长度指示器的范围是到Variable part,也就是微软的rdp请求中的X.224协议是缺少了一个Data field的。它也被称为ISO 8073协议,是一个会话层协议,可以用于链接的建立,管理、数据交换、心跳检测等等,下面是一个X.224报文的结构,其中第一个结构LI指Length Indicator,就是报文长度,占一个字节。如下是所有的认证方式。
2024-07-02 11:05:50
709
原创 SyntaxFlow Zero to Hero: 跨函数与跨对象代码审计(一)
从上面的这个案例来思考分析跨过程分析的意义,如果说我们可以洞悉 crossFunction,那么得出的结论是:“这命令执行的点不可控”,如果我们不知道 crossFunction 的实现,则得到的结论是“cmd”参数会影响 exec,这是一个命令执行漏洞点。中,我们介绍了基本 SyntaxFlow 可以解决的问题,虽然我们屏蔽了大量的技术细节,但是很多读者并不只局限在“介绍”中,提出了很多比较经典的教科书中的问题。我们用一个简单的 MVP 来说明跨过程分析的最核心的用途,大家一看便知。
2024-06-24 16:55:39
476
原创 一种全新的代码审计技术:SyntaxFlow
我们构建一个.getRumtime().exec(* as $params)的语句,在执行之前,人可以解读出来,审计所有对象包含一个getRuntime的成员,获取他的调用指令,在寻找他的调用结果中包含 exec 的成员,再调用 exec 成员,获取 exec 这个函数中所有的参数,把这个参数保存在$params中,我们不执行的时候,人脑观察一下,发现这个参数其实是 cmd,cmd 的最顶级的定义是在函数中的。我们去除特别明显的只通过正则就可以匹配到的特征,新增了一些变量传递的过程,那么我们还能生效吗?
2024-06-24 16:54:58
1222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人