只有一行的Perl程序第3/3頁
更新時間:2008年10月02日 00:07:37 作者:
今天來說說perl,只有一行的perl程序。
==
1.首先通過getpwent()獲取當前所有用戶的用戶名和經(jīng)過加密的口令密文,在$u和$c中 ;
2.使用crypt對用戶名進行加密,salt值為口令密文的前兩位,自動忽略其余位;
3.如果加密結(jié)果等同于密文,那么就代表明文和密文匹配,破解成功。
##
# 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位數(shù)字和6位字符以內(nèi)簡單密碼的用戶
##
最后看看結(jié)果:
##
# 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版本,解出了兩個簡單用戶口令;
第二行,使交互式版本,根據(jù)用戶輸入進行解密;
第三行,窮舉版本...時間會比較長一點點哦,DES加密破解速率大概在每秒數(shù)萬到數(shù)十萬個,MD5破解速率
就只有數(shù)千個了。所以在BSD和Linux等使用MD5的平臺上速度會大大慢于AIX或HP-UX等商密出口限制平臺。
還有點點小缺陷,就是使用a..zzzz,0..9999得出的字典集合,只是相應(yīng)位數(shù)的純數(shù)字或純字母集合,不包括
混雜類型和特殊字符的。
不過這行程序用于簡單的用戶口令強度驗證時應(yīng)該足夠了吧,最大的優(yōu)點,一不許要編譯,二支持跨平臺和
多種加密算法的哦:P
在AIX(DES 56),Linux(DES 40),Linux(MD5 128),F(xiàn)reeBSD(MD5 128)上測試通過,不過很不幸在HP-UX
上perl的getpwent是取不到passwd值的,也許Perl不支持HP-UX上的TCB格式存放的Shadow密碼吧。
相關(guān)文章
perl 變量 $/ 的用法解析 上下文為行模式時,$/ 定義以什么來區(qū)分行
默認狀態(tài)下,很顯然都是用\n來區(qū)分行,\n也被我們稱作為換行符。當讀取序列時,按行來讀取時,就是以換行符為標準2013-03-03perl中srand()與time的函數(shù)使用方法介紹
這篇文章主要介紹了perl中srand與time函數(shù)的使用,需要的朋友可以參考下2013-03-03perl如何避免腳本在windows中閃一下就關(guān)閉
寫好了perl程序,運行后,準備等待結(jié)果輸出時,結(jié)果雙擊后,看到屏幕閃了一下,然后什么都沒有了,根本沒有機會然你看到輸出的結(jié)果2013-03-03perl實現(xiàn)的兩個文件對比并對數(shù)據(jù)進行篩選的腳本代碼
對比兩個文件并對數(shù)據(jù)進行篩選的perl腳本,涉及到哈希的應(yīng)用和perl編程風格的改變。有需要的朋友可以參考下2013-03-03