科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道揭开木马的神秘面纱之新型木马篇(3)

揭开木马的神秘面纱之新型木马篇(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作为服务端的监听程序,基本的操作相同,只是需要使用recvfrm函数接收ICMP_ECHOREPLY报文并用decoder函数将接收来的报文解码为数据和命令:

来源:论坛整理 2008年7月19日

关键字: 病毒查杀 病毒 木马

  • 评论
  • 分享微博
  • 分享邮件
 作为服务端的监听程序,基本的操作相同,只是需要使用recvfrm函数接收ICMP_ECHOREPLY报文并用decoder函数将接收来的报文解码为数据和命令:

recv_icmp=recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct
sockaddr*)&from,&fromlen);

decode_resp(recvbuf,recv_icmp,&from);

decoder函数:

void decoder(char *buf, int bytes,struct sockaddr_in *from)

{

 IpHeader *iphdr;

 IcmpHeader *icmphdr;

 unsigned short iphdrlen;

 iphdr = (IpHeader *)buf; //IP首部的地址就等于buf的地址

 iphdrlen = iphdr->h_len * 4 ; // 因为h_len是32位word,要转换成bytes必须*4

 icmphdr = (IcmpHeader*)(buf + iphdrlen); //ICMP首部的地址等于IP首部长度加buf

 printf("%d bytes from %s:",bytes, inet_ntoa(from->sin_addr));
//取出源地址

 printf(" icmp_id=%d. ",icmphdr->i_id); //取出进程号

printf(" icmp_seq=%d. ",icmphdr->i_seq); //取出序列号

 printf(" icmp_type=%d",icmphdr->i_type); //取出类型

 printf(" icmp_code=%d",icmphdr->i_code); //取出代码

 for(i=0;i < ICMP_DATA_SIZE;I++) printf(?%c?,*(buf+iphdrlen+i+12));//取出数据段

}

  注:在WIN2000下使用SOCK_RAW需要管理员的权限。

  对于ICMP木马,除非你使用嗅探器或者监视windows的SockAPI调用,否则从网络上是很难发现木马的行踪的(关于进程的隐藏及破解会在下一篇文章中进行讨论),那么,有什么可以补救的方法呢?有的,就是过滤ICMP报文,对于win2000可以使用系统自带的路由功能对ICMP协议进行过滤,win2000的Routing
& Remote Access功能十分强大,其中之一就是建立一个TCP/IP协议过滤器:打开Routing & Remote Access,选中机器名,在IP路由->General->网卡属性中有两个过滤器-输入过滤和输出过滤,只要在这里将你想过滤的协议制定为策略,ICMP木马就英雄无用武之地了;不过值得注意的是,一旦在输入过滤器中禁止了ICMP_ECHOREPLY报文,你就别想再用Ping这个工具了;如果过滤了所有的ICMP报文,你就收不到任何错误报文,当你使用IE访问一个并不存在的网站时,往往要花数倍的时间才能知道结果(嘿嘿,网络不可达、主机不可达、端口不可达报文你一个都收不到),而且基于ICMP协议的tracert工具也会失效,这也是方便和安全之间的矛盾统一了吧。

  本文的撰写是为了深入地研究Win2000的入侵和防御技术,探讨TCP/IP协议和Windows编程技巧,请不要将文中的内容用于任何违法的目的,文中所附为试验性的ICMP通讯程序,仅仅提供通过ICMP_ECHOREPLY进行通讯交换数据的功能以供研究;如果你对本文中的内容或代码有疑问,请Mail
to:Shotgun@xici.net,但是出于网络安全的考虑,本人不会提供任何木马软件及代码。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章