我正在尝试编写一个脚本来帮助计算机安全。我正在尝试寻找开放的端口,找到 PID,并找到调用它的内容。
我让它工作了,我的输出看起来像这样:
IPV4 - 1234 - 2566/nc
Running from: `/bin/nc.openbsd`
Command run: `nc -l 1234`
我能够从哪里获得这些值netstat
,/proc/$PID/exe
以及/proc/$PID/cmdline
然而,在寻找后门的本质上,我的计算机上的某个地方可能有一个脚本,它会调用nc
.是否可以从 的 PIDnc
找到原始脚本位置?我尝试查看其他文件,但/proc/$PID/*
无济于事。
比如说/etc/rc.local
我输入了一行nc -l 1234
,我能得到一些东西来告诉我 nc 命令是由打开的/etc/rc.local
吗?
答案1
要可移植地(POSIXly)获取进程的父 PID,您可以使用:
ps -p "$PID" -o ppid=
或(在 Linux 上):
grep '^PPid' "/proc/$PID/status" |cut -f2
答案2
我最终使用了以下内容:
grep -r "$command" $(ls -l /proc/$pid/cwd | awk '{ print $11 }') | awk -F: '{ print $1 }'
在哪里$command="$(cat /proc/$pid/cmdline | sed 's\x0/ g' | sed 's/.$//')"
它将递归地 grep 遍历脚本所在目录中的文件,以查找包含运行 nc 命令的命令行的文件。
看起来有点乱,所以如果有人能帮忙清理一下那就太好了:)
感谢各位的帮助!
答案3
您可以使用以下命令获取 pid 运行位置
ls -l /proc/PID_id/cwd