欢迎大家一起来Hacking水友攻防实验室学习,渗透测试,代码审计,免杀逆向,实战分享,靶场靶机,求关注
一、远程登录ssh时候w和last无法发现
ssh -T root@127.0.0.1 /bin/bash -i
ssh -lroot 目标ip /usr/bin/bash
/usr/bin/bash -i 表示在登录之后 调用bash命令
-i 表示是交互式shell
原因:w和last,只能发现完整的tty交互式终端,而上述命令并不会分配一个真正的tty,仅仅是调用了/bin/bash而已(接受我们的输入然后输出)
#不留下.bash_history
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0
参考大佬的解释:
这是因为w 命令显示信息来源于utmp,last 来源于wtmp,并不是所有程序登录的时候都会调用utmp 和wtmp 日志记录接口,只有交互式会话,才会调用utmp 和 wtmp的日志记录接口,比如 通过tty 或者pts或者图形界面登录的都会调用utmp 和wtmp 日志记录接口,然后我们在使用w 和last 命令的时候就会发现登录信息
ssh -lroot 192.168.12.51 /usr/bin/bash 为什么不属于交互式会话
ssh -lroot 192.168.12.51 /usr/bin/bash 其实就相当于登录之后直接调用bash这个名,此时系统没有为其分配tty,不算一个完整交互式会话,只不过bash 接受输入,然后有输出,让我们误以为是交互式会话,其实不然,你可以将/usr/bin/bash 替换成/usr/bin/ls 试一下,就是简单执行以下就退出了
二、pst,tty区别
pst/0就是地0个终端窗口 tty是完整的交互式终端
三、如何发现隐藏的ssh登录行为?
如果是隐匿的ssh正在进行,可以通过lsof 或者 netstat 或者ps 命令发现
1)通过lsof发觉异常ssh登录
2)通过ps命令发现异常ssh登录
这里有个notty的 sshd 进程,说明就是通过上文所述的trick隐匿于w和last命令的ssh登录行为
3)如果是历史ssh 隐匿登录行为,如何找出历史登录行为呢
通过分析/var/log/secure 日志(有的系统是/var/log/auth.log)
从 Accepted publickey for root from 192.168.12.54 一行可以得出ssh的登录时间
从Disconnected from 192.168.12.54 port 43000 一行可以得出ssh的退出时间
如果从secure中的分析结果和 last 对不上,那么这些对不上的登录行为有可能就是通过本文所介绍的隐匿方式登录的
其实像scp 、sftp 等也涉及到ssh登录,但却不会在w 和last中留下日志的程序,也都是因为他们不输入交互式会话。