2012-09-27 100 views
0

我有一个名为./testpassword语法二元如下shell脚本密码审计

./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程序,除了它是一个漫长的做事方式。之后,我不得不手动搜索的单词列表对应的破解密码的行号

回答

0

您可以保存的./testpassword pass $x执行中的变量做的:

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

然后,你可以比较$导致的字符串“通=正确的”,并打破循环,如果找到字符串是这样的:

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 
+0

非常感谢您的回复。我正试图弄清楚现在的 – user1702184

+0

我已经编辑了答案,向您展示如何测试字符串并打破循环 – arutaku

+0

感谢您将其分解得非常清楚。目前我已经测试过并且命令成功运行,但是当找到正确的输出时似乎没有中断。它将像往常一样继续执行。我也尝试修改$ result来指向不正确的密码,并且不会中断 – user1702184

0

修改您的testpassword脚本,所以它会在成功时返回0,如果失败则返回其他值。之后,您可以按如下方式重写您的循环:

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

感谢您的回复。 testpassword是一个二进制文件。我假设在这种情况下我将无法更改退出码 – user1702184

+0

在这种情况下,用'echo -n“替换内部循环$ x:”; RES = $(。/ testpassword传递$ x); echo $ res; [“$ res”==“pass = correct”] && break; DONE – Mark