icmp后门的编写

1 关于 icmp的介绍
     ICMP 的全称为(Internet Control Message Protocal)。它是一种差错报告机制,可以被用来向目的主机报告或者请求各种网络信息。这些信息包括回送应答( ping),目的地不可达,源站抑制,回送请求,掩码请求和掩码应答,还有是 路由跟踪等。这些信息是用 ICMP数据报报头中一个 字节长度的类型码来区别的。
    ICMP协议有一个特点是它是无连结的,是由 IP模块实现。由于IP层协议是一种点对点的协议,而非端对端的协议,它提供无连接的数据报服务,没有端口的概念,因此,我们只需要设置 IP地址就能发送 ICMP数据。我们可以在ICMP包中添加数据进行发送,就像利用 TCP连接发送数据那样。
    ICMP的数据报是封装在 IP报头里的。与其它协议的数据报一样,它也是由报头加上数据部分构成的,其报头的格式一个结构结构来表示:(要注意里面的顺序不能搞错)
typedef struct _ihdr
{
BYTE i_type;//8位类型
BYTE i_code; //8位代码
USHORT i_cksum;//16位校验和
USHORT i_id;//标识号
USHORT i_seq;//报文序列号
ULONG timestamp;//时间截
} IcmpHeader;

理论上的 ICMP报文最多可以携带65500byte的数据。
2 icmp可以穿透防火墙的原因
    当我们 ping别人时,我们发出的是类型为8的 ICMP数据包,而别人收到这个数据包就会返回一个类型为0的 ICMP数据包。防火墙允许我们ping别人,实际上就是允许类型为8的 ICMP包出去同时允许类型为0的ICMP包进来。而别人ping我们时,发给我们的是类型为8的ICMP数据包,这时这个数据包就会被防火墙拦截了。
    防火墙允许自己 ping别人,就一定会让类型为8的 ICMP包出去和让类型为0的 ICMP包进来。所以,把带有命令的ICMP包伪装成类型为0的ICMP包,防火墙就以为是你ping别人后返回的ICMP包,这个包就可以进来了。而带有执行结果的ICMP包我们就把它做成类型为8的发出去,防火墙会以为你想ping别人,那么这个包也就可以出去了。这样就可以穿透防火墙了哦。

3 icmp后门的整体思路
    首先,我们要自己构造 ICMP数据包,然后往数据包的后面添加上我们要远端主机执行的命令再把数据包发送到远端主机。远端主机要想收到我们的数据包,这时就要用到socket raw编程,也就是创建一个sniff来嗅探 ICMP类型的数据包。收到数据包后,要进行解包,把 ICMP数据包后面的命令提取出来,然后处理执行。再把执行的结果又放进一个ICMP数据包里,再发回给客户端。客户段把结果提取出来,打印在屏幕上。这就是基本的实现原理。

4    测试环境:
服务端:xpsp3    192.168.1.55
客户端: xpsp3    192.168.1.66
http服务器 win7   192.168.1.100

你可能感兴趣的:(网络安全研究)