破解密碼最常用的手段之一,就是字典暴力破解。我們使用一個簡單的腳本,讓你的密碼每時每刻都在變換,將暴力破解的可能降到最低。即時暴力得到了密碼,下一分鐘,密碼可能就會變掉,破解出來的密碼也失去了用處。
基本的原理是,使用root權限,調用passwd命令,定時修改用戶的密碼。
但是由於passwd命令比較特殊,要求必須人機交互狀態下輸入新密碼,因此使用一般的方式無法實現完全自動化。
在這裡我們使用一個特殊的模塊 Expect。他可以模擬人機操作的環境。
(也可以使用linux的 expect 命令完成,但是我們這裡主要討論perl)
密碼隨時變化,你自己必須要知道當前的密碼。這樣就要求我們有一套算法。並且有一個隨機變化的因子。
例如:我們選取時間為因子。算法為 'password' + 時間的分鐘數
現在為 11:39 分,那麼當前的密碼就是 password39
如果時間是 13:07分,密碼就是 password07
當然這個是最簡單的一個算法,你可以定義自己更復雜的算法。
代碼如下:
#!/usr/bin/perluse Expect;
# 得到時間因子my ($sec,$min,$hour,$mday,$mon,$year)= localtime();
$mon=$mon+1;if($mon<10){$mon="0".$mon;}if($mday<10){$mday="0".$mday;
}if($hour<10){$hour="0".$hour;}if($min<10){$min="0".$min;
}if($sec<10){$sec="0".$sec;}$year=$year+1900;
# 產生密碼my $password = "password".$min;
# 開始變化密碼my $exp = Expect->spawn("passwd root");
$exp->expect(10,['password: $', sub {my $fh = shift;print $fh "$password";exp_continue;}]);
將以上代碼保存為 /root/passwd.pl 文件,並且給與700 權限(為了安全,不允許其他人讀取)
然後在 root 帳戶的 crontab 裡面加入
* * * * * /root/passwd.pl >/dev/null 2>&1
即可。