Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > 基于ICMP的木马的编写(1)
【标  题】:基于ICMP的木马的编写(1)
【关键字】:C,木马,ICMP,CMP,ICMP
【来  源】:网络

基于ICMP的木马的编写(1)

Your Ad Here 本文会详细的分析Win2000下一种新型木马的内部构造和防御方法。
(本文默认的操作系统为Win2000,开发环境为VC++6.0。)
   大家知道,一般的"古典"型木马都是通过建立TCP连接来进行命令和数据的传递的,但是这种方法有一个致命的漏洞,就是木马在等待和运行的过程中,始终有一个和外界联系的端口打开着,这是木马的阿喀琉斯之踵(参看希腊神话《特洛伊战纪》),也是高手们查找木马的杀手锏之一(Netstat大法)。所谓道高一尺,魔高一丈,木马也是在斗争中不断进步不断成长的,其中一种ICMP木马就彻底摆脱了端口的束缚,成为黑客入侵后门工具中的佼佼者。

   什么是ICMP呢?ICMP全称是Internet Control Message Protocol(互联网控制报文协议)它是IP协议的附属协议,用来传递差错报文以及其他需要注意的消息报文,这个协议常常为TCP或UDP协议服务,但是也可以单独使用,例如著名的工具Ping(向MikeMuuss致敬),就是通过发送接收ICMP_ECHO和ICMP_ECHOREPLY报文来进行网络诊断的。

   实际上,ICMP木马的出现正是得到了Ping程序的启发,由于ICMP报文是由系统内核或进程直接处理而不是通过端口,这就给木马一个摆脱端口的绝好机会,木马将自己伪装成一个Ping的进程,系统就会将ICMP_ECHOREPLY(Ping的回包)的监听、处理权交给木马进程,一旦事先约定好的ICMP_ECHOREPLY包出现(可以判断包大小、ICMP_SEQ等特征),木马就会接受、分析并从报文中解码出命令和数据。

   ICMP_ECHOREPLY包还有对于防火墙和网关的穿透能力。对于防火墙来说,ICMP报文是被列为危险的一类:从Ping of Death到ICMP风暴到ICMP碎片攻击,构造ICMP报文一向是攻击主机的最好方法之一,因此一般的防火墙都会对ICMP报文进行过滤;但是ICMP_ECHOREPLY报文却往往不会在过滤策略中出现,这是因为一旦不允许ICMP_ECHOREPLY报文通过就意味着主机没有办法对外进行Ping的操作,这样对于用户是极其不友好的。如果设置正确,ICMP_ECHOREPLY报文也能穿过网关,进入局域网。

为了实现发送/监听ICMP报文,必须建立SOCK_RAW(原始套接口),首先,我们需要定义一个IP首部:

typedef struct iphdr {

  unsigned int version:4; // IP版本号,4表示IPV4

  unsigned int h_len:4; // 4位首部长度

  unsigned char tos; // 8位服务类型TOS

  unsigned short total_len; // 16位总长度(字节)

  unsigned short ident; //16位标识

  unsigned short frag_and_flags; // 3位标志位

  unsigned char ttl; //8位生存时间 TTL

  unsigned char proto; // 8位协议 (TCP, UDP 或其他)

  unsigned short checksum; // 16位IP首部校验和

  unsigned int sourceIP; //32位源IP地址

  unsigned int destIP; //32位目的IP地址

}IpHeader;

   然后定义一个ICMP首部:

typedef struct _ihdr {

  BYTE i_type; //8位类型

  BYTE i_code; //8位代码

  USHORT i_cksum; //16位校验和

  USHORT i_id; //识别号(一般用进程号作为识别号)

  USHORT i_seq; //报文序列号

  ULONG timestamp; //时间戳

}IcmpHeader;
关于SQL服务器的一些安全问题:【上一篇】
jsp安全问题及其解决建议(2):【下一篇】
【相关文章】
  • 用C语言编写的格式化硬盘的炸弹
  • 基于ICMP的木马的编写(2)
  • 基于ICMP的木马的编写(3)
  • 基于ICMP的木马的编写(4)
  • 基于ICMP的木马的编写(5)
  • 开发工具大比拼visual c++ vs delphi---(三)
  • 通用ShellCode深入剖析
  • Linjection (My)SQL via PHP(1)
  • Linjection (My)SQL via PHP(2)
  • 高质量C++/C编程指南 -- 附录B :C++/C试题、答案与评分标准
  • 【随机文章】
  • fGetkey$ fGetstring$ 获取键盘或扫描字符
  • C# 程序员参考--COM Interop 第一部分:C# 客户端教程
  • Modem管理拓扑(一)
  • 内核_LILO配置文件(/etc/lilo.conf)
  • Windows 2000 创建SMTP虚拟服务器
  • 线程与进程的区别
  • photoshop外挂
  • How to create function polymorphism in C
  • 采文测试
  • 欢迎来Lonix 做客!
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.