工具学习--Yakit--Web Fuzzer学习

Yakit是一个功能强大、易于使用的安全测试平台,适用于各种网络安全测试和漏洞检测场景。本文就Yakit中的Web Fuzzer模块中的数据提取器功能进行学习研究,研究的环境是Yakit自带的靶场环境。

数据提取器

“人”如其名,数据提取器的功能就是将响应包中的某些数据提取出来。

数据提取范围分类:响应头、响应体、raw(响应体+响应头)

 提取方式:

  1. 正则表达式:正则表达式就是在提取位置中提取输入的正则表达式匹配到的内容。我们知道在正则表达式中可以使用小括号来分组,这时候我们可以在匹配正则分组中选择分组,这样就可以提取到想要的内容了。(在正则表达式中,0分组即为正则表达式匹配到的所有内容)
  2. XPath:(提取范围只能是响应体)XPath就是在提取位置中提取输入的XPath匹配到的内容。XPath是一种用于在XML文档中选择节点的语言,我们也可以很轻易地使用浏览器开发工具来复制完整的Xpath。
  3. 键值对:键值对的提取规则稍微有点复杂。键值对会尝试提取所有可能存在的json的key对应的value,以及所有形似key=value中value的值。如果提取位置包含响应头(提取范围为响应头Raw),则他还会尝试提取响应头中的value值。另外还有两个特殊的键值对,分别为protostatus_code,分别对应响应的HTTP协议版本和响应状态码。
  4. JQ(*):(提取范围只能是响应体)jq是一种用于在JSON文档中选择节点的工具,其对应的文档教程在此
  5. 表达式:(忽略匹配位置)表达式与匹配器中的表达式相同,这里不再赘述。 
1、正则表达式

通过正则表达式提取响应体中的PEM格式的RSA公钥数据。

匹配规则:

-----BEGIN PUBLIC KEY-----[A-Za-z0-9+/=\s]+-----END PUBLIC KEY-----

调试结果:

2、XPath

2.1匹配标签值

XPath提取响应体中的html中body部分的超链接标签数据--Vulinbox - Agent

逐级输入HTML的标签信息,以上述情况为例,Vulinbox - Agent所在的位置是html文件的body部分的header部分的nar区域的div块的超链接a处。

匹配规则:

/html/body/header/nav/div/a

调试结果

若在一个标签下存在两个相同的标签,则提取某个数据时可以使用标签名称[标签号]来区分。

以div块下两个超链接a为例:

1、提取div下的第一个a值:

/div/a[1]

2、提取div下的第二份a值:

/div/a[2]

3、提取div下的全部a值:

/div/a

 2.2 匹配html标签属性

以2.1中值的超链接路径信息为例,提取Vulinbox - Agent的超链接属性/static

相较于2.1中的匹配规则,在XPath参数中添加需要匹配到的标签名称href

3 、键值对

通过键值对提取响应体中的所有username数据。

匹配规则:

username 

4、JQ(*) 

通过JQ(*)提取JSON格式中的publickey参数值

 注:JQ(*)方式只适合于JSON格式匹配

匹配规则:

.publicKey

JQ(*)的匹配方式是逐级使用‘.’+参数名称的形式,包含特殊符号或者以数字开头的参数名称需要使用“[]”包裹。详情查看JQ(*)使用文档

以下面JSON数据为例:

{

"data":"{

        "username":"admin"

        "password":"123"

        }",

"ita":"1111111"

}

提取password的值:

.data.["password"]

5、表达式

通过表达式匹配响应包中是否存在username参数。(表达式的语法与nuclei-dsl语法兼容,熟悉nuclei工具的师傅可以尝试在表达式中编写一些复杂的匹配规则)。

匹配规则:

contains(body,"username") 

 因为响应包中存在username字符串,所以提取的结果是true。反之,若匹配的字符串不存在则返回false

<think>好的,用户的问题是关于在Yakit中正确插入时间戳的方法和示例教程。首先,我需要回忆Yakit的相关功能。Yakit主要用于安全测试,经常需要处理HTTP请求,时间戳在Web请求中常用于防止缓存或签名参数。用户可能需要的是在请求中动态生成时间戳。 接下来,我需要确认Yakit中插入时间戳的具体方法。通常,这类工具会提供变量或函数来生成动态值,比如`{{timestamp}}`或者使用JavaScript脚本。可能需要检查Yakit的文档或常见用法,比如在请求参数中使用`${YAKIT_TIMESTAMP}`这样的内置变量。但要注意不同版本可能有差异,需要确认正确语法。 另外,用户可能需要示例,比如在GET或POST请求中如何插入时间戳。例如,在URL参数或JSON请求体中。这时候要分情况说明,并提供具体的代码示例,比如在GET请求的URL中添加`t=${YAKIT_TIMESTAMP}`,或者在POST的JSON中使用`"timestamp": "${YAKIT_TIMESTAMP}"`。 还要考虑用户是否需要更复杂的格式化,比如毫秒级时间戳或者特定格式的日期时间。可能需要使用脚本处理,比如用`{{new Date().getTime()}}`来生成精确到毫秒的时间戳。这时候需要指导用户如何在Yakit的预处理或后处理脚本中插入这样的代码。 另外,注意提醒用户时间戳的单位,有些系统可能需要秒级,有些则需要毫秒级,避免错误。同时,可能涉及到签名的情况,需要时间戳和其他参数一起加密,这时候正确插入时间戳的位置和格式尤为重要。 最后,确保回答结构清晰,分步骤说明,并给出实际示例,让用户能够直接复制使用。同时,检查是否有相关的引用或官方文档支持,确保信息的准确性。</think>在Yakit中插入时间戳主要用于HTTP请求参数动态替换,以下是具体实现方法: ### 一、基础时间戳插入 1. **使用内置变量**: 在请求参数中直接使用`${YAKIT_TIMESTAMP}`,该变量会自动替换为10位秒级时间戳 ```http GET /api/data?t=${YAKIT_TIMESTAMP} HTTP/1.1 ``` 2. **毫秒级时间戳**: 通过JavaScript表达式生成13位时间戳 ```http POST /submit HTTP/1.1 Content-Type: application/json {"timestamp": "{{new Date().getTime()}}"} ``` ### 二、高级格式化时间 使用`strftime`语法生成特定格式的时间: ```http POST /log HTTP/1.1 Content-Type: application/x-www-form-urlencoded time=${YAKIT_TIMESTAMP(YYYY-MM-DD HH:mm:ss)} ``` ### 三、签名场景应用 在HMAC签名计算中动态插入时间戳: ```javascript // 在请求预处理脚本中 timestamp = Math.floor(Date.now()/1000) params.t = timestamp params.sign = md5(secret + timestamp) ``` ### 四、调试技巧 1. 在Web Fuzzer中开启`显示实际值`查看替换结果 2. 使用`Ctrl+Space`触发变量提示列表 3. 对于需要重复使用的格式,可在`yak.config.json`中配置全局变量 > 注意:时间戳单位需与目标系统要求保持一致,Web应用通常使用秒级,而移动端API可能要求毫秒级[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春天里面的龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值