我的输出看起来像
________________________________________________
:: Method : GET
:: URL : HOST/FUZZ
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 500
:: Matcher : Response status: 200
________________________________________________
[Status: 200, Size: 52, Words: 2, Lines: 6]
* FUZZ: index.jsp
* HOST: https://test.com
我想从这个输出中得到的只是将它们联系在一起的两件事
预期产出
https://test.com/index.jsp
我已经尝试过的是
awk '/HOST:/{ print $4} /FUZZ:/{ print $4}' ffuf'
输出
index.jsp
https://test.com
十六进制转储输出
grep 'FUZZ:' ffuf | hexdump -C
输出
00000000 0d 0d 20 20 20 20 2a 20 46 55 5a 5a 3a 20 69 6e |.. * FUZZ: in|
00000010 64 65 78 2e 6a 73 70 0a |dex.jsp.|
00000018
知道如何联系他们吗?
谢谢
答案1
从hexdump
您显示的输出中可以清楚地看出,包含您要查找的数据的行的开头有两个回车符。如果您使用 解析数据,这些将构成这些行上的第一个字段awk
。下面的两种变体 (sed
和) 都通过忽略 ( ) 或避免 ( ) 这些awk
来解决此问题。sed
awk
使用sed
, 并假设 with 行FUZZ:
始终出现在 with 行之前HOST:
:
$ sed -n '/.*FUZZ: /{ s///; h; }; /.*HOST: /{ s///; G; s,\n,/,p; }' file
https://test.com/index.jsp
该sed
命令(在使用 关闭每行的默认输出的情况下运行-n
)匹配该FUZZ:
行并删除该行上直到文件名的所有内容。然后将文件名复制到保留空间h
。
当该HOST:
行匹配时,同样会删除该行的开头,并将保留空间的内容附加到 URL(该HOST:
行的其余部分)。然后,命令插入的换行符G
将更改为斜杠,并打印结果字符串。
使用awk
, 与上面相同的假设:
$ awk -v OFS='/' '/FUZZ:/ { fuzz = $NF } /HOST:/ { print $NF, fuzz }' file
https://test.com/index.jsp
在这里,变量fuzz
扮演了我们在上面的变体中使用的保存空间的角色sed
,即保存文件名。$NF
是一行中最后一个字段的数据。
答案2
我通过这样做实现了这一点
awk '/FUZZ:/{ FUZZ=$4; next } /HOST:/{ print $4 "/" FUZZ }'
输出
https://test.com/index.jsp