以前要在 Yakit 里发出真实的空字节,通常得用 URL 解码类的 Fuzztag 间接构造,比如:
filename=\"shell.php{{urldec(%00)}}.jpg\" // 或者{{null()}}
{{urldec(%00)}} 渲染后才会变成真正的 0x00 字节。但这种方式有几个问题:
- 要记住
urldec、urldecode 这类 Fuzztag 的写法;
- 多个特殊字节混在一起时,可读性很差;
- 没法直观确认最终发出去的字节到底是不是
0x00;
- 如果还要换行符、图片魔数之类,得组合一堆标签,越写越乱。
最近 Yakit 新分支在 Web Fuzzer 里加了一个 Edit Binary 功能,把这件事直接集成到了编辑器里。这篇文章介绍一下它怎么用,以及为什么上传包改包会因此变简单。
一、Edit Binary 是什么?
当 MITM 数据包中存在二进制流时, MITM 数据包的 body 会变成含有 {{unquote(...)}} 包裹的数据包,而 Edit Binary 就是针对 {{unquote(...)}}、{{hexdecode(...)}}、{{base64decode(...)}} 这类二进制 Fuzztag 的可视化编辑器。
当你在数据包里存在,或者写了这样的标签:
{{unquote(\"shell.php\x00.jpg\")}}
Yakit 会把它渲染成一个小卡片:
Binary[0x736865..13B] Click to modify
}}</p>
<div class=)
它不会被折叠成 Binary 卡片,因为源码里的正则只匹配 \"``...\"(binaryFuzztag.ts:153)。
正确写法:
{{unquote(\"shell.php\x00.jpg\")}}
YAK
2.2 没有长度门槛
unquote / hexdecode / base64decode 是可编辑标签,源码里没有对它们设置长度门槛,无论内容多短都会折叠成卡片。
{{unquote(\"\x00\")}} ← 1 个字节,也会折叠成 Binary 卡片{{hexdecode(00)}} ← 1 个字节,也会折叠成 HexString 卡片{{base64decode(AA==)}} ← 1 个字节,也会折叠成 Base64 卡片
注意语法区别:
unquote 的参数是带双引号的字符串:{{unquote(\"\\x00\")}}
hexdecode / base64decode 的参数不需要引号:{{hexdecode(00)}}、{{base64decode(AA==)}}
三、Edit Binary 界面长什么样?
弹窗主要分为三块:
|
|
| 区域 |
内容 |
| 顶部 |
标签信息:Tag: {{unquote(...)}}、Bytes: 13、Head: 0x7368... |
| 中间 |
Hex 编辑器,十六进制 + ASCII 双栏展示 |
| 底部 |
工具栏:插入 / 替换 模式、HEX / ASCII 输入、输入框、应用 按钮 |

步骤
1.在 Web Fuzzer 的数据包里写:
Content-Disposition: form-data; name=\"filename\"; filename=\"{{unquote(\"shell.php.jpg\")}}\"
2.点击折叠出来的 Binary[...] 卡片。
3.弹窗里看到 13 个字节,Head: 0x7368...。
4.选中要截断的位置,用 HEX 输入框写 00,点击应用;
- 或者用鼠标选中某个字节,切换到
替换 模式,用 00 覆盖它。
5.点击 提交,标签自动更新。

步骤
假设你一开始只写了普通文件名:
Content-Disposition: form-data; name=\"filename\"; filename=\"{{unquote(\"shell.php.jpg\")}}\"
1.点击 Binary 卡片,打开 Edit Binary。
2.在 Hex 视图里点击 shell.php 末尾那个字节,定位插入点。
3.切换到 插入 模式。
4.输入方式选 HEX,输入框里写:
0a
5.点击 应用,真实的换行字节就插入到了 shell.php 和 .jpg 之间。
6.点击 提交,标签自动更新为 {{unquote(\"shell.php\\x0a.jpg\")}}。
这样你就拼接出了一个包含真实 0x0a 字节的文件名,不需要离开 Yakit。
你也可以反过来:先写 {{unquote(\"shell.php\\x0a.jpg\")}},然后打开 Edit Binary 检查中间那个字节是不是真的是 0x0a,必要时再调整。
七、HEX 和 ASCII 到底什么时候用?
|
|
|
| 场景 |
推荐输入方式 |
例子 |
写入 \\x00、\\x0a、\\xff 等不可见字节 |
HEX |
00、0a、ff(不要 0x 前缀) |
| 写入文件名、脚本字符串等可见文本 |
ASCII |
shell.php、<?php ... ?> |
| 写入图片/文件魔数 |
HEX 或 ASCII |
FFD8FF 或 GIF89a |
| 覆盖已有的一段字节 |
替换模式 + 先选中目标 + HEX/ASCII |
把选中的字节改成 00 |
| 在指定位置前插入内容 |
插入模式 + 点击定位 + HEX/ASCII |
在 shell.php 后插入 00 |
| 在末尾追加内容 |
插入模式 + 不选中任何字节 + HEX/ASCII |
追加 .jpg |
八、对比传统方式的优势
以前做这件事,流程是:

省去了记 Fuzztag 语法、反复发包验证这两步,出错概率低很多。
九、总结
Edit Binary 这次解决的核心问题是:
让 Web Fuzzer 里的不可见字节变得「看得见、改得了」。
对于经常要碰上传包的人来说,NullByte 截断、换行解析这些场景会顺手很多。
几个关键记忆点:
1.unquote 标签要用双引号;hexdecode / base64decode不要引号;
2.unquote / hexdecode / base64decode无论多短都会折叠;
3.折叠需要 foldBinaryFuzztag={true} + type=\"http\";
4.不可见字节用 HEX 输入,可见文本用 ASCII 输入;
5.HEX 输入不要0x前缀,长度必须是偶数;
6.默认是替换模式,想覆盖字节要先选中;插入模式要先点击定位,否则插到末尾。
演示视频
END
更新记录
Yakit v1.4.7-0618
-
YakRunner上线侧边栏AI
-
MITM和Webfuzzer可编辑上传文件不可见字符
-
热加载模板支持分组归类
-
History右键菜单支持查看附近数据包
-
插件检测新增复制报错功能
-
导出插件支持自定义导出路径
-
端口扫描新增系统保护配置项
-
隐藏MITM系统tag展示
-
修复模型检测暗色模式bug
-
修复数据对比模块异常问题
Memfit AI v1.0.2-0618
-
优化任务规划数据展示
-
任务详情增加统计数据,可手动加载技能、工具、插件等,且自由对话任务也可查看任务详情
IRify v1.2.3-0618
-
优化首页展示,增加数据统计
-
优化项目管理编译历史展示
Yaklang 1.4.7-beta10
Yakit:
-
修复了POC函数示例错误
-
yak runner中补充AI输入框
Memfit:
-
支持强制人工评审,执行流程重构
-
计划可脱离主会话独立评审与恢复执行
-
支持追问能力
-
统一会话快照事件,包含执行统计、yaklang.File 写入计数等
IRify:
-
修复 DeleteSSAProgram 未指定 program name 时会误删全部 risk 的问题
-
嵌套压缩包解析:增强 ExpandedZipFS 递归解析
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


评论