yaklang 提供了丰富的 fuzztag 标签系统,用于在模糊测试中生成各种类型的测试数据。以下是常见的 fuzztag 标签分类和详细说明。
更多资料可参考官方文档:
https://www.yaklang.com/products/manual/expert-mode/Web%20Fuzzer/Fuzz-case/
https://yaklang.com/docs/newforyak/fuzztag/
https://www.yaklang.com/products/expert-mode/Web%20Fuzzer/Fuzz-tags/
数字生成类标签
int 标签
int
标签是最基础的数字生成标签,支持多种语法:
{{int(1-100)}}
- 生成 1 到 100 的整数{{int(0-9999|4)}}
- 生成 0000-9999 的四位数字{{int(1,2,3,4,5)}}
- 生成指定的整数列表{{int(1-10|4|2)}}
- 生成 1-10 范围,填充为 4 位,步长为 2
别名:port
、ports
、integer
、i
字符生成类标签
char 标签
char
标签用于生成字符范围:
{{char(a-z)}}
- 生成小写字母 a 到 z{{char(A-Z)}}
- 生成大写字母 A 到 Z{{char(0-9)}}
- 生成数字字符 0 到 9
别名:c
、ch
编码解码类标签
Base64 编码标签
{{base64enc(abc)}}
- 进行 base64 编码,结果为 YWJj- 别名:
base64encode
、base64e
、base64
、b64
URL 编码标签
{{urlescape(abc=)}}
- URL 编码特殊字符,结果为 abc%3d{{urlenc(abc)}}
- URL 强制编码,结果为 %61%62%63{{urldec(%61%62%63)}}
- URL 解码,结果为 abc
双重 URL 编码
{{doubleurlenc(abc)}}
- 双重 URL 编码,结果为 %2561%2562%2563{{doubleurldec(%2561%2562%2563)}}
- 双重 URL 解码
HTML 编码
{{htmlenc(abc)}}
- HTML 实体编码{{htmldec(abc)}}
- HTML 实体解码
Unicode 编码
{{unicode:encode(abc)}}
- Unicode 编码{{unicode:decode(abc)}}
- Unicode 解码- 别名:
unicode
、unicode:enc
、unicode:dec
压缩编码类标签
Gzip 压缩
{{gzip:encode(abc)}}
- Gzip 压缩编码{{gzip:decode(data)}}
- Gzip 解压解码- 别名:
gzip:enc
、gzipc
、gzip
、gzip:dec
、gzipdec
、gzipd
Zlib 压缩
{{zlib:encode(abc)}}
- Zlib 压缩编码{{zlib:decode(data)}}
- Zlib 解压解码- 别名:
zlib:enc
、zlibc
、zlib
、zlib:dec
、zlibdec
、zlibd
字符串处理类标签
大小写转换
{{lower(Abc)}}
- 转换为小写,结果为 abc{{upper(abc)}}
- 转换为大写,结果为 ABC
随机大小写
{{randomupper(abc)}}
- 随机大小写,如 aBc- 别名:
random:upper
、random:lower
字符串重复
{{repeatstr(abc|3)}}
- 重复字符串 3 次,结果为 abcabcabc- 别名:
repeat:str
字符串截取
{{substr(abcdef|2)}}
- 从位置 2 开始截取{{substr(abcdef|2,3)}}
- 从位置 2 开始截取 3 个字符
去除空格和引号
{{trim( abc )}}
- 去除两边空格{{unquote("abc")}}
- 去除引号{{quote(abc)}}
- 添加引号
数组和列表类标签
数组生成
{{array(1,2,3)}}
- 生成数组 [1,2,3]{{array:auto(a,b,c)}}
- 自动分割生成数组- 别名:
list
、list:auto
模糊测试专用标签
用户名模糊测试
{{fuzz:username(admin)}}
- 根据给定用户名生成更多测试用户名{{fuzz:username(admin|2)}}
- 指定模糊等级为 2- 别名:
fuzz:user
密码模糊测试
{{fuzz:password(password)}}
- 根据给定密码生成更多测试密码{{fuzz:password(password|3)}}
- 指定模糊等级为 3- 别名:
fuzz:pass
文件操作类标签
文件读取
{{file(/tmp/1.txt)}}
- 读取文件内容{{file(/tmp/1.txt|/tmp/2.txt)}}
- 读取多个文件内容
按行读取文件
{{file:line(/tmp/test.txt)}}
- 按行读取文件内容- 别名:
fileline
、file:lines
文件夹读取
{{file:dir(/tmp/test)}}
- 读取文件夹中所有文件内容- 别名:
filedir
插件调用类标签
Codec 插件调用
{{codec(name|params)}}
- 调用 Yakit Codec 插件{{codec:line(name|params)}}
- 调用插件并按行解析结果
安全测试类标签
Java 序列化攻击载荷
{{yso:exec(whoami)}}
- 生成 Java 反序列化命令执行载荷
JsonPath 操作
{{jsonpath({"key":"value"}|$.key)}}
- 通过 JsonPath 查找值{{jsonpath({"key":"value"}|$.key|newvalue)}}
- 通过 JsonPath 替换值
随机生成类标签
随机字符串生成
根据代码中的模式,yaklang 还支持随机字符串生成:
{{randstr(10)}}
- 生成长度为 10 的随机字符串{{randstr(1,30)}}
- 生成长度为 1-30 的随机字符串{{randstr(1,30,10)}}
- 生成 10 个长度为 1-30 的随机字符串
时间日期类标签
yaklang 还提供了丰富的时间日期相关的 fuzztag,用于生成各种时间格式的测试数据。
使用建议
- 组合使用:可以将多个 fuzztag 组合使用,如
{{base64enc({{int(1-100)}})}}
- 参数分隔:使用
|
分隔参数,使用,
分隔列表项 - 别名使用:大多数标签都有简短的别名,可以提高编写效率
- 上下文相关:在 HTTP 请求中使用时,注意编码格式的兼容性
总结
这些 fuzztag 标签构成了 yaklang 强大的模糊测试能力。每个标签都经过精心设计,支持多种参数组合,能够满足各种安全测试场景的需求。通过合理使用这些 fuzztag,您可以快速生成大量有针对性的测试数据,提高安全测试的效率和覆盖率。