|
和主动的协议识别原理相同,Lance Spitzner在《Passive Fingerprinting》中提出了被动的协议识别,同样用来判别主机系统。这种办法主要集中考虑: 1、TTL的设置 2、WINDOW SIZE:操作系统设置的窗口大小 3、DF:操作系统是否设置分片位 4、TOS:操作系统设置的服务类型
比如多数系统使用DF位设置,但是有些系统如SCO和OPENBSD不使用这个DF标志,这样就可以用来识别一些没有设置DF位的操作系统。被动协议识别也可以用来判断远程代理防火墙,因为代理防火墙重建对客户的连接,它有它自身的特征代码,也可以用这样的办法来分析。在(http://the.wiretapped.net/security/info/papers/security /lance-spitzner/finger.html)可以找到Lance Spitzner的这篇文章。
主动识别方式需要主动发送数据包,因此相对于那些安全设备来说,也比较容易识别这些数据包,同被动识别比较起来,隐蔽性稍微差些。
Reference: 1、《X - Remote ICMP Based OS Fingerprinting Techniques》 2、Phrack #57《ICMP based remote OS TCP/IP stack fingerprinting techniques》 3、Fyodor《Remote OS detection via TCP/IP Stack FingerPrinting》 4、Lance Spitzner《Passive Fingerprinting》
计划介绍的内容包括信息收集,探测,渗透,帐号破解,入侵攻击,清除踪迹,后门制作等等(庞大的计划),主要都是从实现上来讲的(使用其他工具的不是计划内),其中的代码都需要自己写。不过我时间有限,写一次需要很长时间,也许一段时间内没时间写。那也怪不得我哦。不过,只希望能够让更多人脱离“工具黑客”,去看看实际到底是什么,然后去自己探索应该是什么。
写这个的目的不是教人怎么入侵怎么“黑”,只是让更多人去学习,去研究。
欢迎交流,Email: refdom@263.net
声明:所有都是属于一种技术上的研究和探讨,如果有人利用下面涉及的技术进行破坏等,与本人无任何关系! ************************************************************************
2、目标探测
确定目标并收集相关的周边信息之后,更直接地要接触目标的手段的就是进行探测了。探测一台主机包括是否活动、主机系统、正在使用哪些端口、提供了哪些服务、相关服务的软件版本等等 对这些内容的探测就是为了“对症下药”。
探测也就是大家所说的扫描,应该说扫描是最多使用工具的一个步骤,现在扫描工具也非常的多,从一般的Port Scanner到可以穿透防火墙的Scan 工具,比如强大的nmap,国内的X-Scanner、流光等等。在这里,我不是来介绍工具使用的,而主要是看看这些扫描工具到底是怎么来实现的。如果你喜欢上一个工具的话,也就表示你丧失了一次进步的机会。 这里都是一些简单的小程序,功能非常有限,只是为了说明实现原理而写的。有兴趣的可以自己做更广泛的修改,而实现更多的功能。
ICMP协议——PING是最常用的,也是最简单的探测手段,用来判断目标是否活动。实际上Ping是向目标发送一个要求回显(Type = 8)的ICMP数据报,当主机得到请求后,再返回一个回显(Type = 0)数据报。而且Ping 程序一般是直接实现在系统内核中的,而不是一个用户进程。我们也可以很容易实现一个Ping程序,这里我列出我写的一个简单Ping程序。
#include #include
typedef struct ip_hdr //定义IP首部 { unsigned char h_verlen; //4位首部长度,4位IP版本号 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地址 }IP_HEADER;
typedef struct icmp_hdr { BYTE i_type; // ICMP报文类型 BYTE i_code; // ICMP代码 USHORT i_cksum; // 校验和 USHORT i_id; // 标志符 USHORT i_seq; // 序号 ULONG timestamp; // 时间戳 } ICMP_HEADER;
//CheckSum:计算校验和的子函数 USHORT checksum(USHORT *buffer, int size) { unsigned long cksum=0; while(size >1) { cksum+=*buffer++; size -=sizeof(USHORT); } if(size ) { cksum += *(UCHAR*)buffer; } cksum = (cksum >> 16) + (cksum & 0xffff); cksum += (cksum >>16); return (USHORT)(~cksum); }
上一页 [1] [2] [3] [4] [5] [6] 下一页 |