Yakit是一个功能强大、易于使用的安全测试平台,适用于各种网络安全测试和漏洞检测场景。本文就Yakit中的Web Fuzzer模块中的数据提取器功能进行学习研究,研究的环境是Yakit自带的靶场环境。
数据提取器
“人”如其名,数据提取器的功能就是将响应包中的某些数据提取出来。
数据提取范围分类:响应头、响应体、raw(响应体+响应头)
提取方式:
- 正则表达式:正则表达式就是在提取位置中提取输入的正则表达式匹配到的内容。我们知道在正则表达式中可以使用小括号来分组,这时候我们可以在匹配正则分组中选择分组,这样就可以提取到想要的内容了。(在正则表达式中,0分组即为正则表达式匹配到的所有内容)
- XPath:(提取范围只能是响应体)XPath就是在提取位置中提取输入的XPath匹配到的内容。XPath是一种用于在XML文档中选择节点的语言,我们也可以很轻易地使用浏览器开发工具来复制完整的Xpath。
- 键值对:键值对的提取规则稍微有点复杂。键值对会尝试提取所有可能存在的json的key对应的value,以及所有形似
key=value
中value的值。如果提取位置包含响应头(提取范围为响应头或Raw),则他还会尝试提取响应头中的value值。另外还有两个特殊的键值对,分别为proto
,status_code
,分别对应响应的HTTP协议版本和响应状态码。- JQ(*):(提取范围只能是响应体)jq是一种用于在JSON文档中选择节点的工具,其对应的文档教程在此。
- 表达式:(忽略匹配位置)表达式与匹配器中的表达式相同,这里不再赘述。
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。