0

我有一个名为 ./testpassword 的二进制文件,语法如下

./testpassword pass PASSWORD_GOES_HERE

如果密码正确,输出将是

pass=correct

如果不正确的输出如下

pass=incorrect

我是 linux 和脚本的新手,但在这里的成员的帮助下,制作了一个示例 shell 脚本,如下所示

    cat passwords.txt | while read x ; do echo -n "$x: " && ./testpassword pass $x ;
done

其中密码是 txt 格式的单词表。

这很好用,如果我密切关注终端,我可以看到如下输出(继续单词列表中的每一行)

jordyt: pass=incorrect
dawder: pass=incorrect
LOL12345: pass=incorrect
warcraft: pass=incorrect
solidussnake: pass=incorrect
0005: pass=correct

所以在这种情况下,我知道 0005 是我的密码,我的问题是,是否可以在找到密码时停止程序,或者在某处自动显示密码?如果我要离开屏幕,我会忘记密码是什么,因为屏幕将继续尝试输入密码并向下滚动

我以前做的方式就像这个Shell script password bruteforcing。它起作用了,因为我可以走开,稍后再回来,看到密码已被破解,然后 ctrl+c 程序,除了它有点冗长的做事方式。在我不得不手动搜索破解密码对应的wordlist中的行号之后

4

2 回答 2

0

您可以将执行保存./testpassword pass $x在一个变量中:

cat passwords.txt | while read x ; do result=`./testpassword pass $x` ; echo -n "$x: $result" ; done

然后,您可以将 $result 与字符串 "pass=correct" 进行比较,如果它以这种方式找到字符串,则中断循环:

if [[ "$result" == *pass=correct ]]; then break; fi

放在一起:

cat passwords.txt | while read x ; do result=`./testpassword pass $x` ; echo -n "$x: $result" ; if [[ "$result" == *pass=correct ]]; then break; fi ; done
于 2012-09-27T06:39:11.313 回答
0

修改你的testpassword脚本,让它在成功的情况下返回 0,在失败的情况下返回一些其他值。之后,您可以按如下方式重写循环:

cat passwords.txt | while read x; do
    echo -n "$x: " && ./testpassword pass $x && break
done
于 2012-09-27T06:39:20.270 回答