bash - Bash grep, awk o sed 反向查找
问题描述
我正在创建一个脚本来查找密码中的常用模式。虽然我在托管面板中有安全策略,但由于不兼容,服务器已经过时。
test
例如,在文件 words.txt 中,当我执行时,我把 word 放在那里grep -c test123 words.txt
。当我寻找该模式时,我需要它来找到它,但我认为使用该命令grep
它对我不起作用。
脚本:
EMAILPASS=`/root/info.sh -c usera | grep @`
for PAR in ${EMAILPASS} ; do
EMAIL=$(echo "${PAR}" | grep @ | cut -f1 -d:)
PASS=$(echo "${PAR}" | cut -d: -f 2)
PASS="${PASS,,}"
FINDSTRING=$(grep -ic "${PASS}" /root/words.txt)
echo -e ""
echo -e "Validating password ${EMAIL}"
echo -e ""
if [ $FINDSTRING -ge 1 ] ; then
echo "Insecre"
else
echo "Secure"
fi
该命令的当前输出如下
# grep -c test123 /root/words.txt
0
我认为 grep 不适合我需要的东西,也许有人可以帮助我。
我也可以使用 awk 或 sed 但我找不到帮助我的选项。
问候
解决方案
反转您的申请。
echo test123 | grep -f words.txt
文本文件的每一行都将用作测试输入的模式。
编辑
显然,您实际上确实想查看整个密码是否是一个实际单词,而不仅仅是检查它是否基于字典单词。这是相当不安全的,但很容易做到。test123
除非整个密码与字典中的单词完全匹配,否则您拥有的逻辑不会报告为不安全。
您说您正在test
输入字典并test123
用作密码,所以我假设您正在根据字典单词查找密码,这是我上面建议的结构。将包括如下注释的备用行。
此外,既然您正在进行不区分大小写的搜索,为什么还要费心将密码小写?
declare -l pass # set as always lowecase
会这样做,但没有必要。
同样,除非您稍后再次使用它,否则没有必要先将所有内容放入变量中,例如grep
结果。尝试删除任何不需要的东西——少即是多。
最后,由于我们没有grep
在变量中捕获输出并对其进行测试,因此我将其与-q
. 我们只需要看看它是否找到了任何东西,并且由 . 检查的返回码if
告诉我们这一点。
/root/info.sh -c usera | grep @ | # only lines with at signs
while IFS="$IFS:" read email pass # parse on read with IFS
do printf "\n%s\n\n" "Validating password for '$email'"
if grep -qi "$pass" /root/words.txt # exact search (-q = quiet)
#if grep -qif /root/words.txt <<< "$pass" # 'based on' search
then echo "Insecure"
else echo "Secure" # well....
fi
done
我认为更好的范例可能是只报告有问题的,而对那些看起来不错的保持沉默,但这取决于你。
问题?
推荐阅读
- python - 随机森林回归 MAE
- angular - 我有角度的类模型有变量和函数,所以当我调用函数时它给了我错误
- ruby-on-rails - Heroku 服务器上的数据库中似乎不存在类别和子类别
- python - 有没有办法从 PyPI 访问搜索结果而无需抓取?
- android - 从 webview 加载的在线页面超链接到应用程序的本地 html 页面
- python - 如何使用pyglet创建免费游戏碰撞?
- html - div 在所有桌面上的位置不一致
- android - 如何使用 Coroutines 在 Kotlin 中正确初始化 Recyclerview?
- django - Django Rest Framework - 删除问题 - 找不到 CSRF
- api - 有没有办法使用 Google Sheets API v4 获取可用的货币格式?