grep -n [pattern] [file]
应该返回我的文件的行号和输出。
然而,grep -n [my pw] /usr/share/wordlists/weakpass_3
只是返回
grep: /usr/share/wordlists/weakpass_3: binary file matches
文件存在并且用户可读,密码也在单词列表中。
file /usr/share/wordlists/weakpass_3
回报
/usr/share/wordlists/weakpass_3: data
如何让 grep 输出文件行的行号?
答案1
您的grep
(可能是 GNU grep
)检测到该文件可能不是文本,并且不会打印匹配的行,它只会告诉您有一个匹配项,以避免打印可能只是垃圾的内容。
要绕过它并打印它,您可以添加该-a
选项(GNU 扩展)。
另请注意,grep
默认情况下匹配正则表达式(re
in grep
),您需要-F
查找子字符串。
此外,执行命令的参数是系统上的公共知识,因此您不应将密码或任何敏感数据传递给grep
参数,除非grep
它们恰好是 shell 的内置参数(grep
尽管很少有 shell 具有内置功能)。
因此,假设printf
有一个内置的 shell(现在大多数情况下):
printf '%s\n' "$password" | grep -anFf - /usr/share/wordlists/weakpass_3
在哪里:
-a
:绕过二进制文件的启发式检查-F
:F
固定字符串搜索而不是正则表达式匹配-f -
:从标准输入中获取要搜索的字符串列表(每行一个)-n
:报告行号