一、本教程作用
1、用在攻击的途径上
2、应急响应过程中,黑客会留后门,如果你连这种留后门方法都不会,怎么去应急?
不知攻,焉知防
二、SSH后门-教程
前提条件: 假设在攻击的过程中通过利用各种getshell,已经拿到目标服务器root权限
环境: 靶机(kali):192.168.160.130
攻击机(centos8):192.168.160.131
2.1 perl脚本SSH后门介绍:
这个ssh 后门伪装成一个perl脚本,名为sshd,位于/usr/sbin/sshd , 将系统原先的sshd 移到/usr/bin下
sshd后门源码:
含义:
第一行, 如果当前文件句柄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 服务,登录并不会有什么异常现象)
补充:
在网络通信当中,大多传递的数据是以二进制流(binary data)存在的。当传递字符串时,不必担心太多的问题,而当传递诸如int、char之类的基本数据的时候,就需要有一种机制将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据。python中的struct模块就提供了这样的机制:
2.2 perl脚本SSH后门使用教程:
第一步:上传perl脚本SSH后门
两种方法:
1、直接在靶机上创建ssh后门文件
2、在本地搭建WEB服务,让靶机wget 下载
本示例中采用第2种 方法,因为实际环境中,编写脚本较麻烦,一般都是本地编写好后,让受害者下载直接使用。
假设已拿到靶机的root权限,接下来下载后门文件sshd
第二步:
将靶机真正的sshd 移至/usr/bin/sshd
将后门ssh (perl脚本移动至/usr/sbin/sshd),并授予执行权限
第三步:重启 ssh 服务
接下来查看一下受害者开放的端口,如下图所示
第四步:控制端socat连接受害者
在控制端(centos上)执行以下命令:
含义: 将输入输出重定向至于socket 192.168.160.130:22 (这样后门perl脚本中STDIN就是socket了), 且这个socket的源端口为31334
执行完命令之后就回车即可,接下来就是已经控制了受害者kali,与受害者的22好端口建立连接,如下图所示
centos上截图:
kali 受害者上截图,多了一个ssh连接
补充:
centos8安装socket 命令(yum 方式安装):
**socat 作用:**是在两个流之间建立双向的通道,且支持众多协议和链接方式:ip,tcp,udp,ipv6,pipe,exec,system,open,proxy,openssl,socket等
三、perl脚本SSH后门——应急响应发现
其实这款后门也比较好发现,首先正常的sshd 文件是ELF格式,而后门是纯文本脚本,使用file 命令就可以发现
经查看后门是:/usr/sbin/sshd
/usr/bin/sshd 是正常文件